zoukankan      html  css  js  c++  java
  • SQL技术内幕-13 SQL优化方法论之分离重量级的等待

    Code

    -- Isolate top waits
    WITH Waits AS
    (
      SELECT
        wait_type,
        wait_time_ms / 1000. AS wait_time_s,
        100. * wait_time_ms / SUM(wait_time_ms) OVER() AS pct,
        ROW_NUMBER() OVER(ORDER BY wait_time_ms DESC) AS rn,
        100. * signal_wait_time_ms / wait_time_ms as signal_pct
      FROM sys.dm_os_wait_stats
      WHERE wait_time_ms > 0
        AND wait_type NOT LIKE N'%SLEEP%'
        AND wait_type NOT LIKE N'%IDLE%'
        AND wait_type NOT LIKE N'%QUEUE%'    
        AND wait_type NOT IN(  N'CLR_AUTO_EVENT'
                             , N'REQUEST_FOR_DEADLOCK_SEARCH'
                             , N'SQLTRACE_BUFFER_FLUSH'
                             /* filter out additional irrelevant waits */ )
    )
    SELECT
      W1.wait_type, 
      CAST(W1.wait_time_s AS NUMERIC(12, 2)) AS wait_time_s,
      CAST(W1.pct AS NUMERIC(5, 2)) AS pct,
      CAST(SUM(W2.pct) AS NUMERIC(5, 2)) AS running_pct,
      CAST(W1.signal_pct AS NUMERIC(5, 2)) AS signal_pct
    FROM Waits AS W1
      JOIN Waits AS W2
        ON W2.rn <= W1.rn
    GROUP BY W1.rn, W1.wait_type, W1.wait_time_s, W1.pct, W1.signal_pct
    HAVING SUM(W2.pct) - W1.pct < 80 -- percentage threshold
        OR W1.rn <= 5
    ORDER BY W1.rn;
    GO
    View Code

     1.从系统最后一次重启或计数器清空,该等待类型的总等待时间(以秒为单位)

    2.该类型的等待时间占等待时间的百分比

    3.从最重量级的等待类型到当前等待类型的连续百分比。

    4.信号等待时间占等待时间的百分比,、(记住,wait_time_ms包含signal_wait_time_ms)

    收集等待信息

    -- Create the WaitStats table
    USE Performance;
    IF OBJECT_ID('dbo.WaitStats', 'U') IS NOT NULL DROP TABLE dbo.WaitStats;
    
    CREATE TABLE dbo.WaitStats
    (
      dt                  DATETIME     NOT NULL DEFAULT (CURRENT_TIMESTAMP),
      wait_type           NVARCHAR(60) NOT NULL,
      waiting_tasks_count BIGINT       NOT NULL,
      wait_time_ms        BIGINT       NOT NULL,
      max_wait_time_ms    BIGINT       NOT NULL,
      signal_wait_time_ms BIGINT       NOT NULL
    );
    
    CREATE UNIQUE CLUSTERED INDEX idx_dt_type ON dbo.WaitStats(dt, wait_type);
    CREATE INDEX idx_type_dt ON dbo.WaitStats(wait_type, dt);
    
    -- Load waitstats data on regular intervals
    INSERT INTO Performance.dbo.WaitStats
        (wait_type, waiting_tasks_count, wait_time_ms,
         max_wait_time_ms, signal_wait_time_ms)
      SELECT
        wait_type, waiting_tasks_count, wait_time_ms,
        max_wait_time_ms, signal_wait_time_ms
      FROM sys.dm_os_wait_stats
      WHERE wait_type NOT IN (N'MISCELLANEOUS');
  • 相关阅读:
    关于下下载typora的相关说明
    Vue项目vscode 安装eslint插件的方法(代码自动修复)
    [0].Net开发者社区--您好大的官威啊!
    关于hadoop安装后无法访问web界面查看查看 NameNode 和 Datanode 信息
    C#(winform)记录阻止关闭页面方法
    Android开发:记录Cannot resolve symbol'R'问题解决记录
    C#Winform开发杂项记录
    C#Winform 使用NPOI导入、导出Excel
    C#记录一些用到的比对方法
    C#(Winform开发)Excel导出
  • 原文地址:https://www.cnblogs.com/alphafly/p/4395679.html
Copyright © 2011-2022 走看看