在一些效能測試中,效能瓶頸有時會出現在資料庫端,這是我們往往想瞭解有哪些用戶端串連到DB server.
可以通過SPID查看。
1. 利用如下代碼找出SPID column坐在的表,這個表應該是sysprocesses。
select T.name,* from sys.system_columns C 。
join sys.all_objects T on C.object_id=T.object_id
where C.name like '%spid%'
補充:如何利用查出column所在的表的名稱?
————利用sys.columns 表和sys.tables表 查出column所在的表名,但是有時候0 record is returned,原因有可能是沒有一個表包含你所查詢的column,另外一個原因,可能是column是個系統資料表的column,這是你就需要用另外的指令碼區查詢。
select T.name,* from sys.columns C
join sys.tables T on C.object_id=T.object_id
where C.name like '%spid%'
————利用sys.system_columns 表和sys.all_objects表 查出column所在的表名
select T.name,* from sys.system_columns C 。
join sys.all_objects T on C.object_id=T.object_id
where C.name like '%spid%'
2. 獲得哪些訪問DB server的機器列表和相關登陸帳號資訊:
select P.hostname, loginame, D.name,D.status,P.status,blocked,kpid, * from
sysprocesses p left join
sysDatabases d on p.dbid=d.dbid利用上述語句,可以查到所有進程,其中hostName是訪問db server機器名, loginame是登陸帳號,blocked記錄了進程死結的數量。其中stutus有下面幾個值:
Background |
SPID 正在執行背景工作。 |
Sleeping |
SPID 當前沒有執行任務。 通常,這表示 SPID 正在等待應用程式的命令。 |
Runnable |
SPID 當前正在執行任務。 |
Dormant |
與 Sleeping 相同,但 Dormant 還表示在完成 RPC 事件後 SPID 已被重設。 重設將清除 RPC 事件期間所使用的資源。 這是個正常狀態,並且 SPID 可用,正在等待執行後續命令。 |
Rollback |
SPID 在事務的復原過程中。 |
Defwakeup |
表示 SPID 正在等待處於釋放過程中的資源。 wait resource 欄位應當表示提到的資源。 |
Spinloop |
在試圖獲得用於 SMP 系統並發控制的旋轉鎖定 (spinlock) 時進程正處於等待中。 |
比較詳細相關知識:http://blog.china-pub.com/more.asp?name=adminis&id=14012