HDDのフラグメントで接続がタイムアウトする
極端な例だとは思うけど、DBエンジンがローカルの場合は接続できるけど、リモートからだと接続できないという現象が出た。リモートでもODBC経由だと接続できたという不可解な現象も出た。
問題のマシンは、CPU使用率は特に異常ないしメモリ不足でもない。ただし、なぜか常にHDDにアクセスしっぱなし。なぜだ?
原因はフラグメントが10000万個を超える*.mdfをアタッチしていたためだった模様。デフラグしたら正常になった。ただし、問題の*.mdfは27GB強で普通にデフラグしても一向に終わる気配が無かったので、
- 問題のデータベースをデタッチ
- 問題の*.mdfを別のサーバ or パーティションに退避
- SQLServerのサービスを停止
- デフラグ
- SQLServerのサービスを開始
- 問題の*.mdfを退避先から復旧
- 問題のデータベースをアタッチ
で普通の速さに戻った。
非力なマシンで運用するときはたまに上記のオペレーションをやった方が良い気がします。ちなみに誤ったオペレーションをやっちゃうと、復旧方法が判らずに悲惨なことになります。*1
まあ問題のマシンはテスト環境のやつだったから、動きさえすればいいんだけど。
*1:このときはたまたま判ったからいーけどさー。