0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

GaussDB數(shù)據(jù)庫事務(wù)介紹

jf_21561199 ? 來源:jf_21561199 ? 作者:jf_21561199 ? 2023-06-05 16:28 ? 次閱讀

前言

隨著大數(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)鍵機(jī)制之一,因此事務(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ù)庫時,保持?jǐn)?shù)據(jù)的一致性。一些常見的應(yīng)用場景包括轉(zhuǎn)賬操作、訂單修改、銀行交易等。在這些場景中,事務(wù)的功能是保證操作的原子性,即要么全部執(zhí)行成功,數(shù)據(jù)庫的值正確地更新,即處于一個“一致狀態(tài)”,要么出現(xiàn)異?;蛳到y(tǒng)故障,全部回滾至操作前的狀態(tài),以保證數(shù)據(jù)的準(zhǔn)確性和完整性。

wKgaomR9nKuACxJ0AACB84cx4xQ582.png

GaussDB 支持 ACID 事務(wù),即原子性、一致性、隔離性和持久性。在 GaussDB 中,事務(wù)是指一組數(shù)據(jù)庫操作,這些操作要么全部成功,要么全部失敗。當(dāng)一個事務(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)生任何影響。

wKgaomR9nKyAa9HEAAD8fNlAD9g628.png

GaussDB 事務(wù)的管理事務(wù)管理是指在使用數(shù)據(jù)庫系統(tǒng)時,對事務(wù)的開啟、提交、回滾、保存點、分布式事務(wù)等進(jìn)行管理:

啟動事務(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 命令,將提交/回滾當(dāng)前事務(wù)并自動開啟一個新的事務(wù),后續(xù)的所有操作都會在此新事務(wù)中運行。

示例 1:啟動一個事務(wù)

--以默認(rèn)方式啟動事務(wù)。START TRANSACTION;SELECT * FROM tpcds.reason;END;

--以默認(rèn)方式啟動事務(wù)。BEGIN;SELECT * FROM tpcds.reason;END;

--以隔離級別為 READ COMMITTED,讀/寫方式啟動事務(wù)。START TRANSACTION ISOLATION LEVEL READ COMMITTED READ WRITE;SELECT * FROM tpcds.reason;COMMIT;

示例 2:設(shè)置事務(wù)

--開啟一個事務(wù),設(shè)置事務(wù)的隔離級別為 READ COMMITTED,訪問模式為 READ ONLY。START TRANSACTION;SET LOCAL TRANSACTION ISOLATION LEVEL READ COMMITTED READ ONLY;COMMIT;示例 3:支持在 PLSQL 的存儲過程內(nèi)使用 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;/運行結(jié)果:

wKgZomR9nK2AQKeEAABxTDOEgDk714.png

在 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ù)語句的例子:

BEGIN;SELECT balance FROM account WHERE id = 1 FOR UPDATE;UPDATE account SET balance = balance - 100 WHERE id = 1;COMMIT

wKgaomR9nK2AaaqUAAEbeyXuoKQ088.png

GaussDB 事務(wù)隔離

GaussDB 支持的事務(wù)隔離級別包括:Read Uncommitted(讀未提交)、Read Committed(讀提交)、Repeatable Read(重復(fù)讀)、Serializable(序列化,Serializable 是最高的事務(wù)隔離級別,在該級別下,事務(wù)串行化順序執(zhí)行,可以避免臟讀、不可重復(fù)讀與幻讀。但是這種事務(wù)隔離級別效率低下,比較耗數(shù)據(jù)庫性能,一般不建議使用)。

語法:

{ SET [ LOCAL ] TRANSACTION|SET SESSION CHARACTERISTICS AS TRANSACTION }{ ISOLATION LEVEL { READ COMMITTED | READ UNCOMMITTED | SERIALIZABLE | REPEATABLE READ }| { READ WRITE | READ ONLY } } [, ...]

Read Uncommitted 隔離級別:最低的隔離級別,它允許提交了但尚未被寫入磁盤的事務(wù)修改的數(shù)據(jù)被其他事務(wù)所讀取。

SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;2. Read Committed 隔離級別:這個級別保證一個事務(wù)所見到的數(shù)據(jù),要么是提交事務(wù)所修改的(已經(jīng)將數(shù)據(jù)更新至磁盤),要么就是其他提交事務(wù)所修改的。

SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL READ COMMITTED;3. Repeatable Read 隔離級別:保證在一個事務(wù)內(nèi)重復(fù)執(zhí)行的查詢返回的結(jié)果集是一樣的。特別地,在這個級別的情況下,在事務(wù)中第一次讀表時就會自動獲取到所有被查詢記錄的共享鎖,直到關(guān)閉連接為止。

SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL REPEATABLE READ;

Serializable 隔離級別:這個級別最高,實現(xiàn)方法是對數(shù)據(jù)進(jìn)行鎖定,以保證在寫操作(INSERT、DELETE 和 UPDATE 等)期間數(shù)據(jù)不會被訪問。

SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL SERIALIZABLE;事務(wù)監(jiān)控是指對事務(wù)進(jìn)行實時的監(jiān)控,包括事務(wù)的狀態(tài)、執(zhí)行時間、執(zhí)行語句、執(zhí)行結(jié)果等。

GaussDB 事務(wù)監(jiān)控

事務(wù)監(jiān)控可以對數(shù)據(jù)庫操作進(jìn)行記錄和追蹤,包括事務(wù)開始和結(jié)束的時間、事務(wù)中執(zhí)行的語句、事務(wù)提交或回滾的狀態(tài)等。可以通過這些信息來監(jiān)控事務(wù)的執(zhí)行情況,優(yōu)化性能和調(diào)整配置。

華為云數(shù)據(jù)庫 GaussDB 支持 ACID 事務(wù),事務(wù)隔離級別支持讀已提交、可重復(fù)讀、序列化三種,并具有分布式事務(wù)支持功能。在實際應(yīng)用中,GaussDB 的事務(wù)機(jī)制可適用于金融賬務(wù)、電商訂單、物流管理等多種場景。

例如,在電商訂單場景中,可以在一個事務(wù)中包含插入訂單、更新庫存、生成支付信息等相關(guān)操作,確保這些操作全部成功或全部失敗,而不會出現(xiàn)其中某個操作提交,其他操作失敗的情況。

而在日常開發(fā)中,要注意對事務(wù)的合理使用,避免在一個事務(wù)中執(zhí)行過多的操作,盡可能縮小事務(wù)的范圍,減少事務(wù)的執(zhí)行時間,從而提高系統(tǒng)的并發(fā)性能。

事務(wù)監(jiān)控可以對數(shù)據(jù)庫操作進(jìn)行記錄和追蹤,包括事務(wù)開始和結(jié)束的時間、事務(wù)中執(zhí)行的語句、事務(wù)提交或回滾的狀態(tài)等??梢酝ㄟ^這些信息來監(jiān)控事務(wù)的執(zhí)行情況,優(yōu)化性能和調(diào)整配置。以下是事務(wù)監(jiān)控的示例:

查看活動事務(wù)信息(PG_PREPARED_XACTS 視圖顯示當(dāng)前準(zhǔn)備好進(jìn)行兩階段提交的事務(wù)的信息)

select * from pg_prepared_xacts;

查看事務(wù)狀態(tài)(PG_STAT_ACTIVITY 視圖顯示和當(dāng)前用戶查詢相關(guān)的信息。)

select pid, datname, usename, query, query_start, state from pg_stat_activity where state != 'idle' and state != 'idle in transaction';

總結(jié)

事務(wù)是保證數(shù)據(jù)一致性和完整性的核心機(jī)制之一,對于一個數(shù)據(jù)庫來說,事務(wù)的支持和管理是必須的。GaussDB 通過支持手動和自動管理事務(wù)、事務(wù)隔離級別以及事務(wù)監(jiān)控等功能,滿足了企業(yè)對數(shù)據(jù)一致性和完整性的需求。在日常開發(fā)中,需要特別注意事務(wù)的控制和隔離,以保證事務(wù)的正確執(zhí)行,從而提高數(shù)據(jù)的可靠性和安全性。

本文介紹到此結(jié)束,更多操作可在實際應(yīng)用中參考官方文檔。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 云計算
    +關(guān)注

    關(guān)注

    39

    文章

    7670

    瀏覽量

    137018
  • 數(shù)據(jù)庫
    +關(guān)注

    關(guān)注

    7

    文章

    3737

    瀏覽量

    64173
  • 華為云
    +關(guān)注

    關(guān)注

    3

    文章

    2387

    瀏覽量

    17203
收藏 人收藏

    評論

    相關(guān)推薦

    數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—SQL Server數(shù)據(jù)庫出現(xiàn)823錯誤的數(shù)據(jù)恢復(fù)案例

    SQL Server數(shù)據(jù)庫故障: SQL Server附加數(shù)據(jù)庫出現(xiàn)錯誤823,附加數(shù)據(jù)庫失敗。數(shù)據(jù)庫沒有備份,無法通過備份恢復(fù)數(shù)據(jù)庫。
    的頭像 發(fā)表于 09-20 11:46 ?232次閱讀
    <b class='flag-5'>數(shù)據(jù)庫</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)—SQL Server<b class='flag-5'>數(shù)據(jù)庫</b>出現(xiàn)823錯誤的<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)案例

    選擇 KV 數(shù)據(jù)庫最重要的是什么?

    最后我也沒問清楚他們業(yè)務(wù)存啥(推測是這塊業(yè)務(wù)數(shù)據(jù)比較機(jī)密),但確實業(yè)務(wù)本身對可靠性要求非常高,開源 Redis 自身的可靠性無法滿足他們的要求,最終該用戶選擇使用 GaussDB(for Redis)數(shù)據(jù)庫,當(dāng)前
    的頭像 發(fā)表于 03-28 22:11 ?634次閱讀
    選擇 KV <b class='flag-5'>數(shù)據(jù)庫</b>最重要的是什么?

    數(shù)據(jù)庫數(shù)據(jù)恢復(fù)】Oracle數(shù)據(jù)庫ASM實例無法掛載的數(shù)據(jù)恢復(fù)案例

    oracle數(shù)據(jù)庫ASM磁盤組掉線,ASM實例不能掛載。數(shù)據(jù)庫管理員嘗試修復(fù)數(shù)據(jù)庫,但是沒有成功。
    的頭像 發(fā)表于 02-01 17:39 ?420次閱讀
    【<b class='flag-5'>數(shù)據(jù)庫</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)】Oracle<b class='flag-5'>數(shù)據(jù)庫</b>ASM實例無法掛載的<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)案例

    Oracle數(shù)據(jù)庫是什么 Oracle數(shù)據(jù)庫的特點

    Oracle數(shù)據(jù)庫系統(tǒng)具有高效率、可靠性好的特點,適用于各種規(guī)模的企業(yè)和組織。它支持大容量數(shù)據(jù)和高并發(fā)事務(wù)處理,能夠滿足各種復(fù)雜的業(yè)務(wù)需求。
    的頭像 發(fā)表于 01-06 15:02 ?921次閱讀

    Access數(shù)據(jù)庫基礎(chǔ)知識介紹

    電子發(fā)燒友網(wǎng)站提供《Access數(shù)據(jù)庫基礎(chǔ)知識介紹.pdf》資料免費下載
    發(fā)表于 01-02 10:24 ?3次下載

    關(guān)于JSON數(shù)據(jù)庫

    如何理解JSON數(shù)據(jù)庫?作為NoSQL數(shù)據(jù)庫的一種類型,JSON數(shù)據(jù)庫有哪些優(yōu)勢呢?JSON數(shù)據(jù)庫如何運作,它為應(yīng)用程序開發(fā)者帶來了哪些價值呢?
    的頭像 發(fā)表于 12-06 13:46 ?785次閱讀
    關(guān)于JSON<b class='flag-5'>數(shù)據(jù)庫</b>

    mysql數(shù)據(jù)庫基礎(chǔ)命令

    MySQL是一個流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),經(jīng)常用于存儲、管理和操作數(shù)據(jù)。在本文中,我們將詳細(xì)介紹MySQL的基礎(chǔ)命令,并提供與每個命令相關(guān)的詳細(xì)解釋。 登錄MySQL 要登錄MySQL數(shù)據(jù)庫
    的頭像 發(fā)表于 12-06 10:56 ?507次閱讀

    oracle數(shù)據(jù)庫的基本操作

    Oracle數(shù)據(jù)庫是一種關(guān)系數(shù)據(jù)庫管理系統(tǒng)(RDBMS),廣泛應(yīng)用于企業(yè)級應(yīng)用中。它具有強大的功能和靈活的配置選項,可以滿足復(fù)雜的數(shù)據(jù)處理需求。本文將介紹Oracle
    的頭像 發(fā)表于 12-06 10:14 ?616次閱讀

    oracle數(shù)據(jù)庫的使用方法

    Oracle數(shù)據(jù)庫是一種關(guān)系型數(shù)據(jù)庫管理系統(tǒng),它由Oracle公司開發(fā)和維護(hù)。它提供了安全、可靠和高性能的數(shù)據(jù)庫管理解決方案,被廣泛應(yīng)用于企業(yè)級應(yīng)用和大型數(shù)據(jù)庫環(huán)境中。本文將詳細(xì)
    的頭像 發(fā)表于 12-06 10:10 ?1107次閱讀

    oracle數(shù)據(jù)庫alert日志作用

    Oracle數(shù)據(jù)庫的alert日志是數(shù)據(jù)庫引擎和實例的核心組件之一,它記錄著數(shù)據(jù)庫的運行狀況和事件。該日志對于數(shù)據(jù)庫的性能調(diào)優(yōu)、問題排查和安全管理起著重要作用。本文將詳盡、詳實、細(xì)致地
    的頭像 發(fā)表于 12-06 10:08 ?1095次閱讀

    什么是JSON數(shù)據(jù)庫

    如何理解JSON數(shù)據(jù)庫?作為NoSQL數(shù)據(jù)庫的一種類型,JSON數(shù)據(jù)庫有哪些優(yōu)勢呢?JSON數(shù)據(jù)庫如何運作,它為應(yīng)用程序開發(fā)者帶來了哪些價值呢?文章速覽:什么是JSON什么是JSON
    的頭像 發(fā)表于 12-02 08:04 ?768次閱讀
    什么是JSON<b class='flag-5'>數(shù)據(jù)庫</b>

    NoSQL 數(shù)據(jù)庫如何選型

    什么是NoSQL數(shù)據(jù)庫?為什么要使用NoSQL數(shù)據(jù)庫?鍵值數(shù)據(jù)庫內(nèi)存鍵值數(shù)據(jù)庫文檔數(shù)據(jù)庫列式數(shù)據(jù)庫
    的頭像 發(fā)表于 11-26 08:05 ?401次閱讀
    NoSQL <b class='flag-5'>數(shù)據(jù)庫</b>如何選型

    SQL Server數(shù)據(jù)庫備份方法

    SQL Server是一種用于管理和存儲數(shù)據(jù)的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)。備份數(shù)據(jù)庫是保護(hù)和恢復(fù)數(shù)據(jù)的重要措施之一,以防止意外數(shù)據(jù)丟失。在本文中,
    的頭像 發(fā)表于 11-23 14:27 ?1281次閱讀

    navicat怎么導(dǎo)出數(shù)據(jù)庫文件

    導(dǎo)出數(shù)據(jù)庫文件是數(shù)據(jù)庫管理中的一個重要操作,而Navicat是一款流行的數(shù)據(jù)庫管理工具,具有強大的導(dǎo)出功能。在本文中,我將詳細(xì)介紹如何使用Navicat導(dǎo)出
    的頭像 發(fā)表于 11-21 10:53 ?7603次閱讀

    數(shù)據(jù)庫數(shù)據(jù)恢復(fù)——MongoDB數(shù)據(jù)庫介紹數(shù)據(jù)恢復(fù)案例

    MongoDB數(shù)據(jù)庫是文檔數(shù)據(jù)存儲,將文檔存儲在集合之中,不是像MySQL一樣的關(guān)系型數(shù)據(jù)庫
    的頭像 發(fā)表于 11-08 15:04 ?816次閱讀
    <b class='flag-5'>數(shù)據(jù)庫</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)——MongoDB<b class='flag-5'>數(shù)據(jù)庫</b><b class='flag-5'>介紹</b>和<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)案例