2016-04-08 81 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;