web-dev-qa-db-fra.com

Comment comprendre les E / S du disque par table

Est-il possible de déterminer quelles tables contribuent le plus à lire/écrit les opérations si elles sont toutes dans le même dossier?

J'ai regardé le DMV suivant

SELECT *
FROM sys.dm_io_virtual_file_stats

mais cela ne montre que des statistiques pour l'ensemble du fichier et ne savent pas comment se séparer en tables individuelles. Essayer de le faire afin d'identifier des tableaux qui devraient être des places dans leurs propres fichiers sur différents disques.

4
Vladimir Oselsky

Les deux requêtes suivantes donnent des statistiques d'utilisation d'index par table qui devraient être un bon indicateur de quelles tables causent les opérations les plus IO.

SELECT d.name as [Database],  OBJECT_NAME(S.[OBJECT_ID]) AS [OBJECT NAME],          
I.[NAME] AS [INDEX NAME],          
USER_SEEKS,          
USER_SCANS,          
USER_LOOKUPS,          
USER_UPDATES 
FROM     SYS.DM_DB_INDEX_USAGE_STATS AS S          
INNER JOIN SYS.INDEXES AS I ON I.[OBJECT_ID] = S.[OBJECT_ID]               
AND I.INDEX_ID = S.INDEX_ID 
Join sys.Databases d on s.database_id = d.database_id
WHERE    OBJECTPROPERTY(S.[OBJECT_ID],'IsUserTable') = 1 
Order by USER_SEEKS + USER_SCANS + USER_LOOKUPS + USER_UPDATES desc


SELECT d.name, t.name, OBJECT_NAME(A.[OBJECT_ID]) AS [OBJECT NAME],       
 I.[NAME] AS [INDEX NAME],       
  A.LEAF_INSERT_COUNT,        
  A.LEAF_UPDATE_COUNT,        
  A.LEAF_DELETE_COUNT

FROM   SYS.DM_DB_INDEX_OPERATIONAL_STATS (NULL,NULL,NULL,NULL ) A        
INNER JOIN SYS.INDEXES AS I          ON I.[OBJECT_ID] = A.[OBJECT_ID]   
join sys.tables t on i.object_id = t.object_id      
join sys.databases d on a.database_id = d.database_id
AND I.INDEX_ID = A.INDEX_ID WHERE  OBJECTPROPERTY(A.[OBJECT_ID],'IsUserTable') = 1

order by A.LEAF_INSERT_COUNT + A.LEAF_UPDATE_COUNT + A.LEAF_DELETE_COUNT desc
5
James Anderson

Il n'y a pas de DMV direct qui vous dira des E/S pour une table spécifique. J'utilise surtout sys.dm_exec_query_stats DMV qui dispose d'informations utiles sur qui prend des lectures physiques et logiques élevées. En regardant la requête, vous pouvez voir les tableaux impliqués si la requête a une table multiple, elle ne donnera pas d'informations précises, mais vous sauriez à quoi seraient toutes les tables générant la plupart des demandes d'E/S

SELECT TOP 25 
QS.EXECUTION_COUNT AS [EXECUTION_COUNT]      
,QS.TOTAL_WORKER_TIME AS [CPU UTILIZATION]     
,QS.TOTAL_ELAPSED_TIME AS [ELAPSED_TIME]      
,QS.TOTAL_LOGICAL_READS AS [LOGICAL_READS]      
,QS.TOTAL_LOGICAL_WRITES AS [LOGICAL_WRITES]      
,QS.TOTAL_PHYSICAL_READS AS [PHYSICAL_READS]
,ST.TEXT
FROM SYS.DM_EXEC_QUERY_STATS QS         
CROSS APPLY SYS.DM_EXEC_SQL_TEXT(QS.SQL_HANDLE) ST
ORDER BY QS.TOTAL_PHYSICAL_READS DESC;

J'espère que cela t'aides

0
Shanky