検索
連載

データベースの起動に時間がかかる(起動トラブル)SQL Serverトラブルシューティング(12)

本連載は、「Microsoft SQL Server」で発生するトラブルを「どんな方法で」「どのように」解決していくか、正しい対処のためのノウハウを紹介します。今回は「データベースの起動に時間がかかる場合の対処方法」を解説します。

PC用表示 関連情報
Share
Tweet
LINE
Hatena

連載バックナンバー

 本連載では、「Microsoft SQL Server(以下、SQL Server)」で発生するトラブルについて、「なぜ起こったか」の理由とともに具体的な対処方法を紹介していきます。

トラブル 07(カテゴリー:起動):データベースの起動に時間がかかる

 「Windows Server 2012」上に「SQL Server 2016 RTM」をインストールした環境を想定して解説します。

トラブルの実例:データベースサーバでハードウェア障害が発生したので、メンテナンスを行った後で再起動した。データベースのプロセスが立ち上がったことは確認できたが、アプリケーション接続でエラーが発生してしまう(図7-1)。

photo 図7-1 接続エラーメッセージの状況。ここではSQL ServerのCLI管理ツールである「sqlcmd」を利用した

トラブルの原因を探る

 SQL Serverのエラーログを見ると、「エラー18456」が記録されていました。

 エラー18456は、ユーザーがログインに失敗したときに発生するエラーです。その下に、Applicationデータベースのリカバリーが「12%まで完了」した旨のメッセージを確認できることから、「データベースの復旧処理が完了していない」ために発生しているようです(図7-2)。

photo 図7-2 現象発生時のエラーログには、「エラー18456」とデータベースが復旧中である旨の内容が記述されていた

 つまりこのトラブルは、データベースの復旧に時間がかかっており、その時点では復旧処理が完了していないために、「ユーザーからのアプリケーション接続が許可されなかった」ということになります。なお、データベースシステムの仕組み上、前回仕掛かり中のトランザクションが残っていたならば、それらが正常にロールバックされるまで新規ユーザーセッションの受け入れは開始されません。

トランザクションのロールバックを実施する方法

  1. トランザクションログをスキャンして、対象のトランザクションを特定する
  2. 前回のチェックポイントからデータベース停止までの処理を再実行(ロールフォワード)する
  3. 停止時点でCommitしていないトランザクションをロールバックする

解決方法

 起動時のデータベースの復旧処理は、データベースシステムとしてデータの整合性を保つために必要なので、省略はできません。最も簡単な対処方法は、SQL Serverの復旧処理が終わるまで待つことです。

 このトラブルは、バッチ処理など大量のデータ処理を1つのトランザクションで実行している最中に、何らかの原因でデータベースが止まってしまった場合によく発生します。これを防ぐには、「バッチ処理の単位を適宜分割して、長時間のトランザクションにならないようにする」ことです。

 この他に、SQL Server 2012以降に実装されている「間接チェックポイント(Indirect Checkpoint)」(*1)の機能を使うことで復旧処理時間を短くできることもあります。ただし、間接チェックポイントを構成すると、通常実行されているトランザクションの性能が落ちる場合があるので少し注意が必要です。「間接チェックポイントを構成してもパフォーマンステストに問題のないことを確認できた場合」、あるいは「再起動時のデータベース復旧処理時間をトランザクション性能より優先したい場合」に利用を検討してください(図7-3)。


photo 図7-3 間接チェックポイントの設定画面。ターゲットの復旧時間を「0」以外に設定すると間接チェックポイントが有効となり、復旧時間の改善に向けてチェックポイントを内部調整するようになる

「データベースの起動に時間がかかる」場合の解決手順

  1. エラーログを確認し、接続するデータベースの「復旧処理の状態を確認」する
  2. データベースの復旧処理が完了するのを待つ
  3. 事後対策として、長いトランザクションの特定/バッチ処理の単位を適宜分割する
  4. 「間接チェックポイント」の導入を検討する


本トラブルシューティングの対応バージョン:SQL Server 全バージョン

筆者紹介

内ヶ島 暢之(うちがしま のぶゆき)

ユニアデックス株式会社所属。Microsoft MVP Data Platform(2011〜 )。OracleやSQL Serverなど商用データベースの重大障害や大型案件の設計構築、プリセールス、社内外の教育、新技術評価を行っていた。2016年4月よりIoTビジネス開発の担当となり、新しい仕事に奮闘中。ストレッチをして柔らかい身体を手に入れるのが当面の目標。

椎名 武史(しいな たけし)

ユニアデックス株式会社所属。入社以来 SQL Serverの評価/設計/構築/教育などに携わりながらも、主にサポート業務に従事。SQL Serverのトラブル対応で社長賞の表彰を受けた経験も持つ。休日は学生時代の仲間と市民駅伝に参加し、銭湯で汗を流してから飲み会へと流れる。


Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る