用 Transact-SQL 語句監視

kitesky發表於2005-07-28

SQL Server 提供一些 Transact-SQL 語句和系統儲存過程,用於對 SQL Server 例項進行特殊監視。當想要快速檢視有關伺服器效能和活動的資訊時,可以使用這些語句。

[@more@]

1. 檢視當前的鎖

語法

sp_lock [[@spid1 =] 'spid1'] [,[@spid2 =] 'spid2']

引數

[@spid1 =] 'spid1'

是來自 master.dbo.sysprocesses Microsoft® SQL Server™ 程式 ID 號。spid1 的資料型別為 int,預設值為 NULL。執行 sp_who 可獲取有關該鎖的程式資訊。如果沒有指定 spid1,則顯示所有鎖的資訊。

[@spid2 =] 'spid2'

是用於檢查鎖資訊的另一個 SQL Server 程式 ID 號。spid2 的資料型別為 int,預設設定為 NULLspid2 為可以與 spid1 同時擁有鎖的另一個 spid,使用者還可獲取有關它的資訊。

說明 sp_who 可含有 0 個、1 個或 2 個引數。這些引數確定儲存過程是顯示全部、1 個還是 2 spid 程式的鎖定資訊。

許可權

執行許可權預設授予 public 角色。

示例

A. 列出所有鎖

下面的示例顯示 SQL Server 中當前持有的所有鎖的資訊。

USE master

EXEC sp_lock

B. 列出單個伺服器程式的鎖

下例顯示程式 ID 53 的資訊(其中包括鎖資訊)。

USE master

EXEC sp_lock 53

鎖的型別:

DB:資料庫
FIL
:檔案
IDX
:索引
PG
:頁
KEY
:鍵
TAB
:表
EXT
:擴充套件盤區
RID
:行識別符號

鎖的請求狀態 :

GRANT
WAIT
CNVRT

2. 檢視當前使用者活動

語法

sp_who [[@login_name =] 'login']

SQL Server 2000 保留從 1 50 SPID 值以便內部使用,而 51 或更大的 SPID 值則代表使用者會話。

許可權

執行許可權預設授予 public 角色。

示例

A. 列出全部當前程式

此示例使用沒有引數的 sp_who 報告所有當前使用者。

USE master

EXEC sp_who

下面是結果集:

spid ecid status loginame hostname blk dbname cmd

---- ---- ------ ------------ -------- --- ------ -----

1 0 background sa 0 pubs LAZY WRITER

2 0 sleeping sa 0 pubs LOG WRITER

3 0 background sa 0 master SIGNAL HANDLER

4 0 background sa 0 pubs RA MANAGER

5 0 background sa 0 master TASK MANAGER

6 0 sleeping sa 0 pubs CHECKPOINT SLEEP

7 0 background sa 0 master TASK MANAGER

8 0 background sa 0 master TASK MANAGER

9 0 background sa 0 master TASK MANAGER

10 0 background sa 0 master TASK MANAGER

11 0 background sa 0 master TASK MANAGER

51 0 runnable DOMAINloginX serverX 0 Nwind BACKUP DATABASE

51 2 runnable DOMAINloginX serverX 0 Nwind BACKUP DATABASE

51 1 runnable DOMAINloginX serverX 0 Nwind BACKUP DATABASE

52 0 sleeping DOMAINloginX serverX 0 master AWAITING COMMAND

53 0 runnable DOMAINloginX serverX 0 pubs SELECT

(16 row(s) affected)

B. 列出特定使用者的程式

此示例顯示如何透過登入名檢視有關單個當前使用者的資訊。

USE master

EXEC sp_who 'janetl'

C. 顯示所有活動程式

USE master

EXEC sp_who 'active'

D. 透過程式 ID 顯示特定程式

USE master

EXEC sp_who '10' --specifies the process_id

3. 檢視使用者上次提交的批命令

語法

DBCC INPUTBUFFER (spid)

許可權

DBCC INPUTBUFFER 許可權預設授予 sysadmin 固定伺服器角色的成員,該成員可以看到任何 SPID。其他使用者可以看到自己擁有的 SPID。許可權不可轉讓。

4. 檢視錶或資料庫使用的資料空間

顯示行數、保留的磁碟空間以及當前資料庫中的表所使用的磁碟空間,或顯示由整個資料庫保留和使用的磁碟空間。

許可權

執行許可權預設授予 public 角色。

語法

sp_spaceused [[@objname =] 'objname']
[,[@updateusage =] 'updateusage']

引數

[@objname =] 'objname'

是為其請求空間使用資訊(保留和已分配的空間)的表名。objname 的資料型別是 nvarchar(776),預設設定為 NULL

[@updateusage =] 'updateusage'

表示應在資料庫內(未指定 objname 時)還是在特定的物件上(指定 objname 時)執行 DBCC UPDATEUSAGE。值可以是 true falseupdateusage 的資料型別是 varchar(5),預設設定為 FALSE

示例

A. 有關表的空間資訊

下例報告為 titles 表分配(保留)的空間量、資料使用的空間量、索引使用的空間量以及由資料庫物件保留的未用空間量。

USE pubs

EXEC sp_spaceused 'titles'

B. 有關整個資料庫的已更新空間資訊

下例概括當前資料庫使用的空間並使用可選引數 @updateusage

USE pubs

sp_spaceused @updateusage = 'TRUE'

註釋

sp_spaceused 計算資料和索引使用的磁碟空間量以及當前資料庫中的表所使用的磁碟空間量。如果沒有給定 objnamesp_spaceused 則報告整個當前資料庫所使用的空間。

當指定 updateusage 時,Microsoft® SQL Server™ 掃描資料庫中的資料頁,並就每個表使用的儲存空間對 sysindexes 表作出任何必要的糾正。例如會出現這樣一些情況:當除去索引後,表的 sysindexes 資訊可能不是當前的。該程式在大表或資料庫上可能要花一些時間執行。只有當懷疑所返回的值不正確,而且該程式對資料庫中的其它使用者或程式沒有負面影響時,才應使用該程式。如果首選該程式,則可以單獨執行 DBCC UPDATEUSAGE

5. 檢視事務日誌使用的空間

語法

DBCC SQLPERF ( LOGSPACE )

許可權

DBCC SQLPERF 對任何使用者預設許可權。

示例

下例顯示當前安裝的所有資料庫的 LOGSPACE 資訊。

DBCC SQLPERF(LOGSPACE)

GO

下面是結果集:

Database Name Log Size (MB) Log Space Used (%) Status

------------- ------------- ------------------ -----------

pubs 1.99219 4.26471 0

msdb 3.99219 17.0132 0

tempdb 1.99219 1.64216 0

model 1.0 12.7953 0

master 3.99219 14.3469 0

6. 檢視資料庫中時間最久的活動事務(包括複製的事務)

許可權

DBCC OPENTRAN 許可權預設授予 sysadmin 固定伺服器角色或 db_owner 固定資料庫角色的成員且不可轉讓。

語法

DBCC OPENTRAN
( { 'database_name' | database_id} )
[ WITH TABLERESULTS
[ , NO_INFOMSGS ]
]

示例

下例獲得當前資料庫和 pubs 資料庫的事務資訊。

-- Display transaction information only for the current database.

DBCC OPENTRAN

GO

-- Display transaction information for the pubs database.

DBCC OPENTRAN('pubs')

GO

7. 檢視I/O、記憶體和網路吞吐量的效能資訊

sysperfinfo

8. 檢視過程快取記憶體的使用情況

許可權

DBCC PROCCACHE 許可權預設授予 sysadmin 固定伺服器角色或 db_owner 固定資料庫角色的成員且不可轉讓。

語法

DBCC PROCCACHE

註釋:

num proc buffs:過程快取記憶體中可能有的儲存過程數。

num proc buffs used 容納儲存過程的快取記憶體槽數。

num proc buffs active 容納正在執行的儲存過程的快取記憶體槽數。

proc cache size 過程快取記憶體的總大小。

proc cache used 容納儲存過程的過程快取記憶體量。

proc cache active 容納正在執行的儲存過程的過程快取記憶體量。

9. 檢視 SQL Server 活動和使用的常規統計資訊

CPU 用於執行 SQL Server 操作的時間,或 SQL Server 用於執行 I/O 操作的時間,SQL Server 讀寫取的次數以及讀取和寫入時遇到的錯誤數

許可權

執行許可權預設賦予 sysadmin 固定伺服器角色的成員。

示例

下面的示例報告有關 SQL Server 繁忙程度的資訊。

USE master

EXEC sp_monitor

10. 終止程式

語法

KILL {spid | UOW} [WITH STATUSONLY]

使用 @@SPID 可顯示當前會話的 SPID 值。

許可權

預設情況下,sysadmin processadmin 固定資料庫角色的成員具有 KILL 的預設許可權,KILL 許可權不可轉讓。

示例

A. 使用 KILL 終止 SPID

下面的示例顯示如何終止 SPID 53

KILL 53

B. 使用 KILL spid WITH STATUSONLY 獲得進度報告。

下面的示例為特定的 spid 生成回滾程式的狀態。

KILL 54

KILL 54 WITH STATUSONLY

--This is the progress report.

spid 54: Transaction rollback in progress. Estimated rollback completion: 80% Estimated time left: 10 seconds.

C. 使用 KILL 終止孤立的分散式事務。

下例說明如何使用 UOW = D5499C66-E398-45CA-BF7E-DC9C194B48CF 終止孤立 (SPID = -2) 事務。

KILL 'D5499C66-E398-45CA-BF7E-DC9C194B48CF'

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/66009/viewspace-803282/,如需轉載,請註明出處,否則將追究法律責任。

相關文章