postgresql事務(wù)處理與并發(fā)控制-創(chuàng)新互聯(lián)

postgresql事務(wù)處理與并發(fā)控制:

專注于為中小企業(yè)提供做網(wǎng)站、網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)龍文免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上1000+企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

事務(wù)是postgresql中的基本工作單元,是用戶定義的一個(gè)數(shù)據(jù)庫(kù)操作序列。這些操作要么全做,要么全不做,是一個(gè)不可分割的工作單位。

在postgresql中,事務(wù)管理器負(fù)責(zé)管理事務(wù)運(yùn)行的模塊(模塊有:鎖管理器和日志管理器)

事務(wù)管理器是事務(wù)系統(tǒng)的中樞,通過(guò)接受信息,處理下一步的事務(wù)操作。

 鎖管理器主要提供事務(wù)的寫(xiě)階段并發(fā)控制所需的 各種鎖,從而保證事務(wù)的各種隔離級(jí)別。

 日志管理器主要記錄事務(wù)執(zhí)行的狀態(tài)和數(shù)據(jù)的變化過(guò)程。

事務(wù)開(kāi)始后,事務(wù)中的所有操作都會(huì)寫(xiě)到事務(wù)日志中。寫(xiě)到日志中的事務(wù)一般有兩種:一種是針對(duì)數(shù)據(jù)的操作,如插入、修改和刪除,這些操作的對(duì)象是大量的數(shù)據(jù);另一種是針對(duì)任務(wù)的操作,例如創(chuàng)建索引。當(dāng)取消這些事務(wù)操作時(shí),系統(tǒng)自動(dòng)執(zhí)行這種操作的反操作,保證系統(tǒng)的一致性。系統(tǒng)自動(dòng)生成一個(gè)檢查點(diǎn)機(jī)制。這個(gè)檢查點(diǎn)周期地檢查事務(wù)日志,如果在事務(wù)日志中,事務(wù)全部完成,檢查點(diǎn)事務(wù)日志中的事務(wù)就提交到數(shù)據(jù)庫(kù) 中,并且在事務(wù)日志中做一個(gè)檢查點(diǎn)提交表示。如果在事務(wù)日志中,事務(wù)沒(méi)有完成,檢查點(diǎn)就不會(huì)講事務(wù)日志中的事務(wù)提交到數(shù)據(jù)庫(kù)中,并會(huì)在事務(wù)日志中做一個(gè)檢查點(diǎn)未提交的標(biāo)識(shí)。事務(wù)的恢復(fù)及檢查點(diǎn)保證了系統(tǒng)的完整和可恢復(fù)。

1、事務(wù)的屬性

  事務(wù)是作為單個(gè)邏輯工作單元執(zhí)行的一系列操作。一個(gè)邏輯工作單位必須有4個(gè)屬性,即原子性、一致性、隔離性和持久性屬性,簡(jiǎn)稱ACID屬性,只有這樣才能成為一個(gè)事務(wù)。

 原子性:事務(wù)必須是原子工作單元;對(duì)于數(shù)據(jù)修改,要么全都執(zhí)行,要么全都不執(zhí)行。

 一致性:事務(wù)在完成時(shí),必須使所有的數(shù)據(jù)都保持一致。

 隔離性:由并發(fā)事務(wù)所做的修改必須與任何其他并發(fā)事務(wù)所做的修改隔離。事務(wù)識(shí)別數(shù)據(jù)時(shí)數(shù)據(jù)所處的狀態(tài)要么是第二個(gè)并發(fā)事務(wù)修改之前的狀態(tài),要么是第二個(gè)事務(wù)修改之后的狀態(tài),不會(huì)識(shí)別中間狀態(tài)的數(shù)據(jù)。這稱為可串行性,因?yàn)樗軌蛑匦卵b載起始數(shù)據(jù),并且重播一系列事務(wù),以使數(shù)據(jù)結(jié)束時(shí)的狀態(tài)與原始事務(wù)執(zhí)行的狀態(tài)相同。

 持久性:事務(wù)完成之后,對(duì)于系統(tǒng)的影響是永久性的。該修改即使出現(xiàn)系統(tǒng)故障也將一直保持。

2、事務(wù)塊管理的常用語(yǔ)句:

  在postgresql里,一個(gè)事務(wù)是通過(guò)把SQL命令用:begin 和 commit命令包圍實(shí)現(xiàn)的。事務(wù)塊是指包圍在begin 和 commit之間的語(yǔ)句。在postgresql9中,常用的事務(wù)塊管理語(yǔ)句的含義如下:

 start transaction:表示開(kāi)始一個(gè)新的事務(wù)塊。

 begin:表示初始化一個(gè)事務(wù)塊 。

 commit:表示提交事務(wù);

 rollback:表示事務(wù)失敗時(shí)執(zhí)行回滾操作。

 set transaction:設(shè)置當(dāng)前事務(wù)的特性,對(duì)后面的事務(wù)么有影響。

3、postgresql的并發(fā)控制

3.1、臟讀:

 當(dāng)一個(gè)事務(wù)讀取的記錄時(shí)另一個(gè)事務(wù)的一部分時(shí),如果第一個(gè)事務(wù)正常完成,就沒(méi)有什么問(wèn)題,如果此時(shí)另一個(gè)事務(wù)未完成,就會(huì)產(chǎn)生臟讀。

3.2、幻讀:

 當(dāng)某一數(shù)據(jù)執(zhí)行insert 或 delete操作,而該數(shù)據(jù)行恰好屬于某個(gè)事務(wù)正在讀取的范圍時(shí),就會(huì)發(fā)生幻讀現(xiàn)象。比如在運(yùn)行update語(yǔ)句的同時(shí)執(zhí)行insert操作,因?yàn)椴迦肓艘粋€(gè)新記錄行,所以沒(méi)有鎖定,并且能夠珍惜。

3.3、不可重復(fù)性讀?。?/p>

 如果一個(gè)事務(wù)不止一次地讀取相同的記錄,但在兩次讀取中間有另一個(gè)事務(wù)剛好修改了數(shù)據(jù),則兩次讀取的數(shù)據(jù)將出現(xiàn)差異,此時(shí)就發(fā)生了非重復(fù)讀取。

3.2、postgresql的事務(wù)隔離級(jí)別:

《隔離級(jí)別》  《臟讀》  《幻讀》  《不可重復(fù)性讀取》

讀未提交      可能     可能     可能

讀已提交      不可能    可能     可能

可重復(fù)讀      不可能    可能     不可能

可串行讀      不可能    不可能    不可能

  在postgresql里,可以請(qǐng)求4種可能的事務(wù)隔離級(jí)別的任意一種。但是在內(nèi)部,實(shí)際上只有兩種獨(dú)立的隔離級(jí)別,分別對(duì)應(yīng):讀已提交 和 可串行化。也就是說(shuō),如果選擇了讀未提交的級(jí)別,實(shí)際上使用的是讀已提交。在選擇可重復(fù)讀級(jí)別的時(shí)候,實(shí)際上用的是可串行化,所以實(shí)際的隔離級(jí)別可能比選擇的更嚴(yán)格。postgresql只提供兩種隔離級(jí)別的原因是:這是把標(biāo)準(zhǔn)的隔離級(jí)別與多版本并發(fā)控制架構(gòu)映射相關(guān)的唯一合理方法。

postgresql中的兩種隔離級(jí)別如下:

①:讀已提交:

  讀已提交是postgresql里的默認(rèn)級(jí)別。當(dāng)一個(gè)事務(wù)運(yùn)行在這個(gè)隔離級(jí)別時(shí),一個(gè)select查詢只能看到查詢開(kāi)始之前已提交的數(shù)據(jù),而無(wú)法看到未提交的數(shù)據(jù)或者在查詢執(zhí)行期間其他事務(wù)已經(jīng)提交的數(shù)據(jù)。

  如果兩個(gè)事務(wù)在對(duì)同一組數(shù)據(jù)進(jìn)行更新操作,那么第二個(gè)事務(wù)需要等待第一個(gè)事務(wù)提交或者更新回滾。如果第一個(gè)事務(wù)進(jìn)行提交,系統(tǒng)將重新計(jì)算查詢條件,符合條件后第二個(gè)事務(wù)繼續(xù)進(jìn)行更新操作;如果第一個(gè)事務(wù)進(jìn)行更新回滾,那么他的作業(yè)將被忽略,第二個(gè)事務(wù)將繼續(xù)更新最初發(fā)現(xiàn)的行。

②:可串行化:

  可串行化基本提供最嚴(yán)格的事務(wù)隔離。這個(gè)級(jí)別模擬串行的事務(wù)執(zhí)行,就好像事務(wù)將一個(gè)接著一個(gè)地串行(而不是并行)執(zhí)行。不過(guò),使用這個(gè)級(jí)別的應(yīng)用必須準(zhǔn)備在串行化失敗的時(shí)候重新啟動(dòng)事務(wù)。

  如果兩個(gè)事務(wù)在對(duì)同一組數(shù)據(jù)進(jìn)行更新操作,那么串行化事務(wù)就將等待第一個(gè)正在更新的事務(wù)提交或回滾。如果第一個(gè)事務(wù)提交了,那么串行化事務(wù)將回滾,從頭開(kāi)始重新進(jìn)行整個(gè)事務(wù);如果第一個(gè)事務(wù)回滾,那么它的影響將被忽略,這個(gè)可串行化的事務(wù)就可以在該元祖上進(jìn)行更新操作。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

網(wǎng)站名稱:postgresql事務(wù)處理與并發(fā)控制-創(chuàng)新互聯(lián)
分享路徑:http://www.muchs.cn/article0/shooo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、商城網(wǎng)站、動(dòng)態(tài)網(wǎng)站、網(wǎng)站維護(hù)Google、定制開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名