oracle怎么刪除字段 oracle行級(jí)鎖和表級(jí)鎖的區(qū)別?
oracle行級(jí)鎖和表級(jí)鎖的區(qū)別?1. 程序中非數(shù)據(jù)庫交互操作導(dǎo)致事務(wù)掛起將接口調(diào)用或者文件操作等這一類非數(shù)據(jù)庫交互操作嵌入在 SQL 事務(wù)代碼之中,那么整個(gè)事務(wù)很有可能因此掛起(接口不通等待超時(shí)或是
oracle行級(jí)鎖和表級(jí)鎖的區(qū)別?
1. 程序中非數(shù)據(jù)庫交互操作導(dǎo)致事務(wù)掛起
將接口調(diào)用或者文件操作等這一類非數(shù)據(jù)庫交互操作嵌入在 SQL 事務(wù)代碼之中,那么整個(gè)事務(wù)很有可能因此掛起(接口不通等待超時(shí)或是上傳下載大附件)。
2. 事務(wù)中包含性能較差的查詢 SQL
事務(wù)中存在慢查詢,導(dǎo)致同一個(gè)事務(wù)中的其他 DML 無法及時(shí)釋放占用的行鎖,引起行鎖等待。
3. 單個(gè)事務(wù)中包含大量 SQL
通常是由于在事務(wù)代碼中加入 for 循環(huán)導(dǎo)致,雖然單個(gè) SQL 運(yùn)行很快,但是 SQL 數(shù)量一大,事務(wù)就會(huì)很慢。
4. 級(jí)聯(lián)更新 SQL 執(zhí)行時(shí)間較久
這類 SQL 容易讓人產(chǎn)生錯(cuò)覺,例如:update A set ... where ...in (select B) 這類級(jí)聯(lián)更新,不僅會(huì)占用 A 表上的行鎖,也會(huì)占用 B 表上的行鎖,當(dāng) SQL 執(zhí)行較久時(shí),很容易引起 B 表上的行鎖等待。
5. 磁盤問題導(dǎo)致的事務(wù)掛起
極少出現(xiàn)的情形,比如存儲(chǔ)突然離線,SQL 執(zhí)行會(huì)卡在內(nèi)核調(diào)用磁盤的步驟上,一直等待,事務(wù)無法提交。
綜上可以看出,如果事務(wù)長(zhǎng)時(shí)間未提交,且事務(wù)中包含了 DML 操作,那么就有可能產(chǎn)生行鎖等待,引起報(bào)錯(cuò)。
平時(shí)使用oracle時(shí),為什么會(huì)鎖表?
簡(jiǎn)單地說,鎖是為了保證數(shù)據(jù)的一致性,鎖不止存在于oracle,其他數(shù)據(jù)庫一樣有,只不過機(jī)制上可能大相徑庭。至于什么樣的操作會(huì)鎖表,其實(shí)鎖的種類很多,你所說的鎖表大概說的是行級(jí)鎖——也就是事務(wù)鎖吧。比如一個(gè)update語句,被update的行上會(huì)有鎖——能阻塞其他事務(wù)對(duì)這些行進(jìn)行修改的鎖,雖然這時(shí)候這張表上也有表級(jí)鎖,但這個(gè)表級(jí)鎖并不影響其他事務(wù)對(duì)表中的其他行進(jìn)行修改,只是會(huì)阻礙對(duì)這張表的DDL操作。
oracle行級(jí)鎖和表級(jí)鎖的區(qū)別?
oracle 速度慢,很難評(píng)說,可能是因?yàn)橐韵略颍?br/>
- 對(duì)于并發(fā)訪問內(nèi)部管理數(shù)據(jù)結(jié)構(gòu)嚴(yán)謹(jǐn)性
- 和對(duì)業(yè)務(wù)數(shù)據(jù)并發(fā)訪問嚴(yán)禁性高,要求ACID,如構(gòu)建一致性讀塊,保存回滾和日志信息
- 維護(hù)各種 b-tree, bitmap index, 物化視圖等等
- 處理各種trigger
- 更新各種內(nèi)部性能統(tǒng)計(jì)
- 檢查各種配合是否到限制
- 查詢優(yōu)化器的能力,包括數(shù)據(jù)分布統(tǒng)計(jì)數(shù)據(jù)的自動(dòng)采集和利用,對(duì)于復(fù)雜SQL這個(gè)是關(guān)鍵
- 并發(fā)訪問的沖突粒度,是表級(jí)鎖,塊或頁級(jí)鎖,還是行級(jí)索,讀寫是否沖突等等,內(nèi)部數(shù)據(jù)結(jié)構(gòu)latch的應(yīng)用
- 分區(qū)能力
- 存儲(chǔ)過程支持程度,因?yàn)槭褂胹tored procedure 能顯著減低數(shù)據(jù)處理消耗