New Relic では、SQL Server / SQL Database の各種情報を取得しているようですが、どのような情報を取得しているのかが気になったので少し調べてみました。
プラグイン自体は Github で公開されており、newrelic-platform/newrelic_microsoft_sqlserver_plugin で確認ができたので、ここから SQL ファイルを見ています。
New Relic 自体についてはしばやん先生の
を見ていただければと。
しばやん先生の情報を見ている限り、Github の SQL ファイルを実行した結果を定期的に報告しているのかなという感じのクエリになっていました。
New Relic のプラグインの SQL については 18 個のファイルで構成されており、DMV から以下のような情報を取得しているようです。
サーバー情報 | |
ServerDetails.SqlServer.sql | SQL Server のバージョン / エディション情報を取得 |
データベース情報 | |
AllDatabasesOnInstanceAzure.sql | すべてのデータベース名を取得 |
DatabaseDetails.SqlServer.sql | すべてのデータベースの詳細情報を取得 |
FileIOView.sql | ファイル単位の I/O の発生状態を取得 |
実行状態 | |
BatchRequests.SqlServer.sql | SQL のバッチ実行数 (パフォーマンスモニターの Batch Requests/sec 相当の情報) を取得 |
Connections.SqlServer.sql | 接続情報から接続数 / 読み取り / 書き込みの状態を取得 |
クエリ情報 | |
BlockingQueries.sql | 実行中のクエリからブロッキング (ロックの競合) が発生しているクエリを取得 |
RecompileSummary.sql | リコンパイルの発生状態を取得 リコンパイルの情報はパフォーマンスモニターではなく、キャッシュされているプランの実行状態を元に算出 |
SqlDMLActivity.SqlServerAndAzureSQL.sql | クエリ実行情報から、リソースの使用状況 (実行 / 論理書き込み / 論理読み取り / 物理読み取り) を取得 |
リソース使用状況 | |
SQL-NonSQL-IdleCPUUsage.sql | DMV (sys.dm_os_ring_buffers) から SQL Server とそれ以外の CPU 使用情報を取得 |
IdleCPUUsage.sql | NUMA ノード単位のメモリ使用情報 (パフォーマンスモニターの Buffer Node 相当の情報) を取得 メモリの情報は NUMA ノード単位の Page life expectancy を取得 |
MemoryView.sql | インスタンスのメモリ使用情報 (パフォーマンスモニターの Buffer Manager 相当の情報) を取得 メモリの情報はインスタンスの Page life expectancy を取得 |
Summary.AzureSql.sql | SQL Database の接続 / リコンパイル / データベースサイズの情報を取得 |
待ち情報 | |
WaitStates.AzureSql.sql | SQL Database の待ち事象の情報を sys.dm_db_wait_stats から取得 |
WaitStates.SqlServer.sql | SQL Server の待ち事象の情報を sys.dm_os_wait_stats から首都kう |
イベント発生情報 | |
ServiceInterruptionEvents.AzureSQL.sql | SQL Database のイベント発生状態を sys.event_log から取得 |
導入設定用 | |
GrantNewRelicRightsAzure.sql | ログイン / ビュー / 権限の設定 |
GrantNewRelicRightsNonAzure.sql | ログイン / ビュー / 権限の設定 |
一通りクエリを見たのですが、「sys.dm_os_ring_buffers」の使い方がかなり面白いなと思いました。