Performance Analyzer для Microsoft Dynamics можно использовать для анализа дорогих и длительных запросов, отсутствующих кластеризованных индексов, неправильных и отсутствующих индексов, скрытых сканирований кластеризованных индексов и т. Д. В БД AX.
Способ устранения количества ненужных индексов состоит в поиске индексов, которые являются подмножеством левого ключа другого индекса в той же таблице.Если ключ набора не является уникальным, его полезность относится к ключу набора.Чтобы получить список таких индексов, вы можете выполнить следующий запрос:
SELECT *
FROM INDEX_STATS_CURR_VW O
WHERE INDEX_DESCRIPTION NOT LIKE '%UNIQUE%'
AND EXISTS
(
SELECT * FROM INDEX_STATS_VW I
WHERE I.RUN_NAME = O.RUN_NAME
AND I.TABLE_NAME = O.TABLE_NAME
AND I.INDEX_KEYS <> O.INDEX_KEYS
AND I.INDEX_KEYS LIKE O.INDEX_KEYS + ',%'
AND O.USER_SEEKS = 0
)
ORDER BY TABLE_NAME, INDEX_KEYS
Чтобы получить обзор всех индексов, которые не использовались в течение всего периода мониторинга, вы можете выполнить следующий запрос:
SELECT TABLE_NAME,
INDEX_NAME,
INDEX_DESCRIPTION,
INDEX_KEYS,
INCLUDED_COLUMNS,
SUM(USER_SEEKS) AS USER_SEEKS,
SUM(USER_SCANS) AS USER_SCANS,
SUM(USER_LOOKUPS) AS USER_LOOKUPS,
SUM(USER_UPDATES) AS USER_UPDATES
FROM INDEX_STATS_VW
WHERE INDEX_DESCRIPTION NOT LIKE '%UNIQUE%'
GROUP BY TABLE_NAME, INDEX_NAME, INDEX_DESCRIPTION, INDEX_KEYS, INCLUDED_COLUMNS
HAVING SUM(USER_SEEKS) = 0
AND SUM(USER_SCANS) = 0
AND SUM(USER_LOOKUPS) = 0
ORDER BY 9 DESC
Вы также можете идентифицировать запросы, которые используют поиск по индексу для фильтрации данных:
SELECT TOP 100 * FROM HIDDEN_SCANS_CURR_VW
ORDER BY TOTAL_ELAPSED_TIME DESC
Ниже будут показаны 10 самых дорогих запросов, упорядоченных по средним логическим чтениям с точки зрения DMV SQL Server:
SELECT TOP 10
SQL_TEXT,
QUERY_PLAN,
TOTAL_ELAPSED_TIME,
AVG_ELAPSED_TIME,
MAX_ELAPSED_TIME,
AVG_LOGICAL_READS,
EXECUTION_COUNT
FROM QUERY_STATS_CURR_VW
ORDER BY AVG_LOGICAL_READS DESC
Вам также необходимо взглянуть на другие параметры, такие как счетчик выполнения (сколько раз было выполнено запросов).
Если вы хотите получить обзор запросов AXпри работе более 1000 мс можно выполнить следующий запрос:
SELECT CONVERT(nvarchar,CREATED_DATETIME,101) AS CREATED_DATE,
DATEPART (hh, CREATED_DATETIME) AS HOUR_OF_DAY,
COUNT (CREATED_DATETIME) AS EXECUTION_COUNT,
SUM (SQL_DURATION) AS TOTAL_DURATION,
AVG (SQL_DURATION) AS AVERAGE_DURATION
FROM AX_SQLTRACE_VW
WHERE SQL_DURATION > 1000 and CREATED_DATETIME > '04/01/2011'
GROUP BY CONVERT(nvarchar, CREATED_DATETIME, 101), DATEPART (hh, CREATED_DATETIME)
ORDER BY CREATED_DATE, HOUR_OF_DAY
Надеюсь, это поможет.