2012-10-19 178 views
2

我刚刚从4.0升级到CRM 2011,我在应用程序日志中看到很多错误,我认为是由于电子邮件路由器。错误文本是“查询执行时间30.0秒超过了10秒的阈值”。CRM 2011 EmailHashBase

下面是它的执行查询:

WITH Candidates 
     (
      ActivityId 
     ) AS 
     (SELECT ActivityId 
     FROM  EmailHashBase WITH (NOLOCK) 
     WHERE ActivityId IN 
       (SELECT ActivityId 
       FROM  EmailHashBase WITH (NOLOCK) 
       WHERE HashType = 0 
        AND Hash IN (111682,1892164739,45,1824023892,54,3805,125879) 
       GROUP BY ActivityId 
       HAVING COUNT(ActivityId) >= 7 
       ) 
      AND HashType = 1 
      AND Hash IN (969105075,1418975348,547970098,1044570065,-1578559672,1137188287,-1492206818,1365121987,1893861533,-1313312639,-1829169632,-1685403462,-518982188,1123523219,284291011,-981044541,1790111815,-808308608,-599769785,971845046) 
     GROUP BY ActivityId 
     HAVING COUNT(ActivityId) >= 2 
     ) 
SELECT TOP 1 a.ActivityId 
FROM  ActivityPointerBase AS a WITH (NOLOCK) 
WHERE a.ActivityId IN 
      (SELECT ActivityId 
      FROM Candidates AS c 
      WHERE(
        (SELECT COUNT(*) 
          FROM EmailHashBase AS h 
          WHERE h.ActivityId = c.ActivityId 
           AND h.HashType = 0 
        ) 
        <= 7 
       ) 
      ) 
ORDER BY a.ModifiedOn DESC 

运行此查询直接对数据库需要长达一分钟。我使用“Set Statistics IO ON”运行它,并得到如下结果:

Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. 
Table 'EmailHashBase'. Scan count 17696074, logical reads 53155625, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. 
Table 'ActivityPointerBase'. Scan count 1, logical reads 5060, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. 

SQL Server Execution Times: 
CPU time = 36567 ms, elapsed time = 36562 ms. 

显然,EmailHashBase存在问题。我在哈希列上添加了一个非聚簇索引并重建了这些索引,但我仍然获得了高扫描和逻辑读取计数。

我无法更改查询。

关于我能做些什么来解决这个问题的任何建议?

+0

您可以在数据库引擎优化顾问中运行此查询并查看它的建议? –

+0

我通过调整顾问运行它,并没有收到任何建议和估计的0%改善。 – chandley

+0

查询是CRM正在执行还是已实施的自定义过程的一部分? –

回答

0

原因是数据库优化顾问创建了一个索引,导致延迟。删除索引已解决该问题。