日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
Sybase數(shù)據(jù)庫(kù)死鎖的應(yīng)對(duì)策略

Sybase數(shù)據(jù)庫(kù)死鎖是常見(jiàn)的問(wèn)題,下面就為您詳細(xì)分析Sybase數(shù)據(jù)庫(kù)死鎖的原因,并給出Sybase數(shù)據(jù)庫(kù)死鎖的解決方法,希望對(duì)您能有所啟迪。

創(chuàng)新互聯(lián)公司專(zhuān)注于企業(yè)營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、網(wǎng)站重做改版、安福網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5建站、商城系統(tǒng)網(wǎng)站開(kāi)發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性?xún)r(jià)比高,為安福等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。

Sybase數(shù)據(jù)庫(kù)死鎖的發(fā)生對(duì)系統(tǒng)的性能和吞吐量都有重要影響,經(jīng)檢測(cè)發(fā)現(xiàn),管理信息系統(tǒng)的死鎖主要是因?yàn)閮蓚€(gè)或多個(gè)線程(登錄)搶占同一表數(shù)據(jù)資源。引起長(zhǎng)時(shí)間搶占同一資源不是因?yàn)槲覀冃枰幚淼氖聞?wù)太復(fù)雜,時(shí)間太長(zhǎng),而往往是因?yàn)槲覀冊(cè)谇岸藨?yīng)用程序?qū)?shù)據(jù)庫(kù)作操作時(shí)忘了提交.本文介紹一種處理解決這種死鎖的方法。

Sybase封鎖原理

數(shù)據(jù)共享與數(shù)據(jù)一致性是一對(duì)不可調(diào)和的矛盾,為了達(dá)到數(shù)據(jù)共享與數(shù)據(jù)一致,必須進(jìn)行并發(fā)控制。并發(fā)控制的任務(wù)就是為了避免共享沖突而引起的數(shù)據(jù)不一致。Sybase SQL Server并發(fā)控制的方法是加鎖機(jī)制(LOCKING).

鎖的類(lèi)型 可申請(qǐng)的鎖
已有的鎖
 S
 U
 X
 
S
 ∨
 ∨
 ×
 
U
 ∨
 ×
 ×
 
X
 ×
 ×
 ×
 
Sybase SQL Server有三種封鎖類(lèi)型:排它鎖(exclusive lock,簡(jiǎn)稱(chēng)X鎖);共享鎖(share lock,簡(jiǎn)稱(chēng)S鎖);更新鎖(update lock,簡(jiǎn)稱(chēng)U鎖)。這三種鎖的相容矩陣表如下:
×:表示不兼容?!牛罕硎炯嫒?。 Sybase SQL Server是自動(dòng)決定加鎖類(lèi)型的。一般來(lái)說(shuō),讀(SELECT)操作使用S鎖,寫(xiě)(UPDATE,INSERT和delete)操作使用X鎖。U鎖是建立在頁(yè)級(jí)上的,它在一個(gè)更新操作開(kāi)始時(shí)獲得,當(dāng)要修改這些頁(yè)時(shí),U鎖會(huì)升級(jí)為X鎖。

Sybase數(shù)據(jù)庫(kù)死鎖的力度
SQL Server有兩級(jí)鎖:頁(yè)鎖和表鎖。通常頁(yè)鎖比表鎖的限制更少(或更?。?。頁(yè)鎖對(duì)本頁(yè)的所有行進(jìn)行鎖定,而表鎖則鎖定整個(gè)表。為了減小用戶間的數(shù)據(jù)爭(zhēng)用和改進(jìn)并發(fā)性,SQL Server試圖盡可能地使用頁(yè)鎖。
當(dāng)SQL Server決定一個(gè)語(yǔ)句將訪問(wèn)整個(gè)表或表的大多數(shù)頁(yè)時(shí),它用表鎖來(lái)提供更有效的鎖定。鎖定策略直接受查詢(xún)方案約束,如果update或delete語(yǔ)句沒(méi)有可用的索引,它就執(zhí)行表掃描或請(qǐng)求一個(gè)表鎖定。如果update或delete語(yǔ)句使用了索引,它就通過(guò)請(qǐng)求頁(yè)鎖來(lái)開(kāi)始,如果影響到大多數(shù)行,它就要請(qǐng)求表鎖。一旦一個(gè)語(yǔ)句積累的頁(yè)鎖超過(guò)鎖提升閾值,SQL Server就設(shè)法給該對(duì)象分配一個(gè)表鎖。如果成功了,頁(yè)鎖就不再必要了,因此被釋放。表鎖也在頁(yè)層提供避免鎖沖突的方法。對(duì)于有些命令SQL Server自動(dòng)使用表鎖。

Sybase數(shù)據(jù)庫(kù)死鎖的狀態(tài)
SQL SERVER加鎖有三種狀態(tài):
1)意向鎖(intend)—是一種表級(jí)鎖,它表示在一個(gè)數(shù)據(jù)頁(yè)上獲得一個(gè)S或X鎖的意向。意向鎖可以防止其他事務(wù)在該數(shù)據(jù)頁(yè)的表上獲得排它鎖。
2)阻塞(blocking,簡(jiǎn)記blk)—它表明目前加鎖進(jìn)程的狀態(tài),帶有blk后綴的鎖說(shuō)明該進(jìn)程目前正阻塞另一個(gè)需要獲得鎖的進(jìn)程,只有這一進(jìn)程完成,其他進(jìn)程才可以進(jìn)行。
3)需求鎖(demand)—表示此時(shí)該進(jìn)程企圖得到一個(gè)排它鎖。它可以防止在這一表或頁(yè)上加過(guò)多的S鎖,她表示某一事務(wù)是下一個(gè)去鎖定該表和該頁(yè)的事務(wù)。
需求鎖是一個(gè)內(nèi)部過(guò)程,因此用sp_lock是無(wú)法看見(jiàn)的。

死鎖DEADLOCK
簡(jiǎn)單地說(shuō),有兩個(gè)用戶進(jìn)程,每個(gè)進(jìn)程都在一個(gè)單獨(dú)的頁(yè)或表上有一個(gè)鎖,而且每個(gè)進(jìn)程都想在對(duì)方進(jìn)程的頁(yè)或表上請(qǐng)求不相容鎖時(shí)就會(huì)發(fā)生“死鎖”。在這種情況下,***個(gè)進(jìn)程在等待另一進(jìn)程釋放鎖,但另一進(jìn)程要等到***個(gè)進(jìn)程的對(duì)象釋放時(shí)才會(huì)釋放自己的鎖。
SQL Server檢查是否死鎖,并終止事務(wù)中CPU時(shí)間積累最小的用戶(即***進(jìn)入的用戶)。SQL Server回滾該用戶的事務(wù),并用消息號(hào)1205通知有此死鎖行為的應(yīng)用程序,然后允許其他用戶進(jìn)程繼續(xù)進(jìn)行。
在多用戶情形下,每個(gè)用戶的應(yīng)用程序都應(yīng)檢查每個(gè)修改數(shù)據(jù)的事務(wù)是否有1205號(hào)消息,以此確定是否有可能死鎖。消息號(hào)1025表示該用戶的事務(wù)因死鎖而終止并被回滾。應(yīng)用程序必須重新開(kāi)始這個(gè)事務(wù)處理。

查找死鎖原因

既然管理信息系統(tǒng)長(zhǎng)時(shí)間死鎖的原因是由于我們提交或者是提交不當(dāng),那么我們就可以通過(guò)修改程序防止出現(xiàn)死鎖。定位死鎖出錯(cuò)處主要經(jīng)過(guò)以下三步:
1)在死鎖出現(xiàn)時(shí),用SP_WHO,SP_LOCK獲得進(jìn)程與鎖的活動(dòng)情況。
2)結(jié)合庫(kù)表sysobjects和相應(yīng)的操作員信息表查出被鎖的庫(kù)表與鎖住別人的操作員。
3)根據(jù)鎖定的庫(kù)表與操作員的崗位,可以估計(jì)出程序大約出錯(cuò)處。詢(xún)問(wèn)操作員在死鎖時(shí)執(zhí)行的具體操作即可完全定位出錯(cuò)處。***查找程序并修改之。

用sp_who獲取關(guān)于被阻礙進(jìn)程的信息
系統(tǒng)過(guò)程sp_who給出系統(tǒng)進(jìn)程的報(bào)告。如果用戶的命令正被另一進(jìn)程保持的鎖阻礙,則:
◆status列顯示“l(fā)ock sleep”。
◆blk列顯示保持該鎖或這些鎖的進(jìn)程標(biāo)識(shí),即被誰(shuí)鎖定了。
◆loginame列顯示登錄操作員。結(jié)合相應(yīng)的操作員信息表,便可知道操作員是誰(shuí)。
Fid spid status loginame origname blk dbname cmd
0 1 lock sleep lm lm 18 QJYD SELECT
0 2 sleeping NULL NULL 0 master NETWORK HANDLER
0 3 sleeping NULL NULL 0 master NETWORK HANDLER
……

用sp_lock瀏覽鎖
要得到關(guān)于當(dāng)前SQL Server上保持的鎖的報(bào)告,可用系統(tǒng)過(guò)程sp_lock [spid1[,spid2]],spid1,spid2是表master.dbo.sysprocesses中的sql server進(jìn)程id號(hào),用sp_who可以得到鎖定與被鎖定的spid號(hào):
◆locktype列顯示加鎖的類(lèi)型和封鎖的粒度,有些鎖的后綴還帶有blk表明鎖的狀態(tài)。前綴表明鎖的類(lèi)型:Sh—共享鎖,Ex—排它鎖或更新鎖,中間表明鎖死在表上(”table”或’intent’)還是在頁(yè)上(page). 后綴“blk”表明該進(jìn)程正在障礙另一個(gè)需要請(qǐng)求鎖的進(jìn)程。一旦正在障礙的進(jìn)程一結(jié)束,其他進(jìn)程就向前移動(dòng)?!癲emand”后綴表明當(dāng)前共享鎖一釋放, 該進(jìn)程就申請(qǐng)互斥鎖。
◆table_id列顯示表的id號(hào),結(jié)合sysobjects即可查出被封鎖的表名。
執(zhí)行該進(jìn)程后屏幕顯示

Fid Spid locktype table_id page row dbname Class context
0 1 Sh_intent 678293476 0 0 QJYD Non Cursor LockFam dur
0 1 Sh_page 678293476 31764 0 QJYD Non Cursor Lock
0 18 Ex_intent 9767092 0 0 QJYD Non Cursor LockFam dur
……

定位出錯(cuò)處
根據(jù)sp_who與sp_lock命令的結(jié)果,結(jié)合sysobjects和相應(yīng)的操作員信息表。得到操作員及其在死鎖時(shí)所操作的庫(kù)表,便大約可以知道應(yīng)用程序的出錯(cuò)處,再詢(xún)問(wèn)操作員在死鎖時(shí)執(zhí)行什么操作以進(jìn)一步認(rèn)證。***查找程序并修正之。


文章名稱(chēng):Sybase數(shù)據(jù)庫(kù)死鎖的應(yīng)對(duì)策略
本文網(wǎng)址:http://www.dlmjj.cn/article/dppiphd.html