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