2016-04-08 3 views
1

2008年版のSQL Server 2008 R2 SP1クラスタがあります。リブートが起きたり、フェイルオーバが起きると、何日かの処理が非常に遅くなります。しかし、我々はそれらを実行しておくと、彼らははるかに良い実行します。私は、プロシージャ・キャッシュがフラッシュされた後に、これを再構築する必要があるすべてのプランが既存のプランのためのメモリに移行するのではなく、遅さを引き起こしている可能性を研究しています。他の誰かがこれを経験していますが、再起動してもシステムに悪影響を及ぼすことはありません。SQL Serverクラスタの再起動またはフェールオーバー後の極端な遅さ

答えて

0

再構築計画はおそらく問題ではないでしょう。私は私たちのシステムでsimmilar動作を参照してください、問題は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; 
関連する問題