誤って Blue Prism が利用する SQL Server のメモリを小さくしすぎた場合の対処方法
こんにちは、「レッドブーツ88」です。
最近、King Crimson が来日してコンサートが開催されたようですが、King Crimson と言ったら Greg Lake さんのボーカルを異常に歪ませた名曲『21世紀のスキッツォイド・マン』が有名ですね。(オッサン世代なので昔の『21世紀の精神異常者』の方がしっくりきますが…)
21ST CENTURY SCHIZOID MAN
でも、個人的には Greg Lake さんと言えば EL&P 時代の『Lucky Man』を思い出します。
さて今回は、最近、少ないメモリを搭載した PC 上で Blue Prism を動作させようとして SQL Server へアサインするメモリを極力少なくした際に SQL Server が正常に稼働しなくなると言う墓穴を掘ってしまったため、その時に SQL Server を復旧した手順を整理したいと思います。
先ずは SQL Server のメモリを調整しようと思ったことから始まります
以下のページを参考に参考に Microsoft SQL Server Management Studio から最小サーバーメモリへ何も考えずに 100MB を指定したのが間違いでした…。
・SQL Server を再起動しないで使用中のメモリを解放する方法
上記の変更を実施後、SQL Server 全体の挙動が怪しくなり、CPU 負荷が高い状態 が続き、停止/終了ができなくなりました。タスクマネージャーから タスクの終了 を実施しても挙動は改善されませんでした。
さらに最悪なことにメモリサイズを元に戻すために Microsoft SQL Server Management Studio から接続しようとすると メモリが不足している旨のダイアログ が表示されて接続できなくなりました…。
復旧のための試行錯誤
インストーラを再実行してリカバリーを試みたり、PCを再起動したりといろいろ試行錯誤しましたが SQL Server が復旧することはありませんでした。また、最近は Blue Prism 環境のバックアップを取得していなかったため、SQL Server の再インストールも避けたいところでした。
そんな状況で明日は朝から Blue Prism を利用する予定が入っているため、何かしら復旧方法がないか本格的に調査することになりました…。
シングルユーザーモードによる復旧
いろいろと検索していると Microsoft さんのサイトに以下のような情報が見つかりました。
max server memory を最小値に設定すると、SQL Server が起動できなくなることもあります。このオプションの変更後に SQL Server を起動できなくなった場合は、-f 起動オプションを使用して起動し、max server memory を元の値に戻します。
また、以下のページを参考に -f と -m のオプションの意味を確認すると、まさに自分のような人のために提供されている機能のようなので、思わず『これだ!』と心の中で叫んでしました。
・データベース エンジン サービスのスタートアップ オプション
-f
- SQL Server のインスタンスを最小構成で起動します。 設定値によりサーバーが起動できないとき (たとえば使用できるメモリが不足している場合) などに便利です。SQL Server を最小構成モードで起動すると、 SQL Server がシングル ユーザー モードになります。詳細については、後の -m の説明を参照してください。
-m
- SQL Server のインスタンスをシングル ユーザー モードで起動します。SQL Server のインスタンスをシングル ユーザー モードで起動する場合、接続できるユーザーは 1 ユーザーのみで、CHECKPOINT プロセスは起動されません。 CHECKPOINT は、完了したトランザクションがディスク キャッシュからデータベース デバイスに定期的に書き込まれることを保証する機能です。一般的に、システム データベースを修復する必要がある問題が発生したときに、このオプションを使用します。
それにしてもシングルユーザーモードとは何とも Unix っぽい感じですね。
Microsoft SQL Server のベースとなった Sybase DB は Unix 版も提供されていたのでこのようなモードがあるのかなと思いました。(現在は中の実装は全く別物になっているようですが)
実際に復旧した手順
幸運なことに以下のブログにコマンドラインからの実行例があったため、あとは実際のディレクトリへ移動し、同様のコマンドを実行することで SQL Server をシングルユーザーモードで起動することができました。
・Increase SQL server Maximum Memory from Command Prompt
sqlservr -f -m -s nameofyourinstance
実際に自分の環境で実行したコマンドは以下のようになります。
cd C:\Program Files\Microsoft SQL Server\MSSQL14.SQLEXPRESS\MSSQL\Binn
sqlservr -f -m -s SQLEXPRESS
- 補足 : SQLEXPRESS は環境に応じて変更ください。
見にくいですが、Recovery is complete. のメッセージが出力されれば復旧できたと思われます。
ここまでくると Microsoft SQL Server Management Studio から接続することができ、無事にメモリサイズを変更することができました。(以下は 200MB へ変更しています)
この後は SQL Server をシングルユーザーモードで起動したコマンドプロンプトの × ボタンをクリックして終了すれば、SQL Server の復旧作業が完了します。
助かった。
まとめ
- 正常に動作していた設定を変更する際は、様子を見ながら値を変更すること
- SQL Server が起動しなくなったらシングルユーザーモードで復旧可能
- Blue Prism のバックアップは定期的に実施する
- King Crimson の Robert Fripp さんの年齢にビックリ