成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SQL點(diǎn)滴之收集SQL Server線程等待信息

數(shù)據(jù)庫 SQL Server
要知道線程等待時(shí)間是制約SQL Server效率的重要原因,這一個(gè)隨筆中將學(xué)習(xí)怎樣收集SQL Server中的線程等待時(shí)間,類型等信息,這些信息是進(jìn)行數(shù)據(jù)庫優(yōu)化的依據(jù)。

 

要知道線程等待時(shí)間是制約SQL Server效率的重要原因,這一個(gè)隨筆中將學(xué)習(xí)怎樣收集SQL Server中的線程等待時(shí)間,類型等信息,這些信息是進(jìn)行數(shù)據(jù)庫優(yōu)化的依據(jù)。

sys.dm_os_wait_stats

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

列名

數(shù)據(jù)類型

說明

Wait_type

Nvarchar(60)

等待類型名稱

waiting_tasks_count

Bigint

等待類型的等待數(shù)。該計(jì)數(shù)器在每開始一個(gè)等待時(shí)便會增加。

Wait_time_ms

Bigint

該等待類型的總等待時(shí)間。

Max_wait_time_ms

Bigint

該等待類型的最長等待時(shí)間。

Signal_wait_time_ms

Bigint

正在等待的線程從收到信號通知到開始運(yùn)行之間的時(shí)差。

要注意的是,這個(gè)視圖的信息每次關(guān)閉SQL Server的時(shí)候都會自動清除,下次打開SQL Server的時(shí)候又會重新開始統(tǒng)計(jì)。

新建線程等待信息表

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

  1. use AdventureWorks  
  2. CREATE TABLE dbo.WaitStats  
  3. (  
  4. dt DATETIME NOT NULL DEFAULT (CURRENT_TIMESTAMP),  
  5. wait_type NVARCHAR(60) NOT NULL,  
  6. waiting_tasks_count BIGINT NOT NULL,  
  7. wait_time_ms BIGINT NOT NULL,  
  8. max_wait_time_ms BIGINT NOT NULL,  
  9. signal_wait_time_ms BIGINT NOT NULL 
  10. );  
  11. CREATE UNIQUE CLUSTERED INDEX idx_dt_type ON dbo.WaitStats(dt, wait_type);  
  12. CREATE INDEX idx_type_dt ON dbo.WaitStats(wait_type, dt); 

新建job填充數(shù)據(jù)

要收集信息最好是用一個(gè)job來定時(shí)地執(zhí)行insert語句填充數(shù)據(jù),下面介紹步驟

點(diǎn)擊數(shù)據(jù)庫中的SQL Server Agent,展開,右擊jobs文件夾,右擊新建。如圖1

在新建job界面,General標(biāo)簽中填寫job名稱,描述,如圖2

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

Command屬性是設(shè)置要執(zhí)行的SQL語句或存儲過程等等,這里設(shè)置如下的SQL Script:

  1. INSERT INTO Performance.dbo.WaitStats  
  2. (wait_type, waiting_tasks_count, wait_time_ms,  
  3. max_wait_time_ms, signal_wait_time_ms)  
  4. SELECT 
  5. wait_type, waiting_tasks_count, wait_time_ms,  
  6. max_wait_time_ms, signal_wait_time_ms  
  7. FROM sys.dm_os_wait_stats 

點(diǎn)擊Shedules標(biāo)簽,設(shè)置job的執(zhí)行計(jì)劃,這里設(shè)置的是每天的每5分鐘執(zhí)行一次如圖4

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

收集等待信息數(shù)據(jù)

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

  1. IF OBJECT_ID('dbo.IntervalWaits''IF'IS NOT NULL 
  2. DROP FUNCTION dbo.IntervalWaits;  
  3. GO  
  4. CREATE FUNCTION dbo.IntervalWaits  
  5. (@fromdt AS DATETIME, @todt AS DATETIME)  
  6. RETURNS TABLE 
  7. AS 
  8. RETURN 
  9. WITH Waits AS 
  10. (  
  11. SELECT dt, wait_type, wait_time_ms,  
  12. ROW_NUMBER() OVER(PARTITION BY wait_type  
  13. ORDER BY dt) AS rn  
  14. FROM dbo.WaitStats  
  15. )  
  16. SELECT Prv.wait_type, Prv.dt AS start_time,  
  17. CAST((Cur.wait_time_ms - Prv.wait_time_ms)  
  18. / 1000. AS NUMERIC(12, 2)) AS interval_wait_s  
  19. FROM Waits AS Cur  
  20. JOIN Waits AS Prv  
  21. ON Cur.wait_type = Prv.wait_type  
  22. AND Cur.rn = Prv.rn + 1  
  23. AND Prv.dt >= @fromdt  
  24. AND Prv.dt < DATE 
  25. ADD(day, 1, @todt)  
  26. GO 

這個(gè)函數(shù)接受兩個(gè)參數(shù),開始統(tǒng)計(jì)時(shí)間,結(jié)束統(tǒng)計(jì)時(shí)間,返回等待變化的時(shí)間,并按照類型排序。調(diào)用這個(gè)函數(shù)如下:

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;

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

  1. IF OBJECT_ID('dbo.IntervalWaitsSample''V'IS NOT NULL 
  2. DROP VIEW dbo.IntervalWaitsSample;  
  3. GO  
  4. CREATE VIEW dbo.IntervalWaitsSample  
  5. AS 
  6. SELECT wait_type, start_time, interval_wait_s  
  7. FROM dbo.IntervalWaits('20090212''20090215')   
  8. AS F;  
  9. GO 

從視圖中查詢得到的數(shù)據(jù)就是我們要得到的數(shù)據(jù)。但是這些并不明顯,先寫到這里,下一個(gè)隨筆我將在EXECL中把這些數(shù)據(jù)制作成一個(gè)直方圖或者連線圖,橫軸是時(shí)間,縱軸是等待間隔時(shí)間。這樣就會更加直觀地看到在那些時(shí)間SQL Server的線程等待時(shí)間最長,也就是最繁忙的時(shí)候。

原文鏈接:http://www.cnblogs.com/tylerdonet/archive/2011/05/10/2042447.html

 

【編輯推薦】

  1. 淺述遠(yuǎn)程Service Broker的實(shí)現(xiàn)
  2. Service Broker基礎(chǔ)應(yīng)用(下)
  3. Service Broker基礎(chǔ)應(yīng)用(上)
  4. 簡述Service Broker事件通知功能
  5. SQL使用中的點(diǎn)滴回憶

責(zé)任編輯:艾婧 來源: 博客園
相關(guān)推薦

2011-04-21 10:06:40

SQL篩選

2011-06-23 14:00:51

SQL點(diǎn)滴

2011-08-02 13:04:40

SQL Server

2011-09-13 10:25:05

數(shù)據(jù)庫點(diǎn)滴

2011-09-09 10:10:13

SQL數(shù)據(jù)庫點(diǎn)滴

2011-08-03 13:32:00

SQL Server優(yōu)化

2011-04-27 16:34:06

withSQL Server

2011-04-22 15:00:22

SQLwin7登錄

2011-04-21 13:49:29

dementionSQL

2011-04-27 16:09:48

SQL ServerSSIS

2011-04-27 14:27:11

SQL Server

2018-04-19 09:02:14

SQL ServerSQL性能優(yōu)化

2018-12-25 14:40:04

SQL ServerSQL語句數(shù)據(jù)庫

2011-04-20 11:11:33

SQLSET QUOTED_

2011-04-28 09:49:56

SQLwith子查詢

2010-04-30 12:38:38

Oracle進(jìn)程

2011-05-24 15:02:21

OracleSQL

2011-04-27 15:55:16

2011-05-06 16:36:48

SQL備份還原

2011-10-09 16:40:50

T-SQL
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 午夜影院官网 | 欧美色综合一区二区三区 | 视频1区| 久久中文字幕av | 天天天天天天操 | 国产精品久久久久aaaa | 久久久久九九九女人毛片 | 99久久成人 | 日韩精品影院 | 成人免费精品视频 | 91久久网站 | 亚洲一级黄色 | 久久99精品久久久久子伦 | 亚洲一区二区免费视频 | 色在线看 | 一级在线毛片 | 日本偷偷操 | 欧美一级在线 | 成人av电影在线观看 | 青青草av | 久草视频2| 亚洲精品成人在线 | 日本高清中文字幕 | 亚洲伊人久久综合 | 日本视频在线 | 一区二区三区在线看 | 在线免费观看色 | 久久综合一区 | 久久国产精品一区二区三区 | 欧美国产中文 | 亚洲视频一区在线观看 | 古装三级在线播放 | 久久久久久免费毛片精品 | 亚洲国产成人精品女人久久久 | 在线免费观看黄色网址 | 日韩欧美在线一区二区 | julia中文字幕久久一区二区 | 欧美一级二级视频 | 黄色免费观看 | 91国内精精品久久久久久婷婷 | 91精品国产777在线观看 |