1. 程式人生 > >sql server 性能調優之 當前用戶請求分析 (1)

sql server 性能調優之 當前用戶請求分析 (1)

spro doc strong https lec 多個 操作 source bold

原文:sql server 性能調優之 當前用戶請求分析 (1)

一. 概述

  在生產數據庫運行期間,有時我們需要查看當前用戶會話狀態或者是說數據庫當前是否運行良好, 應用的場景比如:當運行的應用系統響應突然變慢時需要分析數據庫的、或想分析當前的數據庫是否繁忙,是否有長時間的等待, 又或者執行一個sql的回滾狀態查看,想手動kill掉一個會話時 等等。都需要從當前的會話狀態去分析。

  這篇主要介紹sys.sysprocesses 函數,這裏面包含了當前用戶大量的信息,如會話進程有多少,等待時間,open_tran有多少事務,阻塞會話是多少等 整體內容更為詳細是一個分析當前會話狀態比較好的切入點。

SELECT * FROM sys.sysprocesses

技術分享圖片技術分享圖片

下面先來介紹來函數的字段說明,字段很多一個個來詳細介紹下,了解了含義後,後面來案例分析:

字段名稱

說明

spid 會話ID(進程ID)

SQL內部對一個連接的編號,一般來講,小於50,如果用戶連接的編號,大於50

blocked 阻塞ID

阻塞的進程ID, 值大於0表示阻塞, 值為本身進程ID表示io操作

如果blocked>0,但waittime時間很短,說明阻塞時間不長,不嚴重

waitresource 等待資源

格式為 fileid:pagenumber:rid 如(5:1:8235440)

kipid 線程ID

當kpid值為不0時,代表當前是活動用戶

kpid=0, waittime=0 空閑連接

kpid>0, waittime=0 運行狀態

kpid>0, waittime>0 需要等待某個資源,才能繼續執行,一般會是suspended(等待io)

kpid=0, waittime=0 但它還是阻塞的源頭,查看open_tran>0 事務沒有及時提交

waittime

當前等待時間(以毫秒為單位)

open_tran

進程的打開事務數

hostname

建立連接的客戶端工作站的名稱

program_name

應用程序的名稱

hostprocess

工作站進程 ID 號

loginame

登錄名

status

running = 會話正在運行一個或多個批
background = 會話正在運行一個後臺任務,例如死鎖檢測
rollback = 會話具有正在處理的事務回滾
pending = 會話正在等待工作線程變為可用
runnable = 會話中的任務在等待,由scheduler來運行的可執行隊列中。(重要)
spinloop = 會話中的任務正在等待調節鎖變為可用。
suspended = 會話正在等待事件(如 I/O)完成。(重要)
sleeping = 連接空閑

如果status 上有好幾個runnable狀態任務,需要認真對待。 cpu負荷過重沒有及時處理用戶的並發請求

  其它字段信息查看msdn

  1.1 查看用戶會話信息

select * from  sys.sysprocesses  where spid>50

技術分享圖片

  1.2 查看活動用戶信息

SELECT spid,kpid,blocked ,waittime AS waitms, lastwaittype, DB_NAME(dbid),  waitresource, open_tran,hostname,[program_name],hostprocess,loginame, [status]
FROM sys.sysprocesses WITH(NOLOCK) 
WHERE    kpid>0  AND  [status]<>sleeping  AND spid>50
ORDER BY waittime DESC

技術分享圖片

  1.3 查看用戶阻塞會話信息

SELECT spid,kpid,blocked ,waittime AS waitms, lastwaittype, DB_NAME(dbid),  waitresource, open_tran,hostname,[program_name],hostprocess,loginame, [status]
FROM sys.sysprocesses WITH(NOLOCK) 
WHERE    blocked>0  AND spid>50
ORDER BY waittime DESC

技術分享圖片

  1.4 查看系統會話信息

select * from  sys.sysprocesses  where spid<=50

技術分享圖片

sql server 性能調優之 當前用戶請求分析 (1)