天天看點

db2删除大量資料_在DB2中Commit是什麼意思?

什麼是COMMIT

資料庫管理系統具有送出的概念。這個概念與将一組動作分組在一起有關,以使它們都作為一個組成功或失敗。這代表在著名的一個交易系統的ACID屬性。A代表原子性–表示事務可能由多個小部分組成,但是如果這些部分之一失敗,則整個事務也必須對資料進行任何更改。此概念在關系資料庫中尤其重要,該關系資料庫可以規範化為許多較小的表,進而導緻事務不僅僅是在單個位置中包含單個更新。

假定應用程式未打開自動送出,以下内容代表事務和送出使用的示例。

BEGIN TRANSACTION

select columns from table a where id < NNNN;

update table_a set col1=1234;

update table_b set col2=5678;

insert into table_c .... ;

commit work;

END TRANSACTION

在上面的示例中,如果table_b的更新語句失敗,則應用程式将檢測到該錯誤,并且将永遠不會執行commit work語句,或者可能執行復原語句。DB2将更新復原到table_a并将插入復原到table_c。

送出還與ACID-持久性中的D有關。持久性屬性意味着一旦發生送出,即使斷電或發生其他可能的故障,資料也會持久儲存(傳統上在磁盤上)。這是資料庫具有事務日志的主要原因。

何時發生

預設情況下,DB2指令行通常已啟用自動送出。這意味着,如果您隻是從指令行發出db2指令,那麼通常不必送出。許多應用程式以其他方式管理送出,包括一些GUI資料庫管理或通路應用程式。

在設計應用程式時,設計人員和開發人員必須确定應按要求進行的送出。

DBA還提倡在長時間運作的操作(例如資料加載或大型删除)期間進行頻繁送出。在很大程度上,這是因為事務日志檔案不會填滿。

頻繁送出支援最進階别的并發資料通路。

COMMIT做什麼

DB2使用一種稱為預寫日志記錄的方法。這意味着在發生送出時,資料将直接寫入事務日志。資料通過緩沖池異步到達表等磁盤上。送出不會将資料寫出到表本身。這樣可以節省時間-最終使用者無需坐等大量I / O。

附帶說明-DB2将重做和撤消資料都寫入事務日志中-不同于Oracle,重做和撤消日志是分開的東西。

DB2有一個稱為日志緩沖區的記憶體緩沖區。更改資料後,無論是否送出,都會将其寫入日志緩沖區。然後,當日志緩沖區已滿或任何連接配接進行送出時,日志緩沖區都會寫出到磁盤。在将送出從日志緩沖區外部化到磁盤上的日志檔案之前,送出不會成功。

發生這種情況時,可以将未送出的資料從日志緩沖區寫入日志檔案。但是DB2跟蹤并知道哪些事務已送出,哪些事務未送出。

db2删除大量資料_在DB2中Commit是什麼意思?

在上圖中,代理将送出記錄寫入日志緩沖區(1)。然後,記錄器程序根據MINCOMMIT和其他因素立即或不久将日志緩沖區寫入磁盤(2)。代理等待記錄器程序的确認,即代理送出的日志記錄已被外部化到磁盤(3),直到該送出記錄為止。一次可能有多個座席在等待。由于這是最終使用者在等待實體I / O的地方,是以将最快的磁盤應用于事務日志檔案是很有意義的。

請注意,送出不會涉及緩沖池或表空間資料。語句通過後,他們已經将撤消和重做的所有資訊都寫入了日志緩沖區,是以它已經存在或在事務日志檔案中等待送出。

如果資料庫崩潰,則在恢複資料庫時,它将經曆一個稱為崩潰恢複的過程,該過程将檢視事務日志檔案并前滾所有需要的事務。在完成崩潰恢複的“前進階段”之後,它将繼續并復原日志檔案中尚未送出的所有事務。