久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

SqlServer中怎么實現異常處理

170次閱讀
沒有評論

共計 4431 個字符,預計需要花費 12 分鐘才能閱讀完成。

SqlServer 中怎么實現異常處理,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

SQL Server 常見的問題主要是 SQL 問題造成,常見的主要是 CPU 過高和阻塞。

一、CPU 過高的問題

1、查詢系統動態視圖查詢執行時間長的 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、查詢系統動態視圖查詢阻塞的 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、使用系統自帶的存儲過程

Sp_who2 和 sp_lock 以及使用 dbcc inputbuffer(spid) 也可以用來分析阻塞

sp_who 可以返回如下信息:(可選參數 LoginName, 或 active 代表活動會話數)Spid (系統進程 ID)status (進程狀態)loginame (用戶登錄名)hostname(用戶主機名)blk (阻塞進程的 SPID)dbname (進程正在使用的數據庫名)Cmd (當前正在執行的命令類型)

sp_who2 除了顯示上面 sp_who 的輸出信息外,還顯示下面的信息:(可選參數 LoginName, 或 active 代表活動會話數)CPUTime (進程占用的總 CPU 時間)DiskIO (進程對磁盤讀的總次數)LastBatch (客戶最后一次調用存儲過程或者執行查詢的時間)ProgramName (用來初始化連接的應用程序名稱,或者主機名)

下面是 sp_who 的用法,sp_who2 與此類似

A. 列出全部當前進程

以下示例使用沒有參數的 sp_who 來報告所有當前用戶。

USE master;GOEXEC sp_who;GO

B. 列出特定用戶的進程

以下示例顯示如何通過登錄名查看有關單個當前用戶的信息。

USE master;GOEXEC sp_who  janetl GO

C. 顯示所有活動進程

USE master;GOEXEC sp_who  active GO

D. 顯示會話 ID 標識的特定進程

USE master;GOEXEC 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 的數據庫引擎會話 ID 號。session ID1 的數據類型為 int,默認值為 NULL。執行 sp_who 可獲取有關該會話的進程信息。如果未指定會話 ID1,則顯示有關所有鎖的信息。

[@spid2 =] session ID2

來自 sys.dm_exec_sessions 的另一個數據庫引擎會話 ID 號,該會話 ID 號可能與 session ID1 同時具有鎖,并且用戶也需要其有關信息。session ID2 的數據類型為 int,默認值為 NULL。

在 sp_lock 結果集中,由 @spid1 和 @spid2 參數指定的會話所持有的每個鎖都對應一行。如果既未指定 @spid1 又未指定 @spid2,則結果集將報告當前在數據庫引擎實例中處于活動狀態的所有會話的鎖。

列名

數據類型

說明

spid

smallint

請求鎖的進程的數據庫引擎會話 ID 號。

dbid

smallint

保留鎖的數據庫的標識號。可以使用 DB_NAME() 函數來標識數據庫。

ObjId

int

持有鎖的對象的標識號。可以在相關數據庫中使用 OBJECT_NAME() 函數來標識對象。值為 99 時是一種特殊情況,表示用于記錄數據庫中頁分配的其中一個系統頁的鎖。

IndId

smallint

持有鎖的索引的標識號。

類型

nchar(4)

鎖的類型:

RID = 表中單個行的鎖,由行標識符 (RID) 標識。

KEY = 索引內保護可串行事務中一系列鍵的鎖。

PAG = 數據頁或索引頁的鎖。

EXT = 對某區的鎖。

TAB = 整個表(包括所有數據和索引)的鎖。

DB = 數據庫的鎖。

FIL = 數據庫文件的鎖。

APP = 指定的應用程序資源的鎖。

MD = 元數據或目錄信息的鎖。

HBT = 堆或 B 樹索引的鎖。在 SQL Server 中此信息不完整。

AU = 分配單元的鎖。在 SQL Server 中此信息不完整。

Resource

nchar(32)

標識被鎖定資源的值。值的格式取決于 Type 列標識的資源類型:

Type 值:Resource 值

RID:格式為 fileid:pagenumber:rid 的標識符,其中 fileid 標識包含頁的文件,pagenumber 標識包含行的頁,rid 標識頁上的特定行。fileid 與 sys.database_files 目錄視圖中的 file_id 列相匹配。

KEY:數據庫引擎內部使用的十六進制數。

PAG:格式為 fileid:pagenumber 的數字,其中 fileid 標識包含頁的文件,pagenumber 標識頁。

EXT:標識區中的第一頁的數字。該數字的格式為 fileid:pagenumber。

TAB:沒有提供信息,因為已在 ObjId 列中標識了表。

DB:沒有提供信息,因為已在 dbid 列中標識了數據庫。

FIL:文件的標識符,與 sys.database_files 目錄視圖中的 file_id 列相匹配。

APP:被鎖定的應用程序資源的唯一標識符。格式為 DbPrincipleId: 資源字符串的前 2 個到 16 個字符 哈希運算值。

MD:隨資源類型而變化。有關詳細信息,請參閱 sys.dm_tran_locks (Transact-SQL) 中 resource_description 列的說明。

HBT:沒有提供任何信息。請改用 sys.dm_tran_locks 動態管理視圖。

AU:沒有提供任何信息。請改用 sys.dm_tran_locks 動態管理視圖。

模式

nvarchar(8)

所請求的鎖模式。可以是:

NULL = 不授予對資源的訪問權限。用作占位符。

Sch-S = 架構穩定性。確保在任何會話持有對架構元素(例如表或索引)的架構穩定性鎖時,不刪除該架構元素。

Sch-M = 架構修改。必須由要更改指定資源架構的任何會話持有。確保沒有其他會話正在引用所指示的對象。

S = 共享。授予持有鎖的會話對資源的共享訪問權限。

U = 更新。指示對最終可能更新的資源獲取的更新鎖。用于防止一種常見的死鎖,這種死鎖在多個會話鎖定資源以便稍后對資源進行更新時發生。

X = 排他。授予持有鎖的會話對資源的獨占訪問權限。

IS = 意向共享。指示有意將 S 鎖放置在鎖層次結構中的某個從屬資源上。

IU = 意向更新。指示有意將 U 鎖放置在鎖層次結構中的某個從屬資源上。

IX = 意向排他。指示有意將 X 鎖放置在鎖層次結構中的某個從屬資源上。

SIU = 共享意向更新。指示對有意在鎖層次結構中的從屬資源上獲取更新鎖的資源進行共享訪問。

SIX = 共享意向排他。指示對有意在鎖層次結構中的從屬資源上獲取排他鎖的資源進行共享訪問。

UIX = 更新意向排他。指示對有意在鎖層次結構中的從屬資源上獲取排他鎖的資源持有的更新鎖。

BU = 大容量更新。用于大容量操作。

RangeS_S = 共享鍵范圍和共享資源鎖。指示可串行范圍掃描。

RangeS_U = 共享鍵范圍和更新資源鎖。指示可串行更新掃描。

RangeI_N = 插入鍵范圍和 Null 資源鎖。用于在將新鍵插入索引前測試范圍。

RangeI_S = 鍵范圍轉換鎖。由 RangeI_N 和 S 鎖的重疊創建。

RangeI_U = 由 RangeI_N 和 U 鎖的重疊創建的鍵范圍轉換鎖。

RangeI_X = 由 RangeI_N 和 X 鎖的重疊創建的鍵范圍轉換鎖。

RangeX_S = 由 RangeI_N 和 RangeS_S 鎖的重疊創建的鍵范圍轉換鎖。

RangeX_U = 由 RangeI_N 和 RangeS_U 鎖的重疊創建的鍵范圍轉換鎖。

RangeX_X = 排他鍵范圍和排他資源鎖。這是在更新范圍中的鍵時使用的轉換鎖。

狀態

nvarchar(5)

鎖的請求狀態:

CNVRT:鎖正在從另一種模式進行轉換,但是轉換被另一個持有鎖(模式相沖突)的進程阻塞。

GRANT:已獲取鎖。

WAIT:鎖被另一個持有鎖(模式相沖突)的進程阻塞。

DBCC INPUTBUFFER

顯示從客戶端發送到 Microsoft reg; SQL Server? 的最后一個語句。

語法

DBCC INPUTBUFFER (spid)

參數

spid

是 sp_who 系統存儲過程的輸出中所顯示的用戶連接系統進程 ID (SPID)。

結果集

DBCC INPUTBUFFER 返回包含如下列的行集。

列名

數據類型

描述

EventType

nvarchar(30)

事件類型,例如:RPC、語言或無事件。

Parameters

Int

0 = 文本      1- n = 參數

EventInfo

nvarchar(255)

對于 RPC 的 EventType,EventInfo 僅包含過程名。對于語言或無事件的 EventType,僅顯示事件的頭 255 個字符。

例如,當緩沖區中的最后事件是 DBCC INPUTBUFFER(11) 時,DBCC INPUTBUFFER 將返回以下結果集。

EventType Parameters EventInfo ————– ———- ———————Language Event 0 DBCC INPUTBUFFER (11)(1 row(s) affected)

看完上述內容,你們掌握 SqlServer 中怎么實現異常處理的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注丸趣 TV 行業資訊頻道,感謝各位的閱讀!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-03發表,共計4431字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 昌平区| 沛县| 呼图壁县| 贵定县| 景东| 德令哈市| 福海县| 大埔区| 太保市| 丹江口市| 辉县市| 平江县| 兴化市| 滨海县| 肃南| 徐汇区| 舒城县| 赫章县| 哈尔滨市| 乐亭县| 恩平市| 迁西县| 常德市| 山阳县| 杭锦旗| 平湖市| 隆回县| 新乡县| 荥经县| 旅游| 舒兰市| 佳木斯市| 贵德县| 巍山| 镇远县| 大渡口区| 沂源县| 辽宁省| 南郑县| 烟台市| 定兴县|