前言
隨著大數據和互聯網技術的不斷發展,數據庫管理系統的作用越來越重要,實現數據的快速讀寫以及保證數據的安全性和完整性成為企業在選擇數據庫技術時最為關注的問題之一。事務是保證數據一致性和完整性的關鍵機制之一,因此事務管理在數據庫技術中占據了極為重要的位置。在這里我們將著重介紹華為云數據庫 GaussDB 對事務的支持及管理,包括事務應用場景、事務管理、事務語句、事務隔離、事務監控等內容。
GaussDB 事務的定義及應用場景事務是數據庫系統中的一個重要概念,通俗來講,事務就是一組數據庫操作看成一個整體,這個整體要么全部執行成功,要么全部撤銷。
事務可以應用在并發訪問數據庫時,保持數據的一致性。一些常見的應用場景包括轉賬操作、訂單修改、銀行交易等。在這些場景中,事務的功能是保證操作的原子性,即要么全部執行成功,數據庫的值正確地更新,即處于一個“一致狀態”,要么出現異常或系統故障,全部回滾至操作前的狀態,以保證數據的準確性和完整性。
GaussDB 支持 ACID 事務,即原子性、一致性、隔離性和持久性。在 GaussDB 中,事務是指一組數據庫操作,這些操作要么全部成功,要么全部失敗。當一個事務提交時,所有的修改都會被永久保存。如果事務失敗,則所有的修改都會被回滾,數據庫狀態會被還原到事務開始前的狀態。GaussDB 還支持分布式事務(集群事務),可以涉及到多個節點的事務(本次不做重點介紹)。
原子性(Atomicity):事務是數據庫的邏輯工作單位,事務中的操作,要么都做, 要么都不做。
一致性(Consistency):事務的執行結果必須是使數據庫從一個一致性狀態轉到另一 個一致性狀態。
隔離性(Isolation):數據庫中一個事務的執行不能被其他事務干擾。即一個事務 的內部操作及使用的數據對其他事務是隔離的,并發執行的 各個事務不能相互干擾。
持久性(Durability):事務一旦提交,對數據庫中數據的改變是永久的。提交后的 操作或者故障不會對事務的操作結果產生任何影響。
GaussDB 事務的管理事務管理是指在使用數據庫系統時,對事務的開啟、提交、回滾、保存點、分布式事務等進行管理:
啟動事務:GaussDB 通過 START TRANSACTION 和 BEGIN 語法啟動事務
設置事務:GaussDB 通過 SET TRANSACTION 或者 SET LOCAL TRANSACTION 語法設置事務
提交事務:GaussDB 通過 COMMIT 或者 END 可完成提交事務的功能,即提交事務的所有操作
回滾事務:回滾是在事務運行的過程中發生了某種故障,事務不能繼續執行,系統將事務中對數據庫的所有已完成的操作全部撤銷
存儲過程本身就處于一個事務中,開始調用最外圍存儲過程時會自動開啟一個事務,在調用結束時自動提交或者發生異常時回滾。除了系統自動的事務控制外,也可以使用 COMMIT/ROLLBACK 來控制存儲過程中的事務。在存儲過程中調用 COMMIT/ROLLBACK 命令,將提交/回滾當前事務并自動開啟一個新的事務,后續的所有操作都會在此新事務中運行。
示例 1:啟動一個事務
--以默認方式啟動事務。START TRANSACTION;SELECT * FROM tpcds.reason;END;
--以默認方式啟動事務。BEGIN;SELECT * FROM tpcds.reason;END;
--以隔離級別為 READ COMMITTED,讀/寫方式啟動事務。START TRANSACTION ISOLATION LEVEL READ COMMITTED READ WRITE;SELECT * FROM tpcds.reason;COMMIT;
示例 2:設置事務
--開啟一個事務,設置事務的隔離級別為 READ COMMITTED,訪問模式為 READ ONLY。START TRANSACTION;SET LOCAL TRANSACTION ISOLATION LEVEL READ COMMITTED READ ONLY;COMMIT;示例 3:支持在 PLSQL 的存儲過程內使用 COMMIT/ROLLBACK。
CREATE TABLE EXAMPLE1(COL1 INT);
CREATE OR REPLACE PROCEDURE TRANSACTION_EXAMPLE()ASBEGINFOR i IN 0..20 LOOPINSERT INTO EXAMPLE1(COL1) VALUES (i);IF i % 2 = 0 THENCOMMIT;ELSEROLLBACK;END IF;END LOOP;END;/運行結果:
在 GaussDB 中,控制管理事務可以采用兩個方法:原子性和隔離性。原子性指一組操作要么全部執行,要么全部不執行。隔離性指一個事務的操作不受其他事務干擾,保證并發執行時數據的一致性。
更多事務管理過程中的使用場景(支持/不支持調用的上下文環境),請參見官網示例:
https://support.huaweicloud.com/centralized-devg-v2-opengauss/devg_03_0713.html
GaussDB 事務語句
事務語句可以看作是在事務中執行的一組語句,常見的事務語句有 insert、update、delete 等。
GaussDB 支持事務語句,事務語句組合成一組原子性、隔離性和一致性的操作。例如,下面的所有查詢都包含在同一個事務小片中。如果有任何一個查詢失敗,整個事務將回滾。以下是事務語句的例子:
BEGIN;SELECT balance FROM account WHERE id = 1 FOR UPDATE;UPDATE account SET balance = balance - 100 WHERE id = 1;COMMIT
GaussDB 事務隔離
GaussDB 支持的事務隔離級別包括:Read Uncommitted(讀未提交)、Read Committed(讀提交)、Repeatable Read(重復讀)、Serializable(序列化,Serializable 是最高的事務隔離級別,在該級別下,事務串行化順序執行,可以避免臟讀、不可重復讀與幻讀。但是這種事務隔離級別效率低下,比較耗數據庫性能,一般不建議使用)。
語法:
{ SET [ LOCAL ] TRANSACTION|SET SESSION CHARACTERISTICS AS TRANSACTION }{ ISOLATION LEVEL { READ COMMITTED | READ UNCOMMITTED | SERIALIZABLE | REPEATABLE READ }| { READ WRITE | READ ONLY } } [, ...]
Read Uncommitted 隔離級別:最低的隔離級別,它允許提交了但尚未被寫入磁盤的事務修改的數據被其他事務所讀取。
SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;2. Read Committed 隔離級別:這個級別保證一個事務所見到的數據,要么是提交事務所修改的(已經將數據更新至磁盤),要么就是其他提交事務所修改的。
SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL READ COMMITTED;3. Repeatable Read 隔離級別:保證在一個事務內重復執行的查詢返回的結果集是一樣的。特別地,在這個級別的情況下,在事務中第一次讀表時就會自動獲取到所有被查詢記錄的共享鎖,直到關閉連接為止。
SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL REPEATABLE READ;
Serializable 隔離級別:這個級別最高,實現方法是對數據進行鎖定,以保證在寫操作(INSERT、DELETE 和 UPDATE 等)期間數據不會被訪問。
SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL SERIALIZABLE;事務監控是指對事務進行實時的監控,包括事務的狀態、執行時間、執行語句、執行結果等。
GaussDB 事務監控
事務監控可以對數據庫操作進行記錄和追蹤,包括事務開始和結束的時間、事務中執行的語句、事務提交或回滾的狀態等。可以通過這些信息來監控事務的執行情況,優化性能和調整配置。
華為云數據庫 GaussDB 支持 ACID 事務,事務隔離級別支持讀已提交、可重復讀、序列化三種,并具有分布式事務支持功能。在實際應用中,GaussDB 的事務機制可適用于金融賬務、電商訂單、物流管理等多種場景。
例如,在電商訂單場景中,可以在一個事務中包含插入訂單、更新庫存、生成支付信息等相關操作,確保這些操作全部成功或全部失敗,而不會出現其中某個操作提交,其他操作失敗的情況。
而在日常開發中,要注意對事務的合理使用,避免在一個事務中執行過多的操作,盡可能縮小事務的范圍,減少事務的執行時間,從而提高系統的并發性能。
事務監控可以對數據庫操作進行記錄和追蹤,包括事務開始和結束的時間、事務中執行的語句、事務提交或回滾的狀態等。可以通過這些信息來監控事務的執行情況,優化性能和調整配置。以下是事務監控的示例:
查看活動事務信息(PG_PREPARED_XACTS 視圖顯示當前準備好進行兩階段提交的事務的信息)
select * from pg_prepared_xacts;
查看事務狀態(PG_STAT_ACTIVITY 視圖顯示和當前用戶查詢相關的信息。)
select pid, datname, usename, query, query_start, state from pg_stat_activity where state != 'idle' and state != 'idle in transaction';
總結
事務是保證數據一致性和完整性的核心機制之一,對于一個數據庫來說,事務的支持和管理是必須的。GaussDB 通過支持手動和自動管理事務、事務隔離級別以及事務監控等功能,滿足了企業對數據一致性和完整性的需求。在日常開發中,需要特別注意事務的控制和隔離,以保證事務的正確執行,從而提高數據的可靠性和安全性。
本文介紹到此結束,更多操作可在實際應用中參考官方文檔。
審核編輯:湯梓紅
-
云計算
+關注
關注
39文章
7850瀏覽量
137877 -
數據庫
+關注
關注
7文章
3848瀏覽量
64688 -
華為云
+關注
關注
3文章
2691瀏覽量
17588
發布評論請先 登錄
相關推薦
分布式云化數據庫有哪些類型
MySQL數據庫的安裝
![MySQL<b class='flag-5'>數據庫</b>的安裝](https://file1.elecfans.com/web3/M00/05/E2/wKgZPGeF2XWAe83fAAAW9lhgvGk652.jpg)
云數據庫是哪種數據庫類型?
數據庫加密辦法
數據庫事件觸發的設置和應用
數據庫數據恢復—MYSQL數據庫ibdata1文件損壞的數據恢復案例
數據庫數據恢復—通過拼接數據庫碎片恢復SQLserver數據庫
![<b class='flag-5'>數據庫</b><b class='flag-5'>數據</b>恢復—通過拼接<b class='flag-5'>數據庫</b>碎片恢復SQLserver<b class='flag-5'>數據庫</b>](https://file1.elecfans.com/web1/M00/F4/07/wKgaoWcjE32AbQdWAAJD_hojvJc119.png)
Oracle數據恢復—異常斷電后Oracle數據庫啟庫報錯的數據恢復案例
![Oracle<b class='flag-5'>數據</b>恢復—異常斷電后Oracle<b class='flag-5'>數據庫</b>啟<b class='flag-5'>庫</b>報錯的<b class='flag-5'>數據</b>恢復案例](https://file1.elecfans.com/web2/M00/08/B8/wKgZomb6Ns-AbiICAAFlXAFpKKU086.png)
數據庫數據恢復—SQL Server數據庫出現823錯誤的數據恢復案例
![<b class='flag-5'>數據庫</b><b class='flag-5'>數據</b>恢復—SQL Server<b class='flag-5'>數據庫</b>出現823錯誤的<b class='flag-5'>數據</b>恢復案例](https://file1.elecfans.com/web2/M00/07/F4/wKgaombs78mANJ1GAAPeSoXHVPE244.png)
數據庫數據恢復—SQL Server數據庫所在分區空間不足報錯的數據恢復案例
數據庫數據恢復—raid5陣列上層Sql Server數據庫數據恢復案例
![<b class='flag-5'>數據庫</b><b class='flag-5'>數據</b>恢復—raid5陣列上層Sql Server<b class='flag-5'>數據庫</b><b class='flag-5'>數據</b>恢復案例](https://file.elecfans.com/web2/M00/A2/AD/pYYBAGRLbSSAHhFWAAI9vWNRQec919.png)
選擇 KV 數據庫最重要的是什么?
![選擇 KV <b class='flag-5'>數據庫</b>最重要的是什么?](https://file1.elecfans.com/web2/M00/C7/0C/wKgaomYFejKABcBUAAYcik-_bpw704.png)
評論