SqlServer異常處理常用步驟
SQL Server常見(jiàn)的問(wèn)題主要是SQL問(wèn)題造成,常見(jiàn)的主要是CPU過(guò)高和阻塞。
一、CPU過(guò)高的問(wèn)題
1、查詢系統(tǒng)動(dòng)態(tài)視圖查詢執(zhí)行時(shí)間長(zhǎng)的sql語(yǔ)句
WITH ProcessCTE(blocked) AS ( SELECT spid FROM sys.sysprocesses WHERE cpu>500 ) SELECT distinct a.* FROM ( SELECT TEXT,AA.* FROM sys.sysprocesses AA CROSS APPLY sys.dm_exec_sql_text(AA.sql_handle) ) a JOIN ProcessCTE bucte WITH(NOLOCK) ON bucte.blocked=a.spid --where loginame = 'TCScenery' ORDER BY a.CPU
二、阻塞問(wèn)題
1、查詢系統(tǒng)動(dòng)態(tài)視圖查詢阻塞的sql語(yǔ)句
WITH ProcessCTE(blocked) AS ( SELECT blocked FROM sys.sysprocesses WHERE blocked>0 union SELECT blocked FROM sys.sysprocesses WHERE blocked>0 ) SELECT distinct a.* FROM ( SELECT TEXT,AA.* FROM sys.sysprocesses AA CROSS APPLY sys.dm_exec_sql_text(AA.sql_handle) ) a JOIN ProcessCTE bucte WITH(NOLOCK) ON bucte.blocked=a.spid ORDER BY a.blocked
2、使用系統(tǒng)自帶的存儲(chǔ)過(guò)程
Sp_who2和sp_lock以及使用dbcc inputbuffer(spid) 也可以用來(lái)分析阻塞
sp_who可以返回如下信息: (可選參數(shù)LoginName, 或active代表活動(dòng)會(huì)話數(shù))
Spid (系統(tǒng)進(jìn)程ID)
status (進(jìn)程狀態(tài))
loginame (用戶登錄名)
hostname(用戶主機(jī)名)
blk (阻塞進(jìn)程的SPID)
dbname (進(jìn)程正在使用的數(shù)據(jù)庫(kù)名)
Cmd (當(dāng)前正在執(zhí)行的命令類型)
sp_who2除了顯示上面sp_who的輸出信息外,還顯示下面的信息: (可選參數(shù)LoginName, 或active代表活動(dòng)會(huì)話數(shù))
CPUTime (進(jìn)程占用的總CPU時(shí)間)
DiskIO (進(jìn)程對(duì)磁盤(pán)讀的總次數(shù))
LastBatch (客戶最后一次調(diào)用存儲(chǔ)過(guò)程或者執(zhí)行查詢的時(shí)間)
ProgramName (用來(lái)初始化連接的應(yīng)用程序名稱,或者主機(jī)名)
下面是sp_who的用法,sp_who2與此類似
A.列出全部當(dāng)前進(jìn)程
以下示例使用沒(méi)有參數(shù)的 sp_who 來(lái)報(bào)告所有當(dāng)前用戶。
USE master; GO EXEC sp_who; GO
B.列出特定用戶的進(jìn)程
以下示例顯示如何通過(guò)登錄名查看有關(guān)單個(gè)當(dāng)前用戶的信息。
USE master; GO EXEC sp_who 'janetl'; GO
C.顯示所有活動(dòng)進(jìn)程
USE master; GO EXEC sp_who 'active'; GO
D.顯示會(huì)話 ID 標(biāo)識(shí)的特定進(jìn)程
USE master; GO EXEC sp_who '10' --specifies the process_id; GO
sp_lock用法說(shuō)明
sp_lock [ [ @spid1 = ] 'session ID1' ] [ , [@spid2 = ] 'session ID2' ][ ; ]
[ @spid1 = ] 'session ID1'
來(lái)自用戶想要鎖定其信息的 sys.dm_exec_sessions 的數(shù)據(jù)庫(kù)引擎會(huì)話 ID 號(hào)。 session ID1 的數(shù)據(jù)類型為 int,默認(rèn)值為 NULL。 執(zhí)行 sp_who 可獲取有關(guān)該會(huì)話的進(jìn)程信息。 如果未指定會(huì)話 ID1,則顯示有關(guān)所有鎖的信息。
[ @spid2 = ] 'session ID2'
來(lái)自 sys.dm_exec_sessions 的另一個(gè)數(shù)據(jù)庫(kù)引擎會(huì)話 ID 號(hào),該會(huì)話 ID 號(hào)可能與 session ID1 同時(shí)具有鎖,并且用戶也需要其有關(guān)信息。 session ID2 的數(shù)據(jù)類型為 int,默認(rèn)值為 NULL。
在 sp_lock 結(jié)果集中,由 @spid1 和 @spid2 參數(shù)指定的會(huì)話所持有的每個(gè)鎖都對(duì)應(yīng)一行。 如果既未指定 @spid1 又未指定 @spid2,則結(jié)果集將報(bào)告當(dāng)前在數(shù)據(jù)庫(kù)引擎實(shí)例中處于活動(dòng)狀態(tài)的所有會(huì)話的鎖。
列名 |
數(shù)據(jù)類型 |
說(shuō)明 |
spid |
smallint |
請(qǐng)求鎖的進(jìn)程的數(shù)據(jù)庫(kù)引擎會(huì)話 ID 號(hào)。 |
dbid |
smallint |
保留鎖的數(shù)據(jù)庫(kù)的標(biāo)識(shí)號(hào)。 可以使用 DB_NAME() 函數(shù)來(lái)標(biāo)識(shí)數(shù)據(jù)庫(kù)。 |
ObjId |
int |
持有鎖的對(duì)象的標(biāo)識(shí)號(hào)。 可以在相關(guān)數(shù)據(jù)庫(kù)中使用 OBJECT_NAME() 函數(shù)來(lái)標(biāo)識(shí)對(duì)象。 值為 99 時(shí)是一種特殊情況,表示用于記錄數(shù)據(jù)庫(kù)中頁(yè)分配的其中一個(gè)系統(tǒng)頁(yè)的鎖。 |
IndId |
smallint |
持有鎖的索引的標(biāo)識(shí)號(hào)。 |
類型 |
nchar(4) |
鎖的類型: |
RID = 表中單個(gè)行的鎖,由行標(biāo)識(shí)符 (RID) 標(biāo)識(shí)。 |
||
KEY = 索引內(nèi)保護(hù)可串行事務(wù)中一系列鍵的鎖。 |
||
PAG = 數(shù)據(jù)頁(yè)或索引頁(yè)的鎖。 |
||
EXT = 對(duì)某區(qū)的鎖。 |
||
TAB = 整個(gè)表(包括所有數(shù)據(jù)和索引)的鎖。 |
||
DB = 數(shù)據(jù)庫(kù)的鎖。 |
||
FIL = 數(shù)據(jù)庫(kù)文件的鎖。 |
||
APP = 指定的應(yīng)用程序資源的鎖。 |
||
MD = 元數(shù)據(jù)或目錄信息的鎖。 |
||
HBT = 堆或 B 樹(shù)索引的鎖。 在 SQL Server 中此信息不完整。 |
||
AU = 分配單元的鎖。 在 SQL Server 中此信息不完整。 |
||
Resource |
nchar(32) |
標(biāo)識(shí)被鎖定資源的值。 值的格式取決于 Type 列標(biāo)識(shí)的資源類型: |
Type 值:Resource 值 |
||
RID:格式為 fileid:pagenumber:rid 的標(biāo)識(shí)符,其中 fileid 標(biāo)識(shí)包含頁(yè)的文件,pagenumber 標(biāo)識(shí)包含行的頁(yè),rid 標(biāo)識(shí)頁(yè)上的特定行。 fileid 與sys.database_files 目錄視圖中的 file_id 列相匹配。 |
||
KEY:數(shù)據(jù)庫(kù)引擎內(nèi)部使用的十六進(jìn)制數(shù)。 |
||
PAG:格式為 fileid:pagenumber 的數(shù)字,其中 fileid 標(biāo)識(shí)包含頁(yè)的文件,pagenumber 標(biāo)識(shí)頁(yè)。 |
||
EXT:標(biāo)識(shí)區(qū)中的第一頁(yè)的數(shù)字。 該數(shù)字的格式為 fileid:pagenumber。 |
||
TAB:沒(méi)有提供信息,因?yàn)橐言?span id="ublnpf9mb" class="Apple-converted-space"> ObjId 列中標(biāo)識(shí)了表。 |
||
DB:沒(méi)有提供信息,因?yàn)橐言?span id="ublnpf9mb" class="Apple-converted-space"> dbid 列中標(biāo)識(shí)了數(shù)據(jù)庫(kù)。 |
||
FIL:文件的標(biāo)識(shí)符,與 sys.database_files 目錄視圖中的 file_id 列相匹配。 |
||
APP:被鎖定的應(yīng)用程序資源的唯一標(biāo)識(shí)符。 格式為 DbPrincipleId:<資源字符串的前 2 個(gè)到 16 個(gè)字符><哈希運(yùn)算值>。 |
||
HBT:沒(méi)有提供任何信息。 請(qǐng)改用 sys.dm_tran_locks 動(dòng)態(tài)管理視圖。 |
||
AU:沒(méi)有提供任何信息。 請(qǐng)改用 sys.dm_tran_locks 動(dòng)態(tài)管理視圖。 |
||
模式 |
nvarchar(8) |
所請(qǐng)求的鎖模式。 可以是: |
NULL = 不授予對(duì)資源的訪問(wèn)權(quán)限。 用作占位符。 |
||
Sch-S = 架構(gòu)穩(wěn)定性。 確保在任何會(huì)話持有對(duì)架構(gòu)元素(例如表或索引)的架構(gòu)穩(wěn)定性鎖時(shí),不刪除該架構(gòu)元素。 |
||
Sch-M = 架構(gòu)修改。 必須由要更改指定資源架構(gòu)的任何會(huì)話持有。 確保沒(méi)有其他會(huì)話正在引用所指示的對(duì)象。 |
||
S = 共享。 授予持有鎖的會(huì)話對(duì)資源的共享訪問(wèn)權(quán)限。 |
||
U = 更新。 指示對(duì)最終可能更新的資源獲取的更新鎖。 用于防止一種常見(jiàn)的死鎖,這種死鎖在多個(gè)會(huì)話鎖定資源以便稍后對(duì)資源進(jìn)行更新時(shí)發(fā)生。 |
||
X = 排他。 授予持有鎖的會(huì)話對(duì)資源的獨(dú)占訪問(wèn)權(quán)限。 |
||
IS = 意向共享。 指示有意將 S 鎖放置在鎖層次結(jié)構(gòu)中的某個(gè)從屬資源上。 |
||
IU = 意向更新。 指示有意將 U 鎖放置在鎖層次結(jié)構(gòu)中的某個(gè)從屬資源上。 |
||
IX = 意向排他。 指示有意將 X 鎖放置在鎖層次結(jié)構(gòu)中的某個(gè)從屬資源上。 |
||
SIU = 共享意向更新。 指示對(duì)有意在鎖層次結(jié)構(gòu)中的從屬資源上獲取更新鎖的資源進(jìn)行共享訪問(wèn)。 |
||
SIX = 共享意向排他。 指示對(duì)有意在鎖層次結(jié)構(gòu)中的從屬資源上獲取排他鎖的資源進(jìn)行共享訪問(wèn)。 |
||
UIX = 更新意向排他。 指示對(duì)有意在鎖層次結(jié)構(gòu)中的從屬資源上獲取排他鎖的資源持有的更新鎖。 |
||
BU = 大容量更新。 用于大容量操作。 |
||
RangeS_S = 共享鍵范圍和共享資源鎖。 指示可串行范圍掃描。 |
||
RangeS_U = 共享鍵范圍和更新資源鎖。 指示可串行更新掃描。 |
||
RangeI_N = 插入鍵范圍和 Null 資源鎖。 用于在將新鍵插入索引前測(cè)試范圍。 |
||
RangeI_S = 鍵范圍轉(zhuǎn)換鎖。 由 RangeI_N 和 S 鎖的重疊創(chuàng)建。 |
||
RangeI_U = 由 RangeI_N 和 U 鎖的重疊創(chuàng)建的鍵范圍轉(zhuǎn)換鎖。 |
||
RangeI_X = 由 RangeI_N 和 X 鎖的重疊創(chuàng)建的鍵范圍轉(zhuǎn)換鎖。 |
||
RangeX_S = 由 RangeI_N 和 RangeS_S 鎖的重疊創(chuàng)建的鍵范圍轉(zhuǎn)換鎖 。 |
||
RangeX_U = 由 RangeI_N 和 RangeS_U 鎖的重疊創(chuàng)建的鍵范圍轉(zhuǎn)換鎖。 |
||
RangeX_X = 排他鍵范圍和排他資源鎖。 這是在更新范圍中的鍵時(shí)使用的轉(zhuǎn)換鎖。 |
||
狀態(tài) |
nvarchar(5) |
鎖的請(qǐng)求狀態(tài): |
CNVRT:鎖正在從另一種模式進(jìn)行轉(zhuǎn)換,但是轉(zhuǎn)換被另一個(gè)持有鎖(模式相沖突)的進(jìn)程阻塞。 |
||
GRANT:已獲取鎖。 |
||
WAIT:鎖被另一個(gè)持有鎖(模式相沖突)的進(jìn)程阻塞。 |
DBCC INPUTBUFFER
顯示從客戶端發(fā)送到 Microsoft® SQL Server™ 的最后一個(gè)語(yǔ)句。
語(yǔ)法
DBCC INPUTBUFFER (spid)
參數(shù)
spid
是 sp_who 系統(tǒng)存儲(chǔ)過(guò)程的輸出中所顯示的用戶連接系統(tǒng)進(jìn)程 ID (SPID)。
結(jié)果集
DBCC INPUTBUFFER 返回包含如下列的行集。
列名 |
數(shù)據(jù)類型 |
描述 |
EventType |
nvarchar(30) |
事件類型,例如:RPC、語(yǔ)言或無(wú)事件。 |
Parameters |
Int |
0 = 文本 |
EventInfo |
nvarchar(255) |
對(duì)于 RPC 的 EventType,EventInfo 僅包含過(guò)程名。對(duì)于語(yǔ)言或無(wú)事件的 EventType,僅顯示事件的頭 255 個(gè)字符。 |
例如,當(dāng)緩沖區(qū)中的最后事件是 DBCC INPUTBUFFER(11) 時(shí),DBCC INPUTBUFFER 將返回以下結(jié)果集。
EventType Parameters EventInfo
-------------- ---------- ---------------------
Language Event 0 DBCC INPUTBUFFER (11)
(1 row(s) affected)
相關(guān)文章
由于系統(tǒng)錯(cuò)誤 126 (SQL Server),指定驅(qū)動(dòng)程序無(wú)法加載
今天下午在給客戶安裝用友T3標(biāo)準(zhǔn)版時(shí)碰到一個(gè)非常棘手的問(wèn)題,MSDE2000數(shù)據(jù)庫(kù)和用友T3軟件都安裝好了,但是打開(kāi)系統(tǒng)管理的時(shí)候提示:AUTOMATION錯(cuò)誤,然后將數(shù)據(jù)庫(kù)徹底卸載干凈,用友通T3軟件也徹底卸載干凈,重新安裝了一下,仍然是這個(gè)情況2021-03-03透明數(shù)據(jù)加密(TDE)庫(kù)的備份和還原
對(duì)于包含敏感數(shù)據(jù)的庫(kù),要實(shí)現(xiàn)備份加密。即備份文件別人拿到也不能還原和查看其中的數(shù)據(jù)2012-07-07SQL Server中Table字典數(shù)據(jù)的查詢SQL示例代碼
這篇文章主要給大家介紹了關(guān)于SQL Server中Table字典數(shù)據(jù)的查詢SQL的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-10-10sql server中的decimal或者numeric的精度問(wèn)題
在sql server中定義列的數(shù)據(jù)類型decimal時(shí)需要制定其精度和小數(shù)位數(shù)。2009-05-05SQL學(xué)習(xí)筆記三 select語(yǔ)句的各種形式小結(jié)
SQL學(xué)習(xí)筆記三 select語(yǔ)句的各種形式小結(jié),大家可以查看下select命名的使用。2011-08-08一文教會(huì)你在sqlserver中創(chuàng)建表
在使用SQL server新建數(shù)據(jù)庫(kù)后,接下來(lái)我們就需要新建表了,下面這篇文章主要給大家介紹了關(guān)于在sqlserver中創(chuàng)建表的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04SQL Server數(shù)據(jù)庫(kù)入門學(xué)習(xí)總結(jié)
經(jīng)過(guò)一段時(shí)間的學(xué)習(xí),也對(duì)數(shù)據(jù)庫(kù)有了一些認(rèn)識(shí),數(shù)據(jù)庫(kù)基本是由表,關(guān)系,操作組成;對(duì)于初學(xué)者首先要學(xué)的2012-08-08sql server 中合并某個(gè)字段值的實(shí)例
sql server 中合并某個(gè)字段值的實(shí)例,需要的朋友可以參考一下2013-03-03SQL Server數(shù)據(jù)庫(kù)中偽列及偽列的含義詳解
這篇文章主要給大家介紹了關(guān)于SQL Server數(shù)據(jù)庫(kù)中偽列及偽列含義的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-09-09