優(yōu)惠活動(dòng) - 12周年慶本月新客福利
優(yōu)惠活動(dòng) - 12周年慶本月新客福利
優(yōu)惠活動(dòng) - 12周年慶本月新客福利

不要使用SELECT FOR UPDATE

在SELECT語(yǔ)句中聲明游標時(shí),不要使用 FOR UPDATE從句。適用情形:無(wú)論何時(shí)都適用。審查關(guān)于游標的代碼,質(zhì)疑每個(gè) SEL ECT FOR UPDATE語(yǔ)向。使用 FOR UPDATE從句會(huì )鎖定行,從而降低事務(wù)處理速度。要點(diǎn):游標是一種強大的結構,使用得當,能夠使編程更快更容易,同時(shí)還能加速事務(wù)處理。但 FOR UPDATE游標可能會(huì )長(cháng)期鎖定數據,降低事務(wù)處理速度。參考數據庫文檔,看是否需要使用 FOR READ ONIY從句,最小化鎖的數量。



如果使用得當,游標是非常強大的數據庫控制結構,利用游標可以遍歷和處理游標査詢(xún)(或操作)定義的結果集中的數據。在要指定一個(gè)數據集進(jìn)行遍歷或遍歷處理數據集中的行時(shí),游標非常有用。數據集中的數據項可以更新、刪除、修改或讀取,也可以被其他進(jìn)程査看。游標的真正強大之處在于可以作為程序設計語(yǔ)言的擴展,因為許多過(guò)程和面向對象的程序設計語(yǔ)言都沒(méi)有提供內置的管理關(guān)系數據庫的數據集的功能。在高速事務(wù)處理系統中,在SEL,ECP游標中使用 FOR UPDATE從句可能造成問(wèn)題,甚至造成死鎖。

在許多數據庫中,一旦打開(kāi)了具有 FOR UPDATE從句的游標,那么該語(yǔ)句查詢(xún)到的行都會(huì )被鎖住,直到會(huì )話(huà)中執行到了提交或回退語(yǔ)句為止。 COMMIT語(yǔ)句會(huì )保存修改, ROLLBACK語(yǔ)句會(huì )取消所有的修改。執行到這兩個(gè)語(yǔ)句中的任何一個(gè),與數據庫中的行相關(guān)的鎖都會(huì )被釋放掉。此外,執行了提交或回退語(yǔ)句后,你就會(huì )失去在游標中的位置,不能再從游標中提取記錄了。

暫停一下,你能發(fā)現游標SELECT OR UPDAI8E至少可能會(huì )造成兩個(gè)問(wèn)題嗎?第一個(gè)問(wèn)題是,游標會(huì )在執行操作時(shí)一直保留數據庫行的鎖。在許多情況下,這樣可能都是有用的,甚至在少數情況下,這樣做是不可避免的,或者是最佳方案。但是,在執行某些操作時(shí),這些鎖會(huì )使其他事務(wù)一直阻塞或等待。如果這些操作很復雜或需要花費一些時(shí)間,那么就會(huì )堆起許多待處理的事務(wù)。如果恰好這些事務(wù)是游標執行 SELECT FOR UPDATE操作要執行的,那么我們可能就會(huì )創(chuàng )建了一個(gè)等待隊列,而隊列的處理時(shí)間是用戶(hù)不能接受的。在Web環(huán)境中,讓缺乏耐心的用戶(hù)等待漫長(cháng)的響應會(huì )造成他們發(fā)起更多的請求,而這后來(lái)的請求有可能會(huì )完成得更快。結果是災難性的,我們的系統會(huì )停機,因為待處理的請求堆在數據庫端,最終會(huì )造成Web服務(wù)器占用了所有TCP端口,從而停止響應用戶(hù)。

第二個(gè)問(wèn)題前面提示過(guò),是第一個(gè)問(wèn)題造成的。必須等到之前的鎖清除了,后面的游標才能對當前鎖住的一行或多行加鎖。注意,這些鎖可能不是游標加的,它可以是用戶(hù)加的顯式鎖,也可以是 RDBMS加加的隱式鎖。數據庫中的鎖越多,事務(wù)堆積的可能性越大,雖然有些鎖是必需的。長(cháng)期保留的鎖會(huì )造成對經(jīng)常請求的數據的響應時(shí)間變慢。有些數據庫,如 Oracle,有選用的天鍵子NOWA 可以把控制權釋放

給進(jìn)程,用于執行其他的工作或在再次取得鎖之前等待。但是,如果游標必須處理某些同時(shí)發(fā)生的客戶(hù)請求,那么對用戶(hù)來(lái)說(shuō),最終結果是一樣的,就是客戶(hù)端請求都需要等待很久才能得到響應。

注意,有些網(wǎng)站制作數據庫默認會(huì )在游標中使用 FOR UPDATE從句。事實(shí)上,ANSI的SQL標準指示,任何游標都要默認使用 FOR UPDATE從句,除非它在 DECLARE語(yǔ)句中使用了 FOR READ ONLY從句。開(kāi)發(fā)人員和DBA應該參考他們的數據庫文檔,看看如何開(kāi)發(fā)鎖最少的游標。

本文地址:http://havencoinwallet.com//article/3499.html
相關(guān)文章:
最新文章:
国产免费丝袜调教视频爱剪辑|国产小受18asian|国产福利91精品一区二区三区|久久久青草大香|欧美丰满熟妇xxxx性