Windows を再起動/シャットダウン時の待ち時間

夏ですね、雨ですね、雷ですね、停電ですね。
WindowsSQL ServerOracle といったサービスをインストールされている方はそれなりにいると思いますが、これらが稼働したまま再起動(またはシャットダウン)を実行して OS を終了した場合、これらのサービスが正しく終了しているかどうかについて、自身を持って答えられる方はどれぐらいおられるでしょうか?
別に SQL ServerOracle に限った話ではないのですが、OS 終了時にすべてのサービスは停止されます。SQL ServerOracle もサービスを終了しようとすると、チェックポイントで停止するようになっています。SQL Server の挙動については詳しく調べていないのですが、Oracle であればデフォルトで 9i までは shutdown normal が実行され、10g 以降は shutdown immediate が実行されるはずです。*1
私もそうですが…、ここまでは想像/理解しておられる人も多いのでは?と思います。このような仕組みがあるので、動いているサービスをあまり気にしないで OS の再起動やシャットダウンを実行することができます。しかし、サービスの管理画面から特定の Windows サービスを開始/停止したことがある人ならば、サービスの開始や停止が短時間で終わるとは限らないことをご存じのはずです。Oracle 9i の shutdown normal なんて、全トランザクションがコミット/ロールバックされるのを待機しますので、利用状況によってはかなりの時間がかかります。
しかしながら、OS は再起動やシャットダウンの要求に対してサービスの停止を無限に待つわけにもいきません。このため、一定時間が経過すると OS はサービスを構成するプロセスを強制的に終了して再起動やシャットダウンのシーケンスを進めるようになっています。
デフォルトでは、以下の時間だけ待機するようです。

この時間が経過してもサービスが終了しない場合、そのサービスにはブレーク信号が送信され、しばらく後にプロセスが破棄されます。この待機時間はレジストリの WaitToKillServiceTimeout に設定されています。
Windows Server 2008 R2Windows 7 については、デフォルトで 12 秒が設定されているのですが、2012/08/08 の最新アップデート時点*2では、不具合のため5秒でサービスを殺すようになっています。この問題の KB と HotFix は、http://support.microsoft.com/kb/2549760/en にあります。

SQL ServerOracle は当然ながら、いくつかのサービスは5秒という時間での正常停止は厳しいかと思います。個人用途の PC でも、メモリを利用したディスク I/O の高速化ツールなどが正常終了できずにファイルを壊しちゃったりとか、いろいろと面倒が発生しやすいポイントなので注意が必要ですね。

*1:10g 以降はレジストリで SID 毎に設定できます

*2:SP1 + Windows Update をすべて適用した状態