Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

マイクロソフトSQL Serverのエラーログについてまとめてます。

「SQLのログ」という表現の場合、エラーログを指す場合と、トランザクションのコミットやロールバックに必要になるトランザクションログを表す場合とがあります。

この記事では、SQLのエラーログに関する情報をまとめています。

SQLのエラーログの取得方法

SQL Serverのエラーログには、バックアップ操作および復元操作、バッチ コマンド、その他のスクリプトやプロセスなどが正常終了したかどうか、その他発生したカーネルメッセージなどのシステム系のエラー情報などが含まれます。

ログファイルを参照するには、管理ツールのSQL Server Management Studio(SSMS)を使用すると便利です。「ログファイルの表示」で、監査コレクション、データ収集、データベース メール、ジョブ履歴、SQL Server、SQL Server エージェント、Windows イベントのログを表示できます。

【関連記事】
SQL Server Management Studioの使い方を徹底解説! 

ログファイル自体を参照したい場合は、以下のパスにエラーログファイルがあります。

Program Files\Microsoft SQL Server\MSSQL.n\MSSQL\LOG\ERRORLOG

古いエラーログは、ERRORLOG.nというファイル名にリネームされ、一番古いものから上書きされていきます。なお、デフォルトではSQL Serverのインスタンスを起動するたびにエラーログが生成され、ログがバックアップ(ERRORLOG.nにリネーム)されていきます。

バックアップはデフォルトで6個までしか保持されないため、頻繁にインスタンスの再起動をする場合はsp_cycle_errorプロシジャなどを使って、エラーログを使いまわすことも検討しましょう。

参考)SQL Server エラー ログの表示 – SQL Server | Microsoft Docs

SQL Serverのトレースログを取得する方法

エラーは出ていないけど、遅いクエリの原因をつきとめたいときなどに役立つのがトレースログ。稼動環境を監視して、どのストアド プロシージャの実行が遅く、パフォーマンスに影響を与えているかなどを特定するのに使います。

参考)SQL Serverで「トレースログ」を採取する:SQL Serverトラブルシューティング(38) – @IT

トレースログは、管理ツールSQL Server Management Studioから、SQL Serverプロファイラーを起動して使用します。

トレースログではログインの接続、失敗、解除状況や、select、insert、update、deleteステートメント、ストアドプロシジャやSQLバッチ、データベースオブジェクトで取得・開放されたロック、オープンされたカーソル、セキュリティ権限の確認などのイベントが記録されています。

公式サイトによると、SQL トレースと SQL Server プロファイラーは、非推奨となっています。Microsoft SQL Server の将来のバージョンで削除されるので、 新規開発では使わないようにしたほうが良さそうですね。また、すでにこの機能を使用しているアプリケーションは修正することを検討しましょう。

SQL Server拡張イベントでトレースログを取得

SQL Serverプロファイラーの代替機能として、SQL Server拡張イベントが推奨されています。

参考)クイック スタート:SQL Server の拡張イベント – SQL Server | Microsoft Docs

SQL Server拡張イベントは、汎用的なイベント処理システム。ログツールやトレースツールとして利用できます。また、SQL Serverプロファイラと比べても軽量でリソースをあまり食わないんですよね。サーバ上で動作するツールとしてはありがたいところ。

使い方は、セッションを開始して、SQLを別窓などで実行すると、トレースデータをキャプチャしてくれるんですね。

各種イベントごとに、CPU時間、対象データ数、遅延などをリアルタイムに表示してくれます。

イベントセッションの開始は、SQL Server Management StudioのGUI操作だけではなくT-SQLでバッチ処理的に実行することも可能です。

以下は、重くなりがちなHAVINGを使ったSELECT文のイベントをキャプチャするためのイベントセッションスクリプトです。

CREATE EVENT SESSION [YourSession]
    ON SERVER
    ADD EVENT sqlserver.sql_statement_completed
    (
        ACTION(sqlserver.sql_text)
        WHERE
        ( [sqlserver].[like_i_sql_unicode_string]([sqlserver].[sql_text], N'%SELECT%HAVING%')
        )
    )
    ADD TARGET package0.event_file
    (SET
        filename = N'C:\Junk\YourSession_Target.xel',
        max_file_size = (2),
        max_rollover_files = (2)
    )
    WITH (
        MAX_MEMORY = 2048 KB,
        EVENT_RETENTION_MODE = ALLOW_MULTIPLE_EVENT_LOSS,
        MAX_DISPATCH_LATENCY = 3 SECONDS,
        MAX_EVENT_SIZE = 0 KB,
        MEMORY_PARTITION_MODE = NONE,
        TRACK_CAUSALITY = OFF,
        STARTUP_STATE = OFF
    );
GO

このSQLを実行後に、HAVNGを使ったSQLを実行することでイベントのキャプチャが開始できます。「SELECT」「HAVING」を含まないSQLは対象外になります。

なお、繰り返し使用する場合は、同名のイベントセッションが存在する場合に備えて、以下のスクリプトを事前に実行する必要があります。

IF EXISTS (SELECT *
      FROM sys.server_event_sessions
      WHERE name = 'YourSession')
BEGIN
    DROP EVENT SESSION YourSession
          ON SERVER;
END
go

また、CREATE EVENT SESSIONは定義をおこなうだけで、実行はしません。以下のように、ALTER EVENTでSTATE=STARTで起動、STATE=STOPで停止する必要があります。

ALTER EVENT SESSION [YourSession]
      ON SERVER
    --ON DATABASE
    STATE = START;   -- STOP;

まとめ

ポテパンダの一言メモ
  • SQL Serverのエラーログは、SQL Server Management Studioから参照可能
  • 遅いクエリの特定などはSQL Serverのトレースログを調査する
  • トレースログ調査には、SQL Server Management Studioの拡張イベントからイベントをキャプチャする

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。