GaussDB數(shù)據(jù)庫事務(wù)介紹
目錄
一、前言
二、GaussDB事務(wù)的定義及應(yīng)用場景
三、GaussDB事務(wù)的管理
四、GaussDB事務(wù)語句
五、GaussDB事務(wù)隔離
六、GaussDB事務(wù)監(jiān)控
七、總結(jié)
一、前言
隨著大數(shù)據(jù)和互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,數(shù)據(jù)庫管理系統(tǒng)的作用越來越重要,實現(xiàn)數(shù)據(jù)的快速讀寫以及保證數(shù)據(jù)的安全性和完整性成為企業(yè)在選擇數(shù)據(jù)庫技術(shù)時最為關(guān)注的問題之一。事務(wù)是保證數(shù)據(jù)一致性和完整性的關(guān)鍵機制之一,因此事務(wù)管理在數(shù)據(jù)庫技術(shù)中占據(jù)了極為重要的位置。在這里我們將著重介紹華為云數(shù)據(jù)庫GaussDB對事務(wù)的支持及管理,包括事務(wù)應(yīng)用場景、事務(wù)管理、事務(wù)語句、事務(wù)隔離、事務(wù)監(jiān)控等內(nèi)容。
二、GaussDB事務(wù)的定義及應(yīng)用場景
事務(wù)是數(shù)據(jù)庫系統(tǒng)中的一個重要概念,通俗來講,事務(wù)就是一組數(shù)據(jù)庫操作看成一個整體,這個整體要么全部執(zhí)行成功,要么全部撤銷。
事務(wù)可以應(yīng)用在并發(fā)訪問數(shù)據(jù)庫時,保持數(shù)據(jù)的一致性。一些常見的應(yīng)用場景包括轉(zhuǎn)賬操作、訂單修改、銀行交易等。在這些場景中,事務(wù)的功能是保證操作的原子性,即要么全部執(zhí)行成功,數(shù)據(jù)庫的值正確地更新,即處于一個“一致狀態(tài)”,要么出現(xiàn)異?;蛳到y(tǒng)故障,全部回滾至操作前的狀態(tài),以保證數(shù)據(jù)的準確性和完整性。

GaussDB支持ACID事務(wù),即原子性、一致性、隔離性和持久性。在GaussDB中,事務(wù)是指一組數(shù)據(jù)庫操作,這些操作要么全部成功,要么全部失敗。當一個事務(wù)提交時,所有的修改都會被永久保存。如果事務(wù)失敗,則所有的修改都會被回滾,數(shù)據(jù)庫狀態(tài)會被還原到事務(wù)開始前的狀態(tài)。GaussDB還支持分布式事務(wù)(集群事務(wù)),可以涉及到多個節(jié)點的事務(wù)(本次不做重點介紹)。
原子性(Atomicity):事務(wù)是數(shù)據(jù)庫的邏輯工作單位,事務(wù)中的操作,要么都做, 要么都不做。
一致性(Consistency):事務(wù)的執(zhí)行結(jié)果必須是使數(shù)據(jù)庫從一個一致性狀態(tài)轉(zhuǎn)到另一 個一致性狀態(tài)。
隔離性(Isolation):數(shù)據(jù)庫中一個事務(wù)的執(zhí)行不能被其他事務(wù)干擾。即一個事務(wù) 的內(nèi)部操作及使用的數(shù)據(jù)對其他事務(wù)是隔離的,并發(fā)執(zhí)行的 各個事務(wù)不能相互干擾。
持久性(Durability):事務(wù)一旦提交,對數(shù)據(jù)庫中數(shù)據(jù)的改變是永久的。提交后的 操作或者故障不會對事務(wù)的操作結(jié)果產(chǎn)生任何影響。

三、GaussDB事務(wù)的管理
事務(wù)管理是指在使用數(shù)據(jù)庫系統(tǒng)時,對事務(wù)的開啟、提交、回滾、保存點、分布式事務(wù)等進行管理:
啟動事務(wù):GaussDB通過START TRANSACTION和BEGIN語法啟動事務(wù)
設(shè)置事務(wù):GaussDB通過SET TRANSACTION或者SET LOCAL TRANSACTION語法設(shè)置事務(wù)
提交事務(wù):GaussDB通過COMMIT或者END可完成提交事務(wù)的功能,即提交事務(wù)的所有操作
回滾事務(wù):回滾是在事務(wù)運行的過程中發(fā)生了某種故障,事務(wù)不能繼續(xù)執(zhí)行,系統(tǒng)將事務(wù)中對數(shù)據(jù)庫的所有已完成的操作全部撤銷
存儲過程本身就處于一個事務(wù)中,開始調(diào)用最外圍存儲過程時會自動開啟一個事務(wù),在調(diào)用結(jié)束時自動提交或者發(fā)生異常時回滾。除了系統(tǒng)自動的事務(wù)控制外,也可以使用COMMIT/ROLLBACK來控制存儲過程中的事務(wù)。在存儲過程中調(diào)用COMMIT/ROLLBACK命令,將提交/回滾當前事務(wù)并自動開啟一個新的事務(wù),后續(xù)的所有操作都會在此新事務(wù)中運行。
示例1:啟動一個事務(wù)
示例2:設(shè)置事務(wù)
示例3:支持在PLSQL的存儲過程內(nèi)使用COMMIT/ROLLBACK。
運行結(jié)果:

在GaussDB中,控制管理事務(wù)可以采用兩個方法:原子性和隔離性。原子性指一組操作要么全部執(zhí)行,要么全部不執(zhí)行。隔離性指一個事務(wù)的操作不受其他事務(wù)干擾,保證并發(fā)執(zhí)行時數(shù)據(jù)的一致性。
更多事務(wù)管理過程中的使用場景(支持/不支持調(diào)用的上下文環(huán)境),請參見官網(wǎng)示例:
https://support.huaweicloud.com/centralized-devg-v2-opengauss/devg_03_0713.html?
四、GaussDB事務(wù)語句
事務(wù)語句可以看作是在事務(wù)中執(zhí)行的一組語句,常見的事務(wù)語句有insert、update、delete等。
GaussDB支持事務(wù)語句,事務(wù)語句組合成一組原子性、隔離性和一致性的操作。例如,下面的所有查詢都包含在同一個事務(wù)小片中。如果有任何一個查詢失敗,整個事務(wù)將回滾。以下是事務(wù)語句的例子:
?
五、GaussDB事務(wù)隔離
GaussDB支持的事務(wù)隔離級別包括:Read Uncommitted(讀未提交)、Read Committed(讀提交)、Repeatable Read(重復讀)、Serializable(序列化,Serializable 是最高的事務(wù)隔離級別,在該級別下,事務(wù)串行化順序執(zhí)行,可以避免臟讀、不可重復讀與幻讀。但是這種事務(wù)隔離級別效率低下,比較耗數(shù)據(jù)庫性能,一般不建議使用)。
語法:
1. Read Uncommitted 隔離級別:最低的隔離級別,它允許提交了但尚未被寫入磁盤的事務(wù)修改的數(shù)據(jù)被其他事務(wù)所讀取。
2. Read Committed 隔離級別:這個級別保證一個事務(wù)所見到的數(shù)據(jù),要么是提交事務(wù)所修改的(已經(jīng)將數(shù)據(jù)更新至磁盤),要么就是其他提交事務(wù)所修改的。
3. Repeatable Read 隔離級別:保證在一個事務(wù)內(nèi)重復執(zhí)行的查詢返回的結(jié)果集是一樣的。特別地,在這個級別的情況下,在事務(wù)中第一次讀表時就會自動獲取到所有被查詢記錄的共享鎖,直到關(guān)閉連接為止。
4. Serializable 隔離級別:這個級別最高,實現(xiàn)方法是對數(shù)據(jù)進行鎖定,以保證在寫操作(INSERT、DELETE 和 UPDATE 等)期間數(shù)據(jù)不會被訪問。
六、GaussDB事務(wù)監(jiān)控
事務(wù)監(jiān)控是指對事務(wù)進行實時的監(jiān)控,包括事務(wù)的狀態(tài)、執(zhí)行時間、執(zhí)行語句、執(zhí)行結(jié)果等。
事務(wù)監(jiān)控可以對數(shù)據(jù)庫操作進行記錄和追蹤,包括事務(wù)開始和結(jié)束的時間、事務(wù)中執(zhí)行的語句、事務(wù)提交或回滾的狀態(tài)等??梢酝ㄟ^這些信息來監(jiān)控事務(wù)的執(zhí)行情況,優(yōu)化性能和調(diào)整配置。
華為云數(shù)據(jù)庫GaussDB支持ACID事務(wù),事務(wù)隔離級別支持讀已提交、可重復讀、序列化三種,并具有分布式事務(wù)支持功能。在實際應(yīng)用中,GaussDB的事務(wù)機制可適用于金融賬務(wù)、電商訂單、物流管理等多種場景。
例如,在電商訂單場景中,可以在一個事務(wù)中包含插入訂單、更新庫存、生成支付信息等相關(guān)操作,確保這些操作全部成功或全部失敗,而不會出現(xiàn)其中某個操作提交,其他操作失敗的情況。
而在日常開發(fā)中,要注意對事務(wù)的合理使用,避免在一個事務(wù)中執(zhí)行過多的操作,盡可能縮小事務(wù)的范圍,減少事務(wù)的執(zhí)行時間,從而提高系統(tǒng)的并發(fā)性能。
事務(wù)監(jiān)控可以對數(shù)據(jù)庫操作進行記錄和追蹤,包括事務(wù)開始和結(jié)束的時間、事務(wù)中執(zhí)行的語句、事務(wù)提交或回滾的狀態(tài)等??梢酝ㄟ^這些信息來監(jiān)控事務(wù)的執(zhí)行情況,優(yōu)化性能和調(diào)整配置。以下是事務(wù)監(jiān)控的示例:
1. 查看活動事務(wù)信息(PG_PREPARED_XACTS視圖顯示當前準備好進行兩階段提交的事務(wù)的信息)
2. 查看事務(wù)狀態(tài)(PG_STAT_ACTIVITY視圖顯示和當前用戶查詢相關(guān)的信息。)
七、總結(jié)
事務(wù)是保證數(shù)據(jù)一致性和完整性的核心機制之一,對于一個數(shù)據(jù)庫來說,事務(wù)的支持和管理是必須的。GaussDB通過支持手動和自動管理事務(wù)、事務(wù)隔離級別以及事務(wù)監(jiān)控等功能,滿足了企業(yè)對數(shù)據(jù)一致性和完整性的需求。在日常開發(fā)中,需要特別注意事務(wù)的控制和隔離,以保證事務(wù)的正確執(zhí)行,從而提高數(shù)據(jù)的可靠性和安全性。
本文介紹到此結(jié)束,更多操作可在實際應(yīng)用中參考官方文檔。