Performance Analyzer for 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
下将显示10个最昂贵的查询,通过平均逻辑下令从A S读取QL服务器DMV观点:
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
希望有所帮助。
嗨。我认为INDEX_STATS_CURR_VW是一个视图?这是不承认,我得到一个“无效的对象.....”错误。我正在使用SQL 2005. – Celeste 2011-04-04 15:00:08
您是否安装了性能分析器(请参阅上面的链接)? – 10p 2011-04-04 20:00:31
还没有,没有权利(我们的组织外包了那部分业务)。感谢你的帮助! – Celeste 2011-04-05 07:10:58