SQLサーバーにて、ディスクキューの長さが大きくなり、処理待ちが発生しています。
構成として、SSD2台(RAID1)+HDD2台(RAID1)となります。
tempdbをHDD側、データをSSD側に設定しています。
問題が発生しているのはSSD側となります。
利用中のサーバーでは4スロットしかなく、すべてのHDDスロットは使っています。
メモリは200GB程度ですべてのスロットを使用しています。
発生条件は、秒間1000件ほどの更新+INSERTを行う際に、
読み込み10MB/s程度、書き込み10MB/s程度なのですが、ディスクキューの長さが1000から10000ほどになります。
(CPU使用率は10%程度です)
SQLSERVER初回起動時などは、読み込み300MB/sなどで読み込みは出来ています。
SQLSERVERの仕様なのかもしれませんが、設定などで解決方法などありませんでしょうか?
SSDのヘルスチェックは行っていますか?
SSDは購入後、半年程度です。DISKINFOでは問題なしです。
並列実行では無く、シリアルに実行すると改善したりしませんか。
シリアルであれば、負荷はほぼありません。
ただ、仕様上どうしても同時処理を行いたいのはあります。
想像ですが、ランダムアクセス状態で、遅くなっているような気がします。
シーケンシャルアクセスでは数百MB/sで動いているので。
データベースのデフラグのようなものであったり、空きメモリーをライトキャッシュにできたり・・
すれば解決しそうな気もしますが。
処理というよりSSDの問題ですよね。
メーカーに依りますけど、SSDの機能とかドライバーとかも確認された方が良いと思いますけど。
https://kb-jp.sandisk.com/app/answers/detail/a_id/8959/~/ssd%E3%80%80%E3%83%91%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%B3%E3%82%B9%E3%81%AB%E9%96%A2%E3%81%99%E3%82%8B%E6%A1%88%E5%86%85
RAID構成でのTRIMは利用できませんし、お手上げ状態です。
4KアライメントはOKです。
RAID構成前も構成後もSSDのベンチマークは十分に出ています。
では、並列処理の件数を下げて、並列数を増やしてみるとか。
キューイング数は増えるでしょうけど、一つ一つの待ち時間やサイズは短縮されるでしょうから。
急の業務で、時間が取れませんでした。
並列処理数などの調整を試してみます。
大量にINSERTを行うとIDENTITYが約100近く空いた連番で数万件登録されており、
時間が経つと、間が埋められていくという症状です。
調整を試してみます。