2016-08-25 8 views
1

最終的に完全に完了するまで、データベースのメンテナンス作業の所要時間が長くかかると報告されました。タスクは、特定のデータベースに対してCHECKDBを実行します。wait_type RESOURCE_SEMAPHOREのためにCHECKDBが完了しません。

select * from sys.dm_exec_requests where (status = 'suspended')を実行すると、中断されたDBCC TABLE CHECKコマンドが表示されます。そのsession_idをとり、それをselect * from sys.dm_exec_query_memory_grantsの結果と比較すると、メモリの許可には1515704kb(1.515GB)のrequested_memory_kbがあることがわかります。 required_memory_kbはわずか512kbです。私はresource_sempahore_id 0 1174200キロバイトのtarget_memory_kb、6063000キロバイトのmax_target_memory_kb、1174200キロバイトのtotal_memory_kb、および1174200キロバイトのavailable_memory_kbを持っていることがわかりselect * from sys.dm_exec_query_resource_semaphoresを実行した場合resource_semaphore_idは0

です。

待ちタスクが1.5GBのメモリ許可を要求しているのでCHECKDBが失敗しているように見えますが、リソースセマフォは、使用可能なメモリプール全体が1.17GBだけなので、そのメモリを許可できません。 6033000kb(6GB)にmax_target_memory_kbが表示されていますが、メモリ不足のためにタスクが待っていても、現在のターゲットを超えて成長することはありません。

私は決定しようとしている:

  1. required_memory_kbが唯一の512キロバイトであるとき、私CHECKDBタスクは、メモリ許可の1.5ギガバイトを要求するために引き起こしている何。要求された金額が必要な金額の2950倍になるのはなぜですか?
  2. タスクは、SQL Serverがリソースセマフォの合計で使用可能なメモリより多くのメモリを要求するのはなぜですか? (1.5GB要求と1.15GB要求)
  3. SQLサーバーにRAMを追加するだけで解決できることはありますか?

答えて

1

「必須メモリ」は少し誤解を招く。 This articleは、要求されたメモリと要求されたメモリを説明する良い仕事をしています。要するに、必要なメモリとは、メモリに必要なハッシュジョインとソートを実行するためにどれだけのメモリが必要かということだけです。要求されたメモリの残りは実際の行のためのものです。

DBCC CHECKDB WITH PHYSICAL_ONLYは、ページなどの一貫性をチェックしますが、行レベルのデータは検証しません。それ以外の場合は、間違いなくメモリのボトルネックがあります。

関連する問題