2016-04-08 63 views
1

我有一个SQL Server 2008 R2 SP1集群与2008操作系统。任何时候发生重启或在接下来的几天发生故障转移时,任何处理都非常缓慢;但是如果我们让他们跑步,他们跑得更好。我一直在研究过程缓存刷新的可能性,然后需要重建所有计划,这导致缓慢,而不是现有计划的内存。有没有其他人经历过这个,你做了什么来解决,所以重新启动不会如此负面影响系统?重新启动或集群故障切换后SQL Server极端缓慢

回答

0

重建计划很可能不会是问题。我在我们的系统上看到类似的行为,问题是HDD阵列。我测试了如果我们能够移动到SSD,它会加快10倍以上的冷启动查询速度。

0

您可以做的一件事是在过程缓存刷新后监视您的大部分资源密集型查询。一旦您确定了哪些查询需要花费很长时间从磁盘中读取才能恢复到缓冲池中,您可以安排一项作业在重新启动后立即启动这些查询,以便第一个用户执行该查询时,它已经处于缓冲池并将从内存而不是磁盘读取。下面是一个查询,用于在您重新启动后查找I/O密集型查询:

SELECT TOP 25 cp.usecounts AS [execution_count] 
     ,qs.total_worker_time AS CPU 
     ,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 
     ,SUBSTRING(text, 
        CASE WHEN statement_start_offset = 0 
          OR statement_start_offset IS NULL 
          THEN 1 
          ELSE statement_start_offset/2 + 1 END, 
        CASE WHEN statement_end_offset = 0 
          OR statement_end_offset = -1 
          OR statement_end_offset IS NULL 
          THEN LEN(text) 
          ELSE statement_end_offset/2 END - 
        CASE WHEN statement_start_offset = 0 
          OR statement_start_offset IS NULL 
          THEN 1 
          ELSE statement_start_offset/2 END + 1 
       ) AS [Statement]   
FROM sys.dm_exec_query_stats qs 
    join sys.dm_exec_cached_plans cp on qs.plan_handle = cp.plan_handle 
    CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) st 
ORDER BY qs.total_physical_reads DESC;