本連載は、「Microsoft SQL Server」で発生するトラブルを「どんな方法で」「どのように」解決していくか、正しい対処のためのノウハウを紹介します。今回は「データベースの起動に時間がかかる場合の対処方法」を解説します。
本連載では、「Microsoft SQL Server(以下、SQL Server)」で発生するトラブルについて、「なぜ起こったか」の理由とともに具体的な対処方法を紹介していきます。
「Windows Server 2012」上に「SQL Server 2016 RTM」をインストールした環境を想定して解説します。
SQL Serverのエラーログを見ると、「エラー18456」が記録されていました。
エラー18456は、ユーザーがログインに失敗したときに発生するエラーです。その下に、Applicationデータベースのリカバリーが「12%まで完了」した旨のメッセージを確認できることから、「データベースの復旧処理が完了していない」ために発生しているようです(図7-2)。
つまりこのトラブルは、データベースの復旧に時間がかかっており、その時点では復旧処理が完了していないために、「ユーザーからのアプリケーション接続が許可されなかった」ということになります。なお、データベースシステムの仕組み上、前回仕掛かり中のトランザクションが残っていたならば、それらが正常にロールバックされるまで新規ユーザーセッションの受け入れは開始されません。
起動時のデータベースの復旧処理は、データベースシステムとしてデータの整合性を保つために必要なので、省略はできません。最も簡単な対処方法は、SQL Serverの復旧処理が終わるまで待つことです。
このトラブルは、バッチ処理など大量のデータ処理を1つのトランザクションで実行している最中に、何らかの原因でデータベースが止まってしまった場合によく発生します。これを防ぐには、「バッチ処理の単位を適宜分割して、長時間のトランザクションにならないようにする」ことです。
この他に、SQL Server 2012以降に実装されている「間接チェックポイント(Indirect Checkpoint)」(*1)の機能を使うことで復旧処理時間を短くできることもあります。ただし、間接チェックポイントを構成すると、通常実行されているトランザクションの性能が落ちる場合があるので少し注意が必要です。「間接チェックポイントを構成してもパフォーマンステストに問題のないことを確認できた場合」、あるいは「再起動時のデータベース復旧処理時間をトランザクション性能より優先したい場合」に利用を検討してください(図7-3)。
ユニアデックス株式会社所属。Microsoft MVP Data Platform(2011〜 )。OracleやSQL Serverなど商用データベースの重大障害や大型案件の設計構築、プリセールス、社内外の教育、新技術評価を行っていた。2016年4月よりIoTビジネス開発の担当となり、新しい仕事に奮闘中。ストレッチをして柔らかい身体を手に入れるのが当面の目標。
ユニアデックス株式会社所属。入社以来 SQL Serverの評価/設計/構築/教育などに携わりながらも、主にサポート業務に従事。SQL Serverのトラブル対応で社長賞の表彰を受けた経験も持つ。休日は学生時代の仲間と市民駅伝に参加し、銭湯で汗を流してから飲み会へと流れる。
Copyright © ITmedia, Inc. All Rights Reserved.