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.
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
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