用sp_lock診斷SQL Sever的性能問題_Mssql數(shù)據(jù)庫教程
推薦:如何使用SQL Server 2008升級顧問微軟提供了SQL Server 2008升級顧問(SQL Server 2008 Upgrade Advisor,SSUA),可以在更新數(shù)據(jù)庫及相關(guān)程序前幫助用戶檢測并識別可能遇到的升級問題。該工具可以檢查SQL Server 2000和 SQL Serv
在IT 專家中有一種普遍的誤解,就是認為“鎖定是不好的東西”,你必須盡一切可能保證數(shù)據(jù)庫鎖定不會使得進程無法正常運行。為了能夠確保一個一致的數(shù)據(jù)庫環(huán)境,在對資源進行修改時,數(shù)據(jù)庫引擎必須利用一種機制來獲得對資源的獨占權(quán)。
SQL Server中也用鎖定,它們是指為了達到這種一致性,數(shù)據(jù)庫引擎用來保證每一次只有一個線程同時訪問同一個資源的對象。如果不用鎖定的話,各個進程同時進行數(shù)據(jù)修改就可能發(fā)生,這就會使數(shù)據(jù)庫處于一種不一致的狀態(tài)。這樣看來,鎖定就成了好東西;但是,你應(yīng)該以特定的方式來計劃你的應(yīng)用程序,讓涉及的鎖定的數(shù)量降到最少。在這篇文章中,我將討論一個讓你能夠分析數(shù)據(jù)庫鎖定問題的存儲過程。
找出什么被鎖定了
系統(tǒng)的反應(yīng)遲緩意味著你應(yīng)該做一些調(diào)查了。你的查找最好從測定系統(tǒng)發(fā)生鎖定的數(shù)量和頻率開始。如果你的系統(tǒng)環(huán)境處理事務(wù)性很高的話,這樣各個應(yīng)用程序爭奪資源就會很常見,從而引起鎖定。解決這些問題的關(guān)鍵就在于能夠確定被鎖定的資源和爭奪資源的進程。
sp_lock
sp_lock這個系統(tǒng)存儲過程與SQL Server 2000 打包在一起,它將使你對在你系統(tǒng)中發(fā)生的鎖定有深入的了解。這個程序會從主數(shù)據(jù)庫中的syslockinfo中返回與鎖定相關(guān)的大量信息,而主數(shù)據(jù)庫是一個包括了所有允許、轉(zhuǎn)換和等待鎖定請求信息的系統(tǒng)工作臺。
讓我們來看一下運行 sp_lock 程序之后,它會為我們提供什么信息:
EXECUTE sp_lock
在我的系統(tǒng)中,這是該存儲過程返回的內(nèi)容。sp_lock 返回的信息并不是一目了然的,要獲得有用的數(shù)據(jù),還需要做一些查找。但是,你也可以復(fù)制該存儲過程的文本,然后創(chuàng)建一個新的,從而得到關(guān)于系統(tǒng)進程的更好的解釋。(在這篇文章中,我們將集中討論sp_lock返回的數(shù)據(jù)。)
從上面的結(jié)果我們可以看到spid、dbid、objid、indid、type、resource、mode和status字段。spid是進程標(biāo)識號碼,用于識別到SQL 服務(wù)器的連接。要發(fā)現(xiàn)哪些用戶和該spid相連,你就要執(zhí)行存儲過程sp_who,并將spid作為一個參數(shù)傳輸給該程序。dbid是鎖定發(fā)生的數(shù)據(jù)庫,你可以在主數(shù)據(jù)庫中的sysdatabases表格中找到它。字段objid用來顯示在數(shù)據(jù)庫中鎖定發(fā)生所在的對象。要查看這個對象,你可以在主數(shù)據(jù)庫中的sysobjects表格中查詢指定的objid。
在以上的屏幕截圖中產(chǎn)生的單一記錄并不一定能顯示正在你的工作環(huán)境中發(fā)生的真實情況。在運行這個程序時,你想要找到500到1000個甚至更多結(jié)果。每一次你執(zhí)行sp_lock,都將有可能得到不同的結(jié)果,因為又發(fā)生了新的鎖定,而部分舊的鎖定已經(jīng)被解除了。如果你發(fā)現(xiàn)sp_lock返回的結(jié)果中,大量的結(jié)果都有著相同的spid,很有可能該進程正在進行大型的處理,同時這些鎖定可能開始阻止新事務(wù)的發(fā)生。
當(dāng)你發(fā)現(xiàn)一個spid 獲得了大量的數(shù)據(jù)庫鎖定時,這將有助于確定什么存儲過程或語句正在運行。為了達到這個目的,運行以下 DBCC 命令:
DBCC INPUTBUFFER(spid)
這個DBCC命令將返回正在EventInfo字段中運行的語句的相關(guān)信息。
一個可靠的起點
系統(tǒng)運行緩慢可能說明你的表格上有大量的鎖定。造成這些鎖定的原因較多,如某個用戶正在你的系統(tǒng)中運行一個相當(dāng)長的查詢,一個進程占用大量資源或者兩個關(guān)鍵進程爭奪同一資源,經(jīng)常造成死鎖。
一旦發(fā)現(xiàn)你認為正在減緩你系統(tǒng)速度的進程,應(yīng)該怎么辦?在大多數(shù)情況下,不能采取任何措施,只能監(jiān)控系統(tǒng)。結(jié)束這個進程并不是明智之舉,因為它包括了很多系統(tǒng)鎖定,除非你完全肯定不會有其他的負面影響。不然的話,你就應(yīng)該想辦法自動分析鎖定狀況。還有一個解決辦法就是想出一種方法,使得在一天的特定時間內(nèi),當(dāng)系統(tǒng)鎖數(shù)量達到極限時,發(fā)出通知。
你對自己的系統(tǒng)信息收集的越多,在解決問題時,你的優(yōu)勢就越大。
Tim Chapman是肯塔基州路易維爾市一家銀行的SQL Server數(shù)據(jù)庫管理員,他有超過7年的行業(yè)經(jīng)驗。
分享:看看自己掌握了多少SQL快捷鍵SQL Server數(shù)據(jù)庫快捷鍵: 書簽:清除所有書簽。 CTRL-SHIFT-F2 書簽:插入或刪除書簽(切換)。 CTRL F2 書簽:移動到下一個書簽。 F2 功能鍵 書簽:移動到上一個書簽。 SHIFT F2
- sql 語句練習(xí)與答案
- 深入C++ string.find()函數(shù)的用法總結(jié)
- SQL Server中刪除重復(fù)數(shù)據(jù)的幾個方法
- sql刪除重復(fù)數(shù)據(jù)的詳細方法
- SQL SERVER 2000安裝教程圖文詳解
- 使用sql server management studio 2008 無法查看數(shù)據(jù)庫,提示 無法為該請求檢索數(shù)據(jù) 錯誤916解決方法
- SQLServer日志清空語句(sql2000,sql2005,sql2008)
- Sql Server 2008完全卸載方法(其他版本類似)
- sql server 2008 不允許保存更改,您所做的更改要求刪除并重新創(chuàng)建以下表
- SQL Server 2008 清空刪除日志文件(瞬間日志變幾M)
- Win7系統(tǒng)安裝MySQL5.5.21圖解教程
- 將DataTable作為存儲過程參數(shù)的用法實例詳解
Mssql數(shù)據(jù)庫教程Rss訂閱編程教程搜索
Mssql數(shù)據(jù)庫教程推薦
- 如何查看并導(dǎo)出數(shù)據(jù)表中字段的注釋信息
- sql存儲過程的使用和介紹
- 淺談SQL Server 2008數(shù)據(jù)挖掘查詢?nèi)蝿?wù)
- SQL Server 2008 阻止保存要求重新創(chuàng)建表的更改問題的設(shè)置方法
- 獲取SQL Server表字段的各種屬性實例代碼
- 如何掌握SQL Server的鎖機制和鎖模式
- 解析SQL Server數(shù)據(jù)庫的組成
- SQL Server 2008網(wǎng)絡(luò)協(xié)議深入理解
- asp.net連接查詢SQL數(shù)據(jù)庫并把結(jié)果顯示在網(wǎng)頁上(2種方法)
- SQL Server 2005中的CLR集成
- 相關(guān)鏈接:
- 教程說明:
Mssql數(shù)據(jù)庫教程-用sp_lock診斷SQL Sever的性能問題
。