<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      SQL點滴13—收集SQLServer線程等待信息

      要知道線程等待時間是制約SQL Server效率的重要原因,這一個隨筆中將學習怎樣收集SQL Server中的線程等待時間,類型等信息,這些信息是進行數據庫優化的依據。

        

      sys.dm_os_wait_stats

      這是一個系統視圖,里面存儲線程所遇到的所有的等待信息,具體的列如下表

      列名

      數據類型

      說明

      Wait_type

      Nvarchar(60)

      等待類型名稱

      waiting_tasks_count

      Bigint

      等待類型的等待數。該計數器在每開始一個等待時便會增加。

      Wait_time_ms

      Bigint

      該等待類型的總等待時間。

      Max_wait_time_ms

      Bigint

      該等待類型的最長等待時間。

      Signal_wait_time_ms

      Bigint

      正在等待的線程從收到信號通知到開始運行之間的時差。

      要注意的是,這個視圖的信息每次關閉SQL Server的時候都會自動清除,下次打開SQL Server的時候又會重新開始統計。

        

      新建線程等待信息表

      如果想得到連續的信息,在固定時間間隔內收集信息比如一個小時一次,這樣就可以分析系統分配的等待時間,識別出繁忙時間段。這里我們將這些信息收集到一個數據表中保存并進行分析。使用下面的語句新建一個表:

      use AdventureWorks

      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);

        

      新建job填充數據

      要收集信息最好是用一個job來定時地執行insert語句填充數據,下面介紹步驟

      1. 點擊數據庫中的SQL Server Agent,展開,右擊jobs文件夾,右擊新建。如圖1


        圖1
      2. 在新建job界面,General標簽中填寫job名稱,描述,如圖2

        圖2
      3. 點擊Setps標簽,點擊新建按鈕,在新建step界面內設置Step Name,Type,DataBase,Command等屬性,如下圖3。這些屬性一看就知道是要做什么的,就不一一的解釋了。還要說的 是截圖是建好的job,如果你自己做的話對話框顯示的標題可能不一樣。


        圖3
        Command屬性是設置要執行的SQL語句或存儲過程等等,這里設置如下的SQL Script:
        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
      4. 點擊Shedules標簽,設置job的執行計劃,這里設置的是每天的每5分鐘執行一次如圖4
                                                                    
        圖4

      上述步驟包含了新建一個job的主要設置,其他的細節信息沒有包含,遇到具體問題再具體分析吧。

      收集等待信息數據

      過一段時間之后在表WaitStats中就會有一些數據,每隔5分鐘就會在這個表中寫入一些數據,這些數據會不斷的增加。這里為了得到相鄰間隔之間線程等待時間的變化就要使用自連接,連接條件是等待類型相同,當前行號等于上一個的行號加上1,然后就可以用上一次等待時間減去這一次的等待時間得到這個變化值,下面使用一個函數來實現這個邏輯:

      IF OBJECT_ID('dbo.IntervalWaits', 'IF') IS NOT NULL
      DROP FUNCTION dbo.IntervalWaits;
      GO
      CREATE FUNCTION dbo.IntervalWaits
      (
      @fromdt AS DATETIME, @todt AS DATETIME)
      RETURNS TABLE
      AS
      RETURN
      WITH Waits AS
      (
      SELECT dt, wait_type, wait_time_ms,
      ROW_NUMBER()
      OVER(PARTITION BY wait_type
      ORDER BY dt) AS rn
      FROM dbo.WaitStats
      )
      SELECT Prv.wait_type, Prv.dt AS start_time,
      CAST((Cur.wait_time_ms - Prv.wait_time_ms)
      / 1000. AS NUMERIC(12, 2)) AS interval_wait_s
      FROM Waits AS Cur
      JOIN Waits AS Prv
      ON Cur.wait_type = Prv.wait_type
      AND Cur.rn = Prv.rn + 1
      AND Prv.dt >= @fromdt
      AND Prv.dt < DATEADD(day, 1, @todt)
      GO

      這個函數接受兩個參數,開始統計時間,結束統計時間,返回等待變化的時間,并按照類型排序。調用這個函數如下:

      SELECT wait_type, start_time, interval_wait_s

      FROM dbo.IntervalWaits('20110509', '20110510') AS F

      ORDER BY SUM(interval_wait_s) OVER(PARTITION BY wait_type) DESC,wait_type,start_time;

      但是我們不能每次都去調用這個函數,所以可以吧這個查詢放在一個視圖里面,外部只需要使用視圖來查詢數據就可以了:

      IF OBJECT_ID('dbo.IntervalWaitsSample', 'V') IS NOT NULL
      DROP VIEW dbo.IntervalWaitsSample;
      GO
      CREATE VIEW dbo.IntervalWaitsSample
      AS
      SELECT wait_type, start_time, interval_wait_s
      FROM dbo.IntervalWaits('20090212', '20090215') AS F;
      GO
      從視圖中查詢得到的數據就是我們要得到的數據。但是這些并不明顯,先寫到這里,下一個隨筆我將在EXECL中把這些數據制作成一個直方圖或者連線圖,橫軸是時間,縱軸是等待間隔時間。這樣就會更加直觀地看到在那些時間SQL Server的線程等待時間最長,也就是最繁忙的時候。
      posted @ 2011-05-10 20:25  nd  閱讀(3088)  評論(6)    收藏  舉報
      主站蜘蛛池模板: 性欧美vr高清极品| 亚洲成av人片天堂网无码| 国产成人精品亚洲午夜| 亚洲老女人区一区二视频| 国产在线观看免费观看不卡| 国产一区国产精品自拍| 日本免费视频| 国产自拍一区二区三区在线| 崇文区| 亚洲第四色在线中文字幕| 成人无遮挡裸免费视频在线观看 | 无码国产偷倩在线播放| 怡红院一区二区三区在线| 亚洲AV成人片在线观看| yyyy在线在片| 精品一区二区三区不卡| 久久国产乱子伦免费精品无码 | 99久久亚洲综合精品成人网| 国产成AV人片久青草影院| 激情伊人五月天久久综合| 亚洲女同精品中文字幕 | 亚洲一区二区偷拍精品| 久久精品一偷一偷国产| 在线人成免费视频69国产| 污污网站18禁在线永久免费观看| 欲色欲色天天天www| 亚洲人成色99999在线观看| 久久香蕉国产线看观看猫咪av| 内射一区二区三区四区| 亚洲欧美高清在线精品一区二区| 免费A级毛片中文字幕| 老妇女性较大毛片| 熟妇啊轻点灬大JI巴太粗| 欧美日韩精品一区二区三区高清视频| 最近中文字幕完整版2019| 在线精品自拍亚洲第一区| 亚洲人妻中文字幕一区| 国产精品麻豆欧美日韩ww| 天天做天天爱夜夜爽导航| 69天堂人成无码免费视频| 阿瓦提县|