web-dev-qa-db-ja.com

PerfmonカウンターとしてのDMVクエリ

起動後にインクリメントするさまざまな統計を返す特定のDMVクエリは、perfmonカウンターとして役立ちます。

たとえば、次のようにします。

SELECT wait_type, wait_time_ms FROM sys.dm_os_wait_stats;

ほとんどの監視ツールは、SNMPカウンターが機能する方法であるため、増分数を取得してレートに変換する方法を知っています。これらの種類の統計をDMVクエリに変換する既存のツールを知っている人はいますか?

5
Kyle Brandt

これはあなたの質問に正確に答えるものではありませんが、Paul Randalは、昨年12月の調査の1つで、待機統計を集計するための非常に役立つクエリを含めました。私は恥知らずにそれをここにコピーして貼り付けましたが、そこから得られる知識が豊富であるため、彼のサイトへのリンクを提供しています。 待機統計

WITH Waits AS
    (SELECT
        wait_type,
        wait_time_ms / 1000.0 AS WaitS,
        (wait_time_ms - signal_wait_time_ms) / 1000.0 AS ResourceS,
        signal_wait_time_ms / 1000.0 AS SignalS,
        waiting_tasks_count AS WaitCount,
        100.0 * wait_time_ms / SUM (wait_time_ms) OVER() AS Percentage,
        ROW_NUMBER() OVER(ORDER BY wait_time_ms DESC) AS RowNum
    FROM sys.dm_os_wait_stats
    WHERE wait_type NOT IN (
        'CLR_SEMAPHORE', 'LAZYWRITER_SLEEP', 'RESOURCE_QUEUE', 'SLEEP_TASK',
        'SLEEP_SYSTEMTASK', 'SQLTRACE_BUFFER_FLUSH', 'WAITFOR', 'LOGMGR_QUEUE',
        'CHECKPOINT_QUEUE', 'REQUEST_FOR_DEADLOCK_SEARCH', 'XE_TIMER_EVENT', 'BROKER_TO_FLUSH',
        'BROKER_TASK_STOP', 'CLR_MANUAL_EVENT', 'CLR_AUTO_EVENT', 'DISPATCHER_QUEUE_SEMAPHORE',
        'FT_IFTS_SCHEDULER_IDLE_WAIT', 'XE_DISPATCHER_WAIT', 'XE_DISPATCHER_JOIN', 'BROKER_EVENTHANDLER',
        'TRACEWRITE', 'FT_IFTSHC_MUTEX', 'SQLTRACE_INCREMENTAL_FLUSH_SLEEP',
        'BROKER_RECEIVE_WAITFOR', 'ONDEMAND_TASK_QUEUE', 'DBMIRROR_EVENTS_QUEUE',
        'DBMIRRORING_CMD', 'BROKER_TRANSMITTER', 'SQLTRACE_WAIT_ENTRIES',
        'SLEEP_BPOOL_FLUSH', 'SQLTRACE_LOCK')
    )
SELECT
    W1.wait_type AS WaitType,
    CAST (W1.WaitS AS DECIMAL(14, 2)) AS Wait_S,
    CAST (W1.ResourceS AS DECIMAL(14, 2)) AS Resource_S,
    CAST (W1.SignalS AS DECIMAL(14, 2)) AS Signal_S,
    W1.WaitCount AS WaitCount,
    CAST (W1.Percentage AS DECIMAL(4, 2)) AS Percentage,
    CAST ((W1.WaitS / W1.WaitCount) AS DECIMAL (14, 4)) AS AvgWait_S,
    CAST ((W1.ResourceS / W1.WaitCount) AS DECIMAL (14, 4)) AS AvgRes_S,
    CAST ((W1.SignalS / W1.WaitCount) AS DECIMAL (14, 4)) AS AvgSig_S
FROM Waits AS W1
    INNER JOIN Waits AS W2 ON W2.RowNum <= W1.RowNum
GROUP BY W1.RowNum, W1.wait_type, W1.WaitS, W1.ResourceS, W1.SignalS, W1.WaitCount, W1.Percentage
HAVING SUM (W2.Percentage) - W1.Percentage < 95; -- percentage threshold
GO
3
Matt M

これがあなたの言っていることかどうかはわかりませんが、 DbVisualizer は、この種のデータをグラフに表示するのに非常に優れた仕事をしています。監視機能を探します。グリッド内のクエリからデータを収集すると、グリッドをグラフとして表示できます。グリッドでは、前のセルをアドレス指定し、それらを使用して差を計算できます。そうすることで、時間差と増分を表示でき、効果的にレートを得ることができます。それは非常に素晴らしい方法でマルチプラットフォームとマルチデータベースです。

0
ik_zelf