日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

5. SQL Server数据库性能监控 - 当前请求

發布時間:2025/4/16 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 5. SQL Server数据库性能监控 - 当前请求 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
5. SQL Server數據庫性能監控 - 當前請求 原文:5. SQL Server數據庫性能監控 - 當前請求

對于在線運行的系統,當前數據庫性能監控,通常監視以下幾點:

(1) 是否有阻塞 (Blocking);

(2) 是否有等待 (Waiting),阻塞就是鎖 (Lock) 等待;

(3) 是否運行時間過長(Long running);

(4) 是否有死鎖 (Deadlock);

sys.dm_exec_query_stats之類,等一些統計性的信息,通常不作為實時告警內容,而是在性能優化時,作為參考。

?

. 阻塞/等待/長時間運行

1. SQL Server 2005 及以后版本檢查

SELECT r.session_id,r.blocking_session_id,DB_Name(r.database_id) as database_name,r.start_time,r.total_elapsed_time,r.[status],CASE WHEN r.blocking_session_id <> 0 THEN 'Blocking'WHEN r.blocking_session_id = 0 AND r.wait_type is not null THEN 'Waiting'ELSE 'Long-running'END as slowness_type,r.percent_complete,r.command,r.wait_type,r.wait_time,r.wait_resource,r.last_wait_type,r.cpu_time,r.reads,r.writes,r.logical_reads,t.[text] as executing_batch,SUBSTRING(t.[text],r.statement_start_offset/2,(CASE WHEN r.statement_end_offset = -1 THEN DATALENGTH (t.[text]) --LEN(CONVERT(NVARCHAR(MAX), t.text)) * 2ELSE r.statement_end_offset END - r.statement_start_offset )/2 + 1) as executing_sql,bt.[text] as blocking_batch,SUBSTRING(bt.[text],br.statement_start_offset/2,(CASE WHEN br.statement_end_offset = -1 THEN DATALENGTH (bt.[text]) --LEN(CONVERT(NVARCHAR(MAX), bt.text)) * 2ELSE br.statement_end_offset END - br.statement_start_offset )/2 + 1) as blocking_sql--,p.query_planFROM sys.dm_exec_requests rCROSS APPLY sys.dm_exec_sql_text(r.sql_handle) as tCROSS APPLY sys.dm_exec_query_plan(r.plan_handle) as pLEFT JOIN sys.dm_exec_requests brON r.blocking_session_id = br.session_idOUTER APPLY sys.dm_exec_sql_text(br.session_id) as btWHERE r.session_id > 50 and r.session_id <> @@SPIDAND r.total_elapsed_time > 30 * 60 * 1000ORDER BY r.total_elapsed_time DESC;

以上腳本返回運行超過30分鐘的語句,需要注意的是:

(1) 如果返回執行計劃,會讓以上腳本變慢很多,可以不返回,在收到告警后檢查語句時,再去查看執行計劃;

(2) 顯示TEXT,比如: xp_cmdshell這樣的語句,start_offset, end_offset都為0,截取的 text是空白,只有看TEXT才知道是什么語句;還有就是有時需要知道這個請求來自哪個batch或者存儲過程;

(3) 有時顯示TEXT還不夠,還以xp_cmdshell為例,需要dbcc inputbuffer才能看到完整的sql語句;另外已運行結束但還沒有commit/rollback的事務,在requests中已經沒有了,也需要借用dbcc inputbuffer來查看sql 語句;

dbcc inputbuffer(@@SPID)

(4) SQL Agent作業,在這里會被一并檢查,也可以通過msdb..sysjobactivity另行檢查;

select b.name, * from msdb..sysjobactivity ainner join msdb.dbo.sysjobs bon a.job_id = b.job_idwhere b.name like '%backup%'

?

2. SQL Server 2000沿用過來的方法

select p.dbid, p.spid, p.blocked, p.waittime/1000.0/60.0 as wait_minutes, ISNULL(DATEDIFF(MI, p.last_batch, GETDATE()), 0) elapsed_minutes, p.last_batch, p.status, p.program_name, (select [text] FROM ::fn_get_sql(p.sql_handle)) sql_text from master..sysprocesses pwhere spid > 50 and spid <> @@SPIDAND (status <> 'sleeping' AND ISNULL(DATEDIFF(MI, p.last_batch, GETDATE()), 0) > 30)

以上腳本返回運行超過30分鐘的語句,需要注意的是:

sysprocesses中把connection/session/request信息三者合一,其中沒有請求開始的具體時間,通過last_batch監視運行時長并不準確。測試如下:

(1) 通過ISQL連接到SQL Server,如果當前連接沒發起過任何請求,last_batch的時間為 1900-01-01 00:00:00,在此連接上發起請求時,通過last_batch計算當前請求運行時長不準確;

(2) 在SQL Analyzer/SSMS中新建查詢窗口,未發起任何查詢時,last_batch與login_time一樣,而非1900-01-01 00:00:00,通過last_batch計算當前請求運行時長不準確;或者當前窗口發起的請求已結束,但窗口/連接未關閉,則在此連接上再次發起請求,last_batch為上次請求結束的時間,通過last_batch計算當前請求運行時長也不準確;

(3) SQL Agent作業運行結束后,會把在sysprocesses的連接關閉,下次運行時重新建立連接,新建連接中last_batch等于login_time,通過last_batch計算作業運行時長準確;

?

作為一個老的方法,估且不再去深究,不過用sysprocesses來監視阻塞/等待還是沒有問題的,另外作業的運行時長也是可以監視的,腳本改動后如下:

select p.dbid, p.spid, p.blocked, p.waittime/1000.0/60.0 as wait_minutes, ISNULL(DATEDIFF(MI, p.last_batch, GETDATE()), 0) elapsed_minutes, p.last_batch, p.status, p.program_name, (select [text] FROM ::fn_get_sql(p.sql_handle)) sql_text from master..sysprocesses pwhere spid > 50 and spid <> @@SPIDand ((p.program_name like 'SQLAgent - TSQL JobStep (Job %' AND ISNULL(DATEDIFF(MI, p.last_batch, GETDATE()), 0) > 30)or (p.blocked <> 0 and p.waittime/1000.0/60.0 > 30))

這樣一來,只剩下未被阻塞但長時間運行的sql請求未被監視到。如果一定要全面監視的話,可以選擇開啟跟蹤,進而分析跟蹤文件。

?

. 死鎖

死鎖的監控可以通過監視SQL Server的ERRORLOG來實現,不過需要事先打開死鎖的跟蹤標記。腳本如下:

--sql server 2000 dbcc traceon(1204,-1)--sql server 2005 + dbcc traceon(1222,-1)

這樣發生死鎖時,死鎖詳細信息就會被寫入ERRORLOG,檢查deadlock或者victim關鍵字即可進行監控。

?

小結

各個語句的運行時長/基線并不一樣,通常不好設置統一的閥值,有時會借用第三方工具針對不同的請求設置不同的時長閥值并告警,所以在數據庫這層大多告警阻塞即可,大致步驟如下 :

(1) 部署數據庫郵件;

(2) 部署作業:定時檢查阻塞,發郵件告警。

?

posted on 2014-09-21 19:26 NET未來之路 閱讀(...) 評論(...) 編輯 收藏

轉載于:https://www.cnblogs.com/lonelyxmas/p/3984880.html

總結

以上是生活随笔為你收集整理的5. SQL Server数据库性能监控 - 当前请求的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 一本色道久久88加勒比—综合 | 久久高清内射无套 | 少妇高潮一区二区三区四区 | 毛茸茸毛片 | 解开人妻的裙子猛烈进入 | 欧美激情欧美激情在线五月 | 国产理论影院 | 特级毛片在线观看 | 日韩欧美一二三区 | av网站在线看 | 久久成人乱码欧美精品一区二区 | 国产欧洲亚洲 | 国产女上位 | 亚洲一区中文字幕在线 | 久草91 | 国产第一av| 99热免费精品 | 精品国产亚洲av麻豆 | 九九热视频免费观看 | 丝袜国产一区 | 成人精品网 | 91蜜桃婷婷狠狠久久综合9色 | 奇米久久久 | 日本作爱视频 | 无人在线观看高清视频 单曲 | 人人妻人人澡人人爽精品欧美一区 | 国产做受高潮动漫 | 91禁在线动漫 | 国产一区二区三区在线观看视频 | 伊人伊人伊人伊人 | 看全色黄大色黄大片女一次牛 | 黄色大片免费观看视频 | 超能一家人电影免费喜剧在线观看 | 成人福利视频网 | 国产色秀视频 | 美腿丝袜一区二区三区 | 日产精品一区 | 国产一级特黄a高潮片 | 中文人妻av久久人妻18 | 好男人在线视频www 亚洲福利国产 | 久久精品九九 | 囯产精品一品二区三区 | 日产精品久久久久久久蜜臀 | 性高潮久久久久 | 国产性―交一乱―色―情人 | 日韩精品第一区 | 伊人蕉 | 欧美精品xxxxx | 91色在线观看| 欧美午夜久久 | 久久精视频 | 69黄色片| 亚洲免费在线视频观看 | 成人自拍网 | 亚洲天堂手机在线观看 | 精品一区二区三区无码按摩 | 麻豆网站视频 | 欧洲亚洲激情 | 又粗又大又硬又长又爽 | 日本视频不卡 | 偷偷操不一样的久久 | 色91在线| 欧美色国 | 上海毛片 | 久久黄色影视 | 日韩精品视频一区二区在线观看 | 特黄特色大片免费播放器使用方法 | 成人美女毛片 | 亚洲黄色在线视频 | 免费国产一级 | 关之琳三级全黄做爰在线观看 | 琪琪色综合网 | 午夜激情av | 国产一区二区三区四区在线观看 | 国产精品免费av | 成年人福利视频 | 网友自拍咪咪爱 | 熊出没之冬日乐翻天免费高清观看 | 黄色成年视频 | 三上悠亚一区二区在线观看 | 亚洲第一天堂网 | 亚洲人午夜射精精品日韩 | 国产porn | 99热这里只有精品7 青青草社区 | 少妇高潮毛片色欲ava片 | 98精品国产 | 黄色高潮 | 国产精品久久久久久久久绿色 | 亚洲aⅴ乱码精品成人区 | 婷婷综合另类小说色区 | 亚洲自拍偷拍在线 | 欧美一区久久 | 黄色av网站在线播放 | 91精品免费 | 日韩一区二区三区视频在线观看 | 无套内谢少妇毛片 | 国产激情综合五月久久 | 久久国产影院 | 午夜视频日韩 |