SQL Tuning

Problém se startem RAC na AIX

Po restartu clusteru na AIX OS se nám nedařilo nahodit druhý nód. Problém se nakonec ukázal v neexistenci bpf zařízení, byly pouze 4, na ostatních strojích jich bylo vždy 20. Stačilo na druhém nódu pod rootem smazat všechny bpf zařízení a zase je vytvořit. 

Popsáno v dokumentech Doc ID 2381091.1 Doc ID 1988276.1

rm /dev/bpf* 
/usr/sbin/tcpdump -D

Konfigurace CPU MS SQL Serveru na VMWare

Jestli používáte MS SQL Server na VMWaru a vidíte využití vašeho CPU ne na 100% a přitom databáze čeká na CPU, tak se může jednat o vyčerpané CPU na fyzickém stroji, nebo třeba o špatné nastavení VMWare. Ten umožňuje nastavit, jak přidávat CPU. Standard edice MS SQL Serveru umožňuje využívat pouze 4 sockety, takže pokud chcete využít více CPU, musíte je přidávat jako cores a nikoliv jako sockets. Níže uvedený select, vám úkáže, kolik CPU MS SQL Server vidí, a kolik jich opravdu využije. Jakmile se čísla nerovnají, máte nastavenou stanici špatně - resp. MS SQL Server nevyužije všechny CPU.

SELECT (SELECT  cpu_count FROM sys.dm_os_sys_info ) AS "ASSIGNED ONLINE CPU #", (SELECT  COUNT(*) FROM sys.dm_os_schedulers WHERE status = 'VISIBLE ONLINE') AS "VISIBLE ONLINE CPU #"

Jak zjistit verzi PSU na databazi

Pro zjisteni verze PSU nainstalovane na SW pouzijeme :

opatch lsinv -bugs_fixed | grep -i psu

pro zjisteni verze nainstalovane na db pouzijeme tento select (prihlaseni pod sysem)

 

select substr(action_time,1,30) action_time, substr(id,1,10) id, substr(action,1,10) action,
substr(version,1,8) version, substr(BUNDLE_SERIES,1,6) bundle,substr(comments,1,20) 
comments from registry$history;

Debug procesu na AIX

Pro debug nekterych procesu se pouziva prikaz truss. Jeho pouziti je ve vetsine navodu uvedeno pro Solaris, tak zde uvadim pouziti pro AIX. Pouzito napriklad zde pro ladeni LGWR procesu a waitu LOG FILE SYNC.

truss -r -w -d -D -e -o /tmp/truss_output.log -p PID

Zjisteni velikosti flashback logu

SELECT trunc(b.begin_interval_time),
round(sum(GREATEST( ((SELECT d.value FROM dba_hist_sysstat d WHERE d.snap_id=a.snap_id+1
AND d.instance_number=a.instance_number
AND d.stat_name = 'flashback log write bytes') - a.value),0)/1024/1024)) FROM dba_hist_sysstat a,dba_hist_snapshot b
WHERE a.snap_id=b.snap_id AND a.instance_number=b.instance_number AND a.stat_name = 'flashback log write bytes'
GROUP BY trunc(b.begin_interval_time) ORDER BY 1 ;

Výpis doporučených indexů

MS SQL Server má pohled , ze kterého můžete zjistit, které indexy by vám pomohli a zároveň o kolik. Rozhodně zajímavé informace, které z vás zadarmo udělají tuning guru :-D


SELECT CAST(SERVERPROPERTY('ServerName') AS [nvarchar](256)) AS [SQLServer] ,db.[database_id] AS [DatabaseID] ,db.[name] AS [DatabaseName] ,id.[object_id] AS [ObjectID] ,id.[statement] AS [FullyQualifiedObjectName] ,id.[equality_columns] AS [EqualityColumns] ,id.[inequality_columns] AS [InEqualityColumns] ,id.[included_columns] AS [IncludedColumns] ,gs.[unique_compiles] AS [UniqueCompiles] ,gs.[user_seeks] AS [UserSeeks] ,gs.[user_scans] AS [UserScans] ,gs.[last_user_seek] AS [LastUserSeekTime] ,gs.[last_user_scan] AS [LastUserScanTime] ,gs.[avg_total_user_cost] AS [AvgTotalUserCost] ,gs.[avg_user_impact] AS [AvgUserImpact] ,gs.[system_seeks] AS [SystemSeeks] ,gs.[system_scans] AS [SystemScans] ,gs.[last_system_seek] AS [LastSystemSeekTime] ,gs.[last_system_scan] AS [LastSystemScanTime] ,gs.[avg_total_system_cost] AS [AvgTotalSystemCost] ,gs.[avg_system_impact] AS [AvgSystemImpact] ,gs.[user_seeks] * gs.[avg_total_user_cost] * (gs.[avg_user_impact] * 0.01) AS [IndexAdvantage] ,'CREATE INDEX [Missing_IXNC_' + OBJECT_NAME(id.[object_id], db.[database_id]) + '_' + REPLACE(REPLACE(REPLACE(ISNULL(id.[equality_columns], ''), ', ', '_'), '[', ''), ']', '') + CASE WHEN id.[equality_columns] IS NOT NULL AND id.[inequality_columns] IS NOT NULL THEN '_' ELSE '' END + REPLACE(REPLACE(REPLACE(ISNULL(id.[inequality_columns], ''), ', ', '_'), '[', ''), ']', '') + '_' + LEFT(CAST(NEWID() AS [nvarchar](64)), 5) + ']' + ' ON ' + id.[statement] + ' (' + ISNULL(id.[equality_columns], '') + CASE WHEN id.[equality_columns] IS NOT NULL AND id.[inequality_columns] IS NOT NULL THEN ',' ELSE '' END + ISNULL(id.[inequality_columns], '') + ')' + ISNULL(' INCLUDE (' + id.[included_columns] + ')', '') AS [ProposedIndex] ,CAST(CURRENT_TIMESTAMP AS [smalldatetime]) AS [CollectionDate] FROM [sys].[dm_db_missing_index_group_stats] gs WITH (NOLOCK) INNER JOIN [sys].[dm_db_missing_index_groups] ig WITH (NOLOCK) ON gs.[group_handle] = ig.[index_group_handle] INNER JOIN [sys].[dm_db_missing_index_details] id WITH (NOLOCK) ON ig.[index_handle] = id.[index_handle] INNER JOIN [sys].[DATABASES] db WITH (NOLOCK) ON db.[database_id] = id.[database_id] WHERE id.[database_id] >4 -- Remove this to see for entire instance ORDER BY [IndexAdvantage] DESC OPTION (RECOMPILE);

 

zdroj selectu

 

Home ← Older posts