32 GB の RAM と 8 つの CPU コアを備えた専用サーバーで、Windows Server 2012 の下の SQL Server 2012 でいくつかのストアド プロシージャを実行しています。SQL Server には (32 GB のうちの) 20 GB が割り当てられているため、CPU 使用率は常に 10% 未満であり、RAM 使用率は 80% です。
ストアド プロシージャの中には、ある日は 4 時間かかるものもあれば、ほぼ同じデータで 7 時間または 8 時間かかる日もあるものがあります。
私は最も制限の少ない分離レベルを使用しているので、これはロックの問題ではないと思います。データベースのサイズは約 100 GB で、最大のテーブルには約 500 万件のレコードがあります。
プロセスには一括挿入、更新、および削除があります (場合によっては、切り捨てを使用してログの生成を回避し、時間を節約できます)。1 つのテーブルでいくつかの全文検索クエリを作成しています。
サーバーを完全に制御できるので、構成パラメーターを変更できます。
いくつかの質問を聞きたいんです:
- 並列処理を使用してクエリのパフォーマンスを向上させることは可能ですか?
- CPU使用率が低いのはなぜですか?
- SQL Server を構成するためのベスト プラクティスは何ですか?
- サーバーの監査に最適な無料ツールは何ですか? Microsoft の SQL Server 2012 BPA と呼ばれるものを試しましたが、レポートは常に空で、警告はありません。
編集:ログを確認したところ、次のことがわかりました。
03/18/2015 11:09:25、spid26s、不明、SQL Server で、ファイル [C:\Program Files\Microsoft SQL Server\MSSQL11] の完了に 15 秒以上かかる I/O 要求が 82 回発生しました。 .HLSQLSERVER\MSSQL\DATA\templog.ldf] データベース [tempdb] (2)。OS ファイル ハンドルは 0x0000000000000BF8 です。最新の長い I/O のオフセット: 0x00000001fe4000