SQL Server異常處理怎么樣做?
Admin 2021-09-10 群英技術(shù)資訊 1282 次瀏覽
SQL Server常見的問題主要是SQL問題造成,常見的主要是CPU過高和阻塞。關(guān)于SqlServer異常處理常用步驟有哪些呢?大家了解嗎?下面小編通過本篇文章給大家介紹SqlServer異常處理常用步驟,感興趣的朋友就繼續(xù)往下看吧。
SQL Server常見的問題主要是SQL問題造成,常見的主要是CPU過高和阻塞。
一、CPU過高的問題
1、查詢系統(tǒng)動態(tài)視圖查詢執(zhí)行時間長的sql語句
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
二、阻塞問題
1、查詢系統(tǒng)動態(tài)視圖查詢阻塞的sql語句
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)自帶的存儲過程
Sp_who2和sp_lock以及使用dbcc inputbuffer(spid) 也可以用來分析阻塞
sp_who可以返回如下信息: (可選參數(shù)LoginName, 或active代表活動會話數(shù))
Spid (系統(tǒng)進程ID)
status (進程狀態(tài))
loginame (用戶登錄名)
hostname(用戶主機名)
blk (阻塞進程的SPID)
dbname (進程正在使用的數(shù)據(jù)庫名)
Cmd (當(dāng)前正在執(zhí)行的命令類型)
sp_who2除了顯示上面sp_who的輸出信息外,還顯示下面的信息: (可選參數(shù)LoginName, 或active代表活動會話數(shù))
CPUTime (進程占用的總CPU時間)
DiskIO (進程對磁盤讀的總次數(shù))
LastBatch (客戶最后一次調(diào)用存儲過程或者執(zhí)行查詢的時間)
ProgramName (用來初始化連接的應(yīng)用程序名稱,或者主機名)
下面是sp_who的用法,sp_who2與此類似
A.列出全部當(dāng)前進程
以下示例使用沒有參數(shù)的 sp_who 來報告所有當(dāng)前用戶。
USE master; GO EXEC sp_who; GO
B.列出特定用戶的進程
以下示例顯示如何通過登錄名查看有關(guān)單個當(dāng)前用戶的信息。
USE master; GO EXEC sp_who 'janetl'; GO
C.顯示所有活動進程
USE master; GO EXEC sp_who 'active'; GO
D.顯示會話 ID 標(biāo)識的特定進程
USE master; GO EXEC sp_who '10' --specifies the process_id; GO
sp_lock用法說明
sp_lock [ [ @spid1 = ] 'session ID1' ] [ , [@spid2 = ] 'session ID2' ][ ; ]
[ @spid1 = ] 'session ID1'
來自用戶想要鎖定其信息的 sys.dm_exec_sessions 的數(shù)據(jù)庫引擎會話 ID 號。 session ID1 的數(shù)據(jù)類型為 int,默認值為 NULL。 執(zhí)行 sp_who 可獲取有關(guān)該會話的進程信息。 如果未指定會話 ID1,則顯示有關(guān)所有鎖的信息。
[ @spid2 = ] 'session ID2'
來自 sys.dm_exec_sessions 的另一個數(shù)據(jù)庫引擎會話 ID 號,該會話 ID 號可能與 session ID1 同時具有鎖,并且用戶也需要其有關(guān)信息。 session ID2 的數(shù)據(jù)類型為 int,默認值為 NULL。
在 sp_lock 結(jié)果集中,由 @spid1 和 @spid2 參數(shù)指定的會話所持有的每個鎖都對應(yīng)一行。 如果既未指定 @spid1 又未指定 @spid2,則結(jié)果集將報告當(dāng)前在數(shù)據(jù)庫引擎實例中處于活動狀態(tài)的所有會話的鎖。
| 列名 |
數(shù)據(jù)類型 |
說明 |
| spid |
smallint |
請求鎖的進程的數(shù)據(jù)庫引擎會話 ID 號。 |
| dbid |
smallint |
保留鎖的數(shù)據(jù)庫的標(biāo)識號。 可以使用 DB_NAME() 函數(shù)來標(biāo)識數(shù)據(jù)庫。 |
| ObjId |
int |
持有鎖的對象的標(biāo)識號。 可以在相關(guān)數(shù)據(jù)庫中使用 OBJECT_NAME() 函數(shù)來標(biāo)識對象。 為 99 時是一種特殊情況,表示用于記錄數(shù)據(jù)庫中頁分配的其中一個系統(tǒng)頁的鎖。 |
| IndId |
smallint |
持有鎖的索引的標(biāo)識號。 |
| 類型 |
nchar(4) |
鎖的類型: |
| RID = 表中單個行的鎖,由行標(biāo)識符 (RID) 標(biāo)識。 |
||
| KEY = 索引內(nèi)保護可串行事務(wù)中一系列鍵的鎖。 |
||
| PAG = 數(shù)據(jù)頁或索引頁的鎖。 |
||
| EXT = 對某區(qū)的鎖。 |
||
| TAB = 整個表(包括所有數(shù)據(jù)和索引)的鎖。 |
||
| DB = 數(shù)據(jù)庫的鎖。 |
||
| FIL = 數(shù)據(jù)庫文件的鎖。 |
||
| APP = 指定的應(yīng)用程序資源的鎖。 |
||
| MD = 元數(shù)據(jù)或目錄信息的鎖。 |
||
| HBT = 堆或 B 樹索引的鎖。 在 SQL Server 中此信息不完整。 |
||
| AU = 分配單元的鎖。 在 SQL Server 中此信息不完整。 |
||
| Resource |
nchar(32) |
標(biāo)識被鎖定資源的值。 值的格式取決于 Type 列標(biāo)識的資源類型: |
| Type 值:Resource 值 |
||
| RID:格式為 fileid:pagenumber:rid 的標(biāo)識符,其中 fileid 標(biāo)識包含頁的文件,pagenumber 標(biāo)識包含行的頁, rid 標(biāo)識頁上的特定行。 fileid 與sys.database_files 目錄視圖中的 file_id 列相匹配。 |
||
| KEY:數(shù)據(jù)庫引擎內(nèi)部使用的十六進制數(shù)。 |
||
| PAG:格式為 fileid:pagenumber 的數(shù)字,其中 fileid 標(biāo)識包含頁的文件,pagenumber 標(biāo)識頁。 |
||
| EXT:標(biāo)識區(qū)中的第一頁的數(shù)字。 該數(shù)字的格式為 fileid:pagenumber。 |
||
| TAB:沒有提供信息,因為已在 ObjId 列中標(biāo)識了表。 |
||
| DB:沒有提供信息,因為已在 dbid 列中標(biāo)識了數(shù)據(jù)庫。 |
||
| FIL:文件的標(biāo)識符,與 sys.database_files 目錄視圖中的 file_id 列相匹配。 |
||
| APP:被鎖定的應(yīng)用程序資源的唯一標(biāo)識符。 格式為 DbPrincipleId:<資源字符串的前 2 個到 16 個字符><哈希運算值>。 |
||
| MD:隨資源類型而變化。 有關(guān)詳細信息,請參閱 sys.dm_tran_locks (Transact-SQL) 中 resource_description 列的說明。 |
||
| HBT:沒有提供任何信息。 請改用 sys.dm_tran_locks 動態(tài)管理視圖。 |
||
| AU:沒有提供任何信息。 請改用 sys.dm_tran_locks 動態(tài)管理視圖。 |
||
| 模式 |
nvarchar(8) |
所請求的鎖模式。 可以是: |
| NULL = 不授予對資源的訪問權(quán)限。 用作占位符。 |
||
| Sch-S = 架構(gòu)穩(wěn)定性。 確保在任何會話持有對架構(gòu)元素(例如表或索引)的架構(gòu)穩(wěn)定性鎖時,不刪除該架構(gòu)元素。 |
||
| Sch-M = 架構(gòu)修改。 必須由要更改指定資源架構(gòu)的任何會話持有。 確保沒有其他會話正在引用所指示的對象。 |
||
| S = 共享。 授予持有鎖的會話對資源的共享訪問權(quán)限。 |
||
| U = 更新。 指示對最終可能更新的資源獲取的更新鎖。 用于防止一種常見的死鎖, 這種死鎖在多個會話鎖定資源以便稍后對資源進行更新時發(fā)生。 |
||
| X = 排他。 授予持有鎖的會話對資源的獨占訪問權(quán)限。 |
||
| IS = 意向共享。 指示有意將 S 鎖放置在鎖層次結(jié)構(gòu)中的某個從屬資源上。 |
||
| IU = 意向更新。 指示有意將 U 鎖放置在鎖層次結(jié)構(gòu)中的某個從屬資源上。 |
||
| IX = 意向排他。 指示有意將 X 鎖放置在鎖層次結(jié)構(gòu)中的某個從屬資源上。 |
||
| SIU = 共享意向更新。 指示對有意在鎖層次結(jié)構(gòu)中的從屬資源上獲取更新鎖的資源進行共享訪問。 |
||
| SIX = 共享意向排他。 指示對有意在鎖層次結(jié)構(gòu)中的從屬資源上獲取排他鎖的資源進行共享訪問。 |
||
| UIX = 更新意向排他。 指示對有意在鎖層次結(jié)構(gòu)中的從屬資源上獲取排他鎖的資源持有的更新鎖。 |
||
| BU = 大容量更新。 用于大容量操作。 |
||
| RangeS_S = 共享鍵范圍和共享資源鎖。 指示可串行范圍掃描。 |
||
| RangeS_U = 共享鍵范圍和更新資源鎖。 指示可串行更新掃描。 |
||
| RangeI_N = 插入鍵范圍和 Null 資源鎖。 用于在將新鍵插入索引前測試范圍。 |
||
| 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 = 排他鍵范圍和排他資源鎖。 這是在更新范圍中的鍵時使用的轉(zhuǎn)換鎖。 |
||
| 狀態(tài) |
nvarchar(5) |
鎖的請求狀態(tài): |
| CNVRT:鎖正在從另一種模式進行轉(zhuǎn)換,但是轉(zhuǎn)換被另一個持有鎖(模式相沖突)的進程阻塞。 |
||
| GRANT:已獲取鎖。 |
||
| WAIT:鎖被另一個持有鎖(模式相沖突)的進程阻塞。 |
DBCC INPUTBUFFER
顯示從客戶端發(fā)送到 Microsoft? SQL Server? 的最后一個語句。
語法
DBCC INPUTBUFFER (spid)
參數(shù)
spid
是 sp_who 系統(tǒng)存儲過程的輸出中所顯示的用戶連接系統(tǒng)進程 ID (SPID)。
結(jié)果集
DBCC INPUTBUFFER 返回包含如下列的行集。
| 列名 |
數(shù)據(jù)類型 |
描述 |
| EventType |
nvarchar(30) |
事件類型,例如:RPC、語言或無事件。 |
| Parameters |
Int |
0 = 文本 |
| EventInfo |
nvarchar(255) |
對于 RPC 的 EventType,EventInfo 僅包含過程名。對于語言或無事件的 EventType,僅顯示事件的頭 255 個字符。 |
例如,當(dāng)緩沖區(qū)中的最后事件是 DBCC INPUTBUFFER(11) 時,DBCC INPUTBUFFER 將返回以下結(jié)果集。
EventType Parameters EventInfo
-------------- ---------- ---------------------
Language Event 0 DBCC INPUTBUFFER (11)
(1 row(s) affected)
關(guān)于sqlserver中異常處理的操作就介紹到這,上希望能對大家有幫助,想要了解更多SQL Server的內(nèi)容,大家可以關(guān)注群英網(wǎng)絡(luò)其它相關(guān)文章。
文本轉(zhuǎn)載自腳本之家
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:[email protected]進行舉報,并提供相關(guān)證據(jù),查實之后,將立刻刪除涉嫌侵權(quán)內(nèi)容。
猜你喜歡
sqlserver中怎么樣解決復(fù)雜查詢的問題?對于這個問題,我們可以用cte解決復(fù)雜查詢問題,下面小編就給大家分享一個使用cte解決復(fù)雜查詢問題實例,在此代碼中需要注意count函數(shù),它統(tǒng)計了一個列,如果該列在某行的值為null,將不會統(tǒng)計該行,下面跟隨小編來具體了解一下吧。
SQL RDBMS是關(guān)系數(shù)據(jù)庫管理系統(tǒng)(Relational Database Management System)的縮寫。RDBMS是SQL的基礎(chǔ),也是所有現(xiàn)代數(shù)據(jù)庫系統(tǒng)(如MS SQL Server、IBMDB2、Oracle、MySQL和MicrosoftAccess)的基礎(chǔ)。關(guān)系數(shù)據(jù)庫管理系統(tǒng)(Relational Database Management System,RDBMS)是一種基于E.F.Codd提出的關(guān)系模型的數(shù)據(jù)庫管理系統(tǒng)。
這篇文章主要介紹了SQLServer清理日志文件方法案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
SQL LAST() 函數(shù)返回指定的列中最后一個記錄的值。下文有詳解方法和實例,內(nèi)容詳細,邏輯清晰,有需要的朋友可以參考,希望大家閱讀完這篇文章后能有所收獲,那么下面就一起來了解一下吧。
這篇文章主要介紹了SQL?查詢連續(xù)n天登錄的用戶情況,本文以3天為例,通過使用mysql工具sql語句給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
推薦內(nèi)容
成為群英會員,開啟智能安全云計算之旅
立即注冊關(guān)注或聯(lián)系群英網(wǎng)絡(luò)
7x24小時售前:400-678-4567
7x24小時售后:0668-2555666
24小時QQ客服
群英微信公眾號
CNNIC域名投訴舉報處理平臺
服務(wù)電話:010-58813000
服務(wù)郵箱:[email protected]
投訴與建議:0668-2555555
Copyright ? QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版權(quán)所有
增值電信經(jīng)營許可證 : B1.B2-20140078 ICP核準(ICP備案)粵ICP備09006778號 域名注冊商資質(zhì) 粵 D3.1-20240008