Microsoft Dynamics 性能分析器可用于分析 AX DB 中昂贵且长时间运行的查询、丢失的聚集索引、不正确和丢失的索引、隐藏的聚集索引扫描等。
消除不必要索引数量的一种方法是搜索作为同一表上另一个索引的左键子集的索引。除非子集键是唯一的,否则它的用处包含在超集键中。要获取此类索引的列表,您可以运行以下查询:
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
以下将显示从 SQL Server DMV 角度按平均逻辑读取排序的 10 个最昂贵的查询:
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
您还需要查看其他参数,例如执行计数(执行查询的次数)。
如果您想了解运行时间超过 1000 毫秒的 AX 查询的概览,您可以运行以下查询:
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
希望有帮助。