SQLShack
はじめに
この記事では、SQL Server のパフォーマンスを監視するために使用できる多くのツールについて説明します。 SQL Serverにはたくさんの優れたレポートがあり、DBAはSQL Serverに現在のパフォーマンスのボトルネックがあるかどうかをすぐに見つけることができます。 これらのレポートの多くはDMVの上に配置されていますが、データを見たり操作したりするための視覚的にインタラクティブな方法を提供してくれます。
ダッシュボード レポート
SQL Server Management Studio (SSMS) に飛び込んで、まず最初に、すべてのレベルの、すぐに使えるダッシュボード レポートを見てみましょう。 これらのレポートは、オブジェクト エクスプローラーで SQL Server インスタンスを右クリックし、コンテキスト メニューから [レポート] > [標準レポート] を選択すると表示されます。
ダッシュボードのレポートはどれも便利です。 しかし、機会があればいつでもすべてのレポートをチェックしてください。 例として、コンテキストメニューから「サーバーダッシュボード」を選択してみましょう。 このレポートでは、SQL Server インスタンスの構成、バージョン、サービス、アクティビティなど、現在の状態に関する多くの情報を得ることができます。
ここには、デフォルト以外の構成オプションもあります。 これらは、バニラインストールから変更されているものです。
また。 また、データベース レベルでは、データベースを右クリックしてレポートに移動すると、あらゆる種類のディスク使用量レポート、バックアップおよび復元イベント、トップ トランザクション、インデックス統計などがあります。
このように、これらのダッシュボードのレポートはすべて素晴らしく、利用したり作業したりするのが簡単です。
アクティビティ モニター
次は、パフォーマンスから I/O コスト、高価なクエリなど、あらゆるものを監視するために使用できる SQL Server 内のリアルタイム モニターであるアクティビティ モニターを見てみましょう。 アクティビティモニタを起動するには、オブジェクトエクスプローラでSQL Serverインスタンスを右クリックし、コンテキストメニューから「アクティビティモニタ」を選択します。 また、標準ツールバーのアクティビティ モニター アイコンをクリックして起動することもできます。
アクティビティ モニターは、SQL Server のパフォーマンスに突然何か問題が発生した場合に使用するツールの 1 つとなっています。 アクティビティ モニターを起動すると、最初に表示されるのは [概要] ペインです。 さらにこのツールには、次のような拡張・折りたたみ可能なペインが用意されています。
プロセス – 現在実行中のプロセスを見て、それらを管理することができます。 右クリックでコンテキスト メニューが表示され、そこからプロセスを終了させたり、SQL Server Profiler (詳細は後述します) でトレースしたり、実行プランとして表示したり、最後には、最後の T-SQL コマンド バッチを示すダイアログをポップアップするセッションの詳細が表示されます。
Resources Waits – リソースの待ち時間に関する情報を表示します。
Data File 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」は関数を表していることに注意してください:
上記のクエリは、システム上の 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」と入力します。
覚えておいてください。 プロセス ペインをクリックし、プロファイル化したいプロセスを右クリックして、右クリックのコンテキスト メニューから [SQL Server Profiler でプロセスをトレース] オプションを選択するだけです。
そして、これが起動したら、「新規トレース」という最初のボタンをクリックします。
プロファイルしてトレースを作成するインスタンスへの接続が確立されると、[トレースのプロパティ] ウィンドウが表示されます。 トレース名] ボックスでトレースに名前を付けます。 このトレースを再生したいので、組み込みのトレース テンプレートを選択します。なぜなら、再生にはいくつかの要件があり、特定のイベントやフィールドをキャプチャする必要があるからです。
とりあえず、Save to fileオプションにチェックを入れてファイルとして保存し、タブをEvents Selectionに変更します。 テンプレートを選択しているので、多くのイベントが事前に選択されているはずです。
この例では、Column Filters ボタンをクリックして、データベース名にフィルタを設定してみましょう。 AdventureWorks2014データベースにヒットしたイベントだけをトラップしたいのです。
これらすべてが設定されたら、Edit FilterダイアログでOKをクリックして設定を保存し、ダイアログを閉じます。 初期ウィンドウに戻り、「実行」ボタンを押してトレースを開始します。 これで、このトレースが実行され、AdventureWorks2014のデータベースで起こっていることをすべて監視していることになります。
SSMSを切り替えて、いくつかのクエリを実行するか、しばらくバックグラウンドで実行させてみてください。
しばらく放置した後、下に示すように赤い停止ボタンをクリックしてトレースを停止します。
さて、以前に保存したファイル内にすべてがキャプチャされましたので、例えば、この再生を別のインスタンスで実行することができます。 なぜでしょう? それは、本番環境で問題が発生したときに非常に役に立つからです。 何か大きな問題があっても、本番サーバーで直接修正できる可能性はほとんどありません。 この使用例のシナリオでは、最良のアプローチは、本番環境をテストにコピーし、本番環境でキャプチャされたトレースを取得し、トラブルシューティングと問題解決の観点から、そのテスト データベース上で何でもできるようにすることです。
そのためには、SQL Server Profiler でトレースを開きます。
次に、Replay に移動して Start を選択します。
これで、再び、インスタンスへの SQL Server 接続ダイアログが表示されます。
そして、前述の目的のために必要であれば、再生サーバーを変更することができる「再生設定」ウィンドウに移動します。 ここからは非常に簡単です。
最初の行には、常にすべてのリプレイ設定イベントが含まれます。 その後、いつでもイベントがあれば、そのイベントを発射します。
右にスクロールすると、どの結果セットにもプロファイラーが測定した期間 (イベントの実行にかかった時間) が表示されます。
一番最後には、「リプレイ統計」が表示されます。 イベントの合計、発生したプロバイダー/内部エラー、ヒット率の統計、および合計再生時間を示す「再生統計イベント」があります。
繰り返しになりますが、これは SQL Server のパフォーマンスに問題があり、その問題を再現したい場合のシナリオに適しています。 まず、問題をキャプチャすることで、SQL Server のパフォーマンス問題をトラブルシューティングおよび修正するために SQL Server 上で必要とされることを何でも行うことができるトレース内のワークフローを得ることができ、最後にそのトレースを再生して問題を再現し、正常に修正できたかどうかを確認することができます。 SQL Server が何をしているかをインタラクティブに視覚的に把握するために、データベース レポートを使用してパフォーマンスとシステム情報を収集できるようになったことを期待しています。 また、SQL Serverのパフォーマンスをリアルタイムで監視するツールとして、Activity Monitorを取り上げました。 また、DMV の使用方法を見て、最後に SQL Server Profiler の使用方法を学びました。
- Author
- Recent Posts
彼は SQL Shack と ApexSQL Solution Center の両方で、4K 解像度やテーマ設定などのクライアント技術、エラー処理、インデックス戦略、パフォーマンス監視などのトピックについて幅広く執筆しています。
Bojan はセルビアの Nis にある ApexSQL で、MySQL や SQL Server を含む次世代のデータベースツールの設計、開発、テストを行うチームの重要な一員として働いています。
LinkedInでBojanについてもっと見る
Bojan Petrovicのすべての投稿を見る
- MySQLとMariaDBの開発のためのVisual Studio Code – August 13, 2020年
- SQL UPDATE 構文の説明 – 2020年7月10日
- CREATE VIEW SQL: SQL Serverでインデックス付きビューを使用する – 2020年3月24日