Articles

SQLShack

はじめに

この記事では、SQL Server のパフォーマンスを監視するために使用できる多くのツールについて説明します。 SQL Serverにはたくさんの優れたレポートがあり、DBAはSQL Serverに現在のパフォーマンスのボトルネックがあるかどうかをすぐに見つけることができます。 これらのレポートの多くはDMVの上に配置されていますが、データを見たり操作したりするための視覚的にインタラクティブな方法を提供してくれます。

ダッシュボード レポート

SQL Server Management Studio (SSMS) に飛び込んで、まず最初に、すべてのレベルの、すぐに使えるダッシュボード レポートを見てみましょう。 これらのレポートは、オブジェクト エクスプローラーで SQL Server インスタンスを右クリックし、コンテキスト メニューから [レポート] > [標準レポート] を選択すると表示されます。

List of built-in Performance Reports in SSMS for tracking SQL Server performance

List of built-in Performance Reports in SSMS for tracking SQL Server performance

ダッシュボードのレポートはどれも便利です。 しかし、機会があればいつでもすべてのレポートをチェックしてください。 例として、コンテキストメニューから「サーバーダッシュボード」を選択してみましょう。 このレポートでは、SQL Server インスタンスの構成、バージョン、サービス、アクティビティなど、現在の状態に関する多くの情報を得ることができます。

SQL Server Dashboard Report showing data about SQL Server instance, its configuration and activity on it

SQL Server Dashboard Report showing data about SQL Server instance, its configuration and activity on it

ここには、デフォルト以外の構成オプションもあります。 これらは、バニラインストールから変更されているものです。

List of non-default configuration options on a SQL Server instance

List of non-default configuration options on a SQL Server instance

また。 また、データベース レベルでは、データベースを右クリックしてレポートに移動すると、あらゆる種類のディスク使用量レポート、バックアップおよび復元イベント、トップ トランザクション、インデックス統計などがあります。

List of built-in Performance Reports on a database level in SSMS for tracking SQL Server performance

List of built-in Performance Reports on a database level in SSMS for tracking SQL Server performance

このように、これらのダッシュボードのレポートはすべて素晴らしく、利用したり作業したりするのが簡単です。

アクティビティ モニター

次は、パフォーマンスから I/O コスト、高価なクエリなど、あらゆるものを監視するために使用できる SQL Server 内のリアルタイム モニターであるアクティビティ モニターを見てみましょう。 アクティビティモニタを起動するには、オブジェクトエクスプローラでSQL Serverインスタンスを右クリックし、コンテキストメニューから「アクティビティモニタ」を選択します。 また、標準ツールバーのアクティビティ モニター アイコンをクリックして起動することもできます。

オブジェクト エクスプローラーの SSMS 右クリック コンテキスト メニューにある [アクティビティ モニター] オプションで SQL Server のパフォーマンスを監視する's right-click context menu in Object Explorer for monitoring SQL Server performance

オブジェクト エクスプローラーの SSMS 右クリック コンテキスト メニューにある [アクティビティ モニター] オプションで SQL Server のパフォーマンスを監視する's right-click context menu in Object Explorer for monitoring SQL Server performancepオブジェクト エクスプローラーの右クリック コンテキスト メニューにある [アクティビティ モニター] オプションで SQL Server のパフォーマンスを監視する

アクティビティ モニターは、SQL Server のパフォーマンスに突然何か問題が発生した場合に使用するツールの 1 つとなっています。 アクティビティ モニターを起動すると、最初に表示されるのは [概要] ペインです。 さらにこのツールには、次のような拡張・折りたたみ可能なペインが用意されています。

SSMS のアクティビティ モニター ペイン

プロセス – 現在実行中のプロセスを見て、それらを管理することができます。 右クリックでコンテキスト メニューが表示され、そこからプロセスを終了させたり、SQL Server Profiler (詳細は後述します) でトレースしたり、実行プランとして表示したり、最後には、最後の T-SQL コマンド バッチを示すダイアログをポップアップするセッションの詳細が表示されます。

最後の T-SQL コマンド バッチを表示するセッションの詳細ボックス

最後の T-SQL コマンド バッチを表示するセッションの詳細ボックス

Resources Waits – リソースの待ち時間に関する情報を表示します。

アクティビティ モニターの [Resource Waits] ペイン

Data File I/O – ファイル レベルで発生している現在のデータ ファイル I/O 情報を表示します。

アクティビティ モニターの [データ ファイル I/O] ペイン

Recent/Active Expensive Queries – 多くのリソース (メモリ、ディスク アクティビティ、ネットワーク) を使用している最近/アクティブな高価なクエリを表示します。

アクティビティ モニターの [最近の高価なクエリ] ペイン

これは、問題を引き起こしているクエリやリソースを大量に消費しているクエリなどを見つけるための素晴らしい出発点となります。 見つかったクエリは、実行プランとして表示されるので、ホットスポットを簡単に見つけることができます。

実行プランを表示したアクティビティ モニターの [アクティブな支出の多いクエリ] ペイン

実行プランを表示したアクティビティ モニターの [アクティブな支出の多いクエリ] ペイン

トップDBA DMVs

次に、トップDBA DMVsをチェックしてみましょう。 ここでは、DBA が知っておくべきトップ DMV について説明します。 これらのDMVは常にポケットに入れておくべきものです。 すべてのDMO(DMVとDMF)の一覧を表示するには、以下のバッチを検索してください。

1

div

2
3
4
5
6
7

-。- 全DMOのリスト(DMV & DMF)
SELECT name,
type,
type_desc
FROM sys.system_objects so
WHERE so.name LIKE ‘dm_%’
ORDER BY so.name;

これは、SQL ServerのすべてのDMV & DMFを返します。 type 列を見て、「V」はビューを、「IF」は関数を表していることに注意してください:

Script for returning list of all DMOs in SQL Server

Script for returning list of all DMOs in SQL Server

上記のクエリは、システム上の 243 個の DMO を返しました。

実行

sys.dm_exec_connections = Established connection
sys.dm_exec_sessions = Authenticated sessions
sys.dm_exec_requests = 現在のリクエスト

実行(クエリ関連)

sys.dm_exec_cached_plans = キャッシュされた実行プラン
sys.dm_exec_query_plan = 与えられたキャッシュされた plan_handle のプランを表示
sys.dm_exec_query_stats = クエリのパフォーマンス統計

sys.dm_exec_sql_text = sql_handle を与えられた SQL テキスト

Index

sys.dm_db_index_physical_stats = インデックスサイズとフラグメント
sys.dm_db_index_usage_stats = クエリオプティマイザによるインデックス使用量
sys.dm_db_missing_index_details = 見つからないインデックスの発見

OS

sys.dm_os_performance_counters = すべての SQL Server パフォーマンスカウンタと値のリスト
sys.dm_os_schedulers = CPUプレッシャーの検出
sys.dm_os_waiting_tasks = リソースを待っているタスク
sys.dm_os_wait_stats = すべての待ち時間のタイプと統計値

I/O

sys.dm_io_virtual_file_stats = データファイルとログファイルのI/O統計
sys.dm_io_pending_io_requests = 保留中のI/Oリクエスト

CLR

sys.dm_clr_loaded_assemblies = ロードされたアセンブリ
sys.dm_clr_tasks = CLR 関連のタスク

オンラインの書籍 (docs.microsoft.com) には、すべての DMO の概要ページが掲載されています。 結果のグリッドから任意の名前をコピーし、ブラウザに貼り付けて検索してみてください。

最後に、SQL Server Profiler を使ってトレースを作成したり再生したりする方法を見てみましょう。 これは、問題がアプリケーションやデータベース内部から発生しているかどうかに関わらず、トラブルシューティングを行う際に非常に役立ちます。 トレースを作成することで、ワークロードをキャプチャすることができます。

残念ながら、マイクロソフトはSQL Server Profilerの廃止を発表しましたが、この機能はSQL Server 2016でも利用可能で、将来のバージョンでは削除される予定です。

それでは、SQL Server Profilerがどのように動作するのかを見ていきましょう。 SQL Server Profilerを起動するには、Windowsのスタートアイコンを押すか、Windowsキーを押して「SQL Server Profiler 17」と入力します。

Windows スタートからの SQL Server Profiler アイコン

Windows スタートからの SQL Server Profiler アイコン

覚えておいてください。 プロセス ペインをクリックし、プロファイル化したいプロセスを右クリックして、右クリックのコンテキスト メニューから [SQL Server Profiler でプロセスをトレース] オプションを選択するだけです。

そして、これが起動したら、「新規トレース」という最初のボタンをクリックします。

Connect to Server box from SQL Server Profiler

Connect to Server box from SQL Server Profiler

プロファイルしてトレースを作成するインスタンスへの接続が確立されると、[トレースのプロパティ] ウィンドウが表示されます。 トレース名] ボックスでトレースに名前を付けます。 このトレースを再生したいので、組み込みのトレース テンプレートを選択します。なぜなら、再生にはいくつかの要件があり、特定のイベントやフィールドをキャプチャする必要があるからです。

Trace PropertiesウィンドウのGeneralタブ

Trace PropertiesウィンドウのGeneralタブ

とりあえず、Save to fileオプションにチェックを入れてファイルとして保存し、タブをEvents Selectionに変更します。 テンプレートを選択しているので、多くのイベントが事前に選択されているはずです。

Events Selection tab of the Trace Properties window

この例では、Column Filters ボタンをクリックして、データベース名にフィルタを設定してみましょう。 AdventureWorks2014データベースにヒットしたイベントだけをトラップしたいのです。

Edit Filter window

Edit Filter window

これらすべてが設定されたら、Edit FilterダイアログでOKをクリックして設定を保存し、ダイアログを閉じます。 初期ウィンドウに戻り、「実行」ボタンを押してトレースを開始します。 これで、このトレースが実行され、AdventureWorks2014のデータベースで起こっていることをすべて監視していることになります。

Running trace within SQL Server Profiler windows capturing information on SQL Server performance

Running trace within SQL Server Profiler windows capturing information on SQL Server performance

SSMSを切り替えて、いくつかのクエリを実行するか、しばらくバックグラウンドで実行させてみてください。

SQL Server Profiler ウィンドウ内の実行トレースで、SQL Server 上でキャプチャされたさまざまなイベントを表示する

しばらく放置した後、下に示すように赤い停止ボタンをクリックしてトレースを停止します。

Button for stopping a trace within SQL Server Profiler window

Button for stopping a trace within SQL Server Profiler window

さて、以前に保存したファイル内にすべてがキャプチャされましたので、例えば、この再生を別のインスタンスで実行することができます。 なぜでしょう? それは、本番環境で問題が発生したときに非常に役に立つからです。 何か大きな問題があっても、本番サーバーで直接修正できる可能性はほとんどありません。 この使用例のシナリオでは、最良のアプローチは、本番環境をテストにコピーし、本番環境でキャプチャされたトレースを取得し、トラブルシューティングと問題解決の観点から、そのテスト データベース上で何でもできるようにすることです。

そのためには、SQL Server Profiler でトレースを開きます。

Option for opening a trace in SQL Server Profiler

Option for opening a trace in SQL Server Profiler

次に、Replay に移動して Start を選択します。

Option for starting a replay of a trace in SQL Server Profiler

Option for starting a replay of a trace in SQL Server Profiler

これで、再び、インスタンスへの SQL Server 接続ダイアログが表示されます。

Connect to Server box

Connect to Server box

そして、前述の目的のために必要であれば、再生サーバーを変更することができる「再生設定」ウィンドウに移動します。 ここからは非常に簡単です。

Basic Reply Options tab in the Reply Configuration window

Basic Reply Options tab in the Reply Configuration window

最初の行には、常にすべてのリプレイ設定イベントが含まれます。 その後、いつでもイベントがあれば、そのイベントを発射します。

Replay Setting Event

右にスクロールすると、どの結果セットにもプロファイラーが測定した期間 (イベントの実行にかかった時間) が表示されます。

Profiler-measured duration column within the SQL Server Profiler window

Profiler-measured duration column within the SQL Server Profiler window

一番最後には、「リプレイ統計」が表示されます。 イベントの合計、発生したプロバイダー/内部エラー、ヒット率の統計、および合計再生時間を示す「再生統計イベント」があります。

Replay Statistics Event statistics

Replay Statistics Event statistics

繰り返しになりますが、これは SQL Server のパフォーマンスに問題があり、その問題を再現したい場合のシナリオに適しています。 まず、問題をキャプチャすることで、SQL Server のパフォーマンス問題をトラブルシューティングおよび修正するために SQL Server 上で必要とされることを何でも行うことができるトレース内のワークフローを得ることができ、最後にそのトレースを再生して問題を再現し、正常に修正できたかどうかを確認することができます。 SQL Server が何をしているかをインタラクティブに視覚的に把握するために、データベース レポートを使用してパフォーマンスとシステム情報を収集できるようになったことを期待しています。 また、SQL Serverのパフォーマンスをリアルタイムで監視するツールとして、Activity Monitorを取り上げました。 また、DMV の使用方法を見て、最後に SQL Server Profiler の使用方法を学びました。

  • Author
  • Recent Posts
Bojan Petrovic
Bojan aka “Boksi”, コペンハーゲン・スクール・オブ・デザイン・アンド・テクノロジー(Copenhagen School of Design and Technology)でネットワークと電子技術を中心としたIT技術をAPで学んだ彼は、品質保証、ソフトウェアサポート、プロダクトエバンジェリズム、ユーザーエンゲージメントなどの経験を持つソフトウェアアナリストです。
彼は SQL Shack と ApexSQL Solution Center の両方で、4K 解像度やテーマ設定などのクライアント技術、エラー処理、インデックス戦略、パフォーマンス監視などのトピックについて幅広く執筆しています。
Bojan はセルビアの Nis にある ApexSQL で、MySQL や SQL Server を含む次世代のデータベースツールの設計、開発、テストを行うチームの重要な一員として働いています。
LinkedInでBojanについてもっと見る
Bojan Petrovicのすべての投稿を見る

Bojan Petrovic
Bojan Petrovicの最新の投稿 (すべて見る)
  • MySQLとMariaDBの開発のためのVisual Studio Code – August 13, 2020年
  • SQL UPDATE 構文の説明 – 2020年7月10日
  • CREATE VIEW SQL: SQL Serverでインデックス付きビューを使用する – 2020年3月24日

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です