HDDのフラグメントで接続がタイムアウトする

極端な例だとは思うけど、DBエンジンがローカルの場合は接続できるけど、リモートからだと接続できないという現象が出た。リモートでもODBC経由だと接続できたという不可解な現象も出た。

問題のマシンは、CPU使用率は特に異常ないしメモリ不足でもない。ただし、なぜか常にHDDにアクセスしっぱなし。なぜだ?

原因はフラグメントが10000万個を超える*.mdfをアタッチしていたためだった模様。デフラグしたら正常になった。ただし、問題の*.mdfは27GB強で普通にデフラグしても一向に終わる気配が無かったので、

  1. 問題のデータベースをデタッチ
  2. 問題の*.mdfを別のサーバ or パーティションに退避
  3. SQLServerのサービスを停止
  4. デフラグ
  5. SQLServerのサービスを開始
  6. 問題の*.mdfを退避先から復旧
  7. 問題のデータベースをアタッチ

で普通の速さに戻った。

非力なマシンで運用するときはたまに上記のオペレーションをやった方が良い気がします。ちなみに誤ったオペレーションをやっちゃうと、復旧方法が判らずに悲惨なことになります。*1

まあ問題のマシンはテスト環境のやつだったから、動きさえすればいいんだけど。

*1:このときはたまたま判ったからいーけどさー。