第14章 管理邏輯日誌檔案

liahtobjtosh發表於2009-10-25
第14章 管理邏輯日誌檔案[@more@]

-

1. LOGFILES: 邏輯日誌檔案的數量。一般為10個。3<=LOGFILES<=32767,預設值:5
2. LOGSIZE: 邏輯日誌檔案的大小。LOGSIZE = connections * maxrows * rowsize / LOGFILES / 1024
其中 connections 是在 sqlhosts 檔案中以及 NETTYPE 配置引數中指定的所有網路型別指定的最大連線數。
maxrows 單個事務要更新的最大行數。
rowsize 錶行的平均大小。
3. LOGBUFF:LOGBUFF指明共享記憶體中的3個邏輯日誌緩衝區的大小(單位KB)。
2*頁大小 <= LOGBUFF <= LOGSIZE,預設值 64KB
It is recommended that you set LOGBUFF to 16 or 32 kilobytes, or perhaps 64 kilobytes for heavy workloads.
()

一、備份邏輯日誌檔案的概念
從第13章可以知道邏輯日誌包含已執行的事務的歷史記錄,而邏輯日誌檔案存在於 dbspace 中的,所以“備份邏輯日誌檔案”是指:將邏輯日誌檔案從 dbspace 複製到介質的過程。
從備份的過程可見備份邏輯日誌檔案實現以下兩個目標:
它將邏輯日誌記錄儲存在介質上,以便在需要資料恢復時可以回滾這些記錄。
它使邏輯日誌檔案空間可用於新的邏輯日誌記錄(忽略了備份日誌檔案,則可能會耗盡日誌空間)。

可以啟動手動邏輯日誌備份或設定連續邏輯日誌備份。

二、切換至下一個邏輯日誌檔案
當需要進行以下操作時,必須切換至下一個邏輯日誌檔案:
1. 備份當前日誌
2. 啟用新的Blob 空間和 Blob 塊
切換至下一個邏輯日誌檔案的方法:
onmode -l
此更改可立即生效

三、釋放邏輯日誌檔案
本人理解釋放邏輯日誌檔案是指將邏輯日誌檔案處於可使用狀態。比如當所有邏輯日誌檔案都滿時,由於沒有可用的邏輯日誌檔案所以造成資料庫操作不可繼續執行。這時必須釋放邏輯日誌檔案以供記錄日誌使用。

1. 釋放具有狀態 U 的日誌檔案
對於狀態 U 邏輯日誌檔案(此日誌檔案已使用,但尚未備份),先備份該檔案,然後再根據此邏輯日誌檔案的狀態分別處理。

2. 釋放具有狀態 U-B 的日誌檔案
狀態 U-B 指日誌檔案已備份,但仍在使用中,這是因為日誌檔案中的某些事務仍在進行。則可以使用 onmode -c 命令以強制執行完全檢查點來釋放邏輯日誌檔案

3. 放具有狀態 F 的日誌檔案
狀態 F 指日誌檔案已使用過,但目前為空閒狀態,即也可用。不需要釋放

4. 釋放當前日誌檔案(狀態 C)
a.執行以下命令以將當前日誌檔案切換到下一個可用的日誌檔案:
onmode -l
b.用 ON–Bar 或 ontape 備份原始日誌檔案。
c.在備份了所有填滿的日誌檔案後,會提示您切換到下一個可用的日誌檔案並備份新的當前日誌檔案。 因為剛剛切換到該日誌檔案,所以您無需進行備份。

5.釋放具有狀態 U-B-L 的日誌檔案
如果日誌檔案已備份,並且其中的所有事務已關閉,但檔案還不可用(狀態 U-B-L),則該邏輯日誌檔案包含最近的檢查點記錄。
要釋放具有狀態 U-B-L 的日誌檔案,資料庫伺服器必須建立新的檢查點。您可以執行以下命令來強制執行檢查點:
onmode -c

四、對邏輯日誌進行增、刪、改
在初始化資料庫伺服器時,系統會建立 LOGFILES 配置引數中指定數目的邏輯日誌檔案。這些日誌檔案的大小為您在 LOGSIZE 引數中指定的大小。

4.1 動態新增日誌
4.1.1 DYNAMIC_LOGS 配置引數確定資料庫伺服器何時動態新增邏輯日誌檔案。
------------------------------------------------------------------------------------------------------------------------------------
|DYNAMIC_LOGS | 含義 | 事件警報 | 等待新增日誌 | 動態日誌新增 |
-------------------------------------------------------------------------------------------------------------------------------------
|2(預設值) | 允許自動分配新日誌檔案,從而防止開啟的事務掛起系統。 | 是(26、28) | 否 | 是 |
|1 | 允許手工新增新日誌檔案。 | 是(27) | 是 | 否 |
|0 | 不分配日誌檔案,但發出以下關於開啟的事務的訊息: | 否 | 否 | 否 |
-------------------------------------------------------------------------------------------------------------------------------------
()

4.1.2 動態新增的日誌檔案的位置
資料庫伺服器按以下搜尋順序在資料庫空間中分配日誌檔案。

1 包含最新日誌檔案的資料庫空間 (如果該資料庫空間已滿,資料庫伺服器會搜尋其它資料庫空間。)
2 包含日誌檔案的映象資料庫空間(但根資料庫空間除外)
3 所有已經包含日誌檔案的資料庫空間(根資料庫空間除外)
4 包含物理日誌的資料庫空間
5 根資料庫空間
6 任何映象資料庫空間
7 任何資料庫空間

4.2 手工新增邏輯日誌檔案
使用 onparams -a 命令新增到日誌檔案列表的末尾
使用 onparams -a -i 命令新增到當前邏輯日誌檔案之後

必須使用 informix 使用者進行操作
A. 請確保資料庫伺服器處於聯機、單使用者或靜默方式,或處於快速恢復方式的清除階段。
B. onparams -a -d llogdbs -s 100000 -i
在 llogdbs 資料庫空間的當前日誌檔案之後插入一個100MB的邏輯日誌檔案
(-a 新增 -d 邏輯日誌表空間 -s 大小)
C. onstat -1 檢視目前已有的邏輯日誌及狀態。新日誌檔案的狀態為 A,且立即可用。
D. 雖然在新增日誌檔案後不再需要立即備份,但因為資料結構已更改,所以下一次備份應為 0 級備份。所以建議先執行 ontape -s 。
E. 可以使用 onmode -l 命令切換當前邏輯日誌到剛才新增的任意一個邏輯日誌上(這不是必需的)
如下:
radio-ods% onparams -a -d actdbs04 -s 200

Log operation started. To monitor progress, use the onstat -l command.
Logical log successfully added.
radio-ods% onstat -l

IBM Informix Dynamic Server Version 11.50.FC4DE -- On-Line -- Up 75 days 06:10:21 -- 441344 Kbytes

Physical Logging
Buffer bufused bufsize numpages numwrits pages/io
P-2 0 64 1311809 29316 44.75
phybegin physize phypos phyused %used
1:263 49950 12778 0 0.00

Logical Logging
Buffer bufused bufsize numrecs numpages numwrits recs/pages pages/io
L-3 0 32 49398514 4184547 1700654 11.8 2.5
Subsystem numrecs Log Space used
OLDRSAM 49384783 6146114788
HA 13731 604164

address number flags uniqid begin size used %used
1182eef98 1 U-B---- 976 1:50213 5000 4491 89.82
11845af50 2 U---C-L 977 1:55213 5000 35 0.70
11845afb8 5 U-B---- 971 1:79197 5000 5000 100.00
118442c50 3 U-B---- 972 1:60213 5000 5000 100.00
118442cb8 4 U-B---- 973 1:65213 5000 5000 100.00
11a77f5e0 6 U-B---- 974 1:84213 5000 5000 100.00
11a7b0a48 7 U-B---- 975 1:89229 5000 5000 100.00
1219efeb0 8 A------ 0 43:69 100 0 0.00
8 active, 8 total

radio-ods% ontape -s

Archive to tape device '/dev/null' is complete.

Program over.
radio-ods% onstat -l

IBM Informix Dynamic Server Version 11.50.FC4DE -- On-Line -- Up 75 days 06:12:38 -- 441344 Kbytes

Physical Logging
Buffer bufused bufsize numpages numwrits pages/io
P-2 0 64 1311809 29316 44.75
phybegin physize phypos phyused %used
1:263 49950 12778 0 0.00

Logical Logging
Buffer bufused bufsize numrecs numpages numwrits recs/pages pages/io
L-1 0 32 49398577 4184552 1700658 11.8 2.5
Subsystem numrecs Log Space used
OLDRSAM 49384844 6146118604
HA 13733 604252

address number flags uniqid begin size used %used
1182eef98 1 U-B---- 976 1:50213 5000 4491 89.82
11845af50 2 U---C-L 977 1:55213 5000 40 0.80
11845afb8 5 U-B---- 971 1:79197 5000 5000 100.00
118442c50 3 U-B---- 972 1:60213 5000 5000 100.00
118442cb8 4 U-B---- 973 1:65213 5000 5000 100.00
11a77f5e0 6 U-B---- 974 1:84213 5000 5000 100.00
11a7b0a48 7 U-B---- 975 1:89229 5000 5000 100.00
1219efeb0 8 A------ 0 43:69 100 0 0.00
8 active, 8 total

radio-ods% onmode -lradio-ods% onstat -l

IBM Informix Dynamic Server Version 11.50.FC4DE -- On-Line -- Up 75 days 06:17:12 -- 441344 Kbytes

Physical Logging
Buffer bufused bufsize numpages numwrits pages/io
P-2 15 64 1311823 29316 44.75
phybegin physize phypos phyused %used
1:263 49950 12778 15 0.03

Logical Logging
Buffer bufused bufsize numrecs numpages numwrits recs/pages pages/io
L-3 0 32 49398680 4184575 1700681 11.8 2.5
Subsystem numrecs Log Space used
OLDRSAM 49384947 6146128416
HA 13733 604252

address number flags uniqid begin size used %used
1182eef98 1 U-B---- 976 1:50213 5000 4491 89.82
11845af50 2 U-B---L 977 1:55213 5000 41 0.82
11845afb8 5 U-B---- 978 1:79197 5000 4 0.08
118442c50 3 U-B---- 979 1:60213 5000 4 0.08
118442cb8 4 U-B---- 980 1:65213 5000 4 0.08
11a77f5e0 6 U-B---- 981 1:84213 5000 4 0.08
11a7b0a48 7 U-B---- 982 1:89229 5000 3 0.06
1219efeb0 8 U---C-- 983 43:69 100 3 3.00
8 active, 8 total

radio-ods%

4.3 刪除邏輯日誌檔案
使用 onparams -d -l 命令刪除邏輯日誌檔案

如果刪除狀態 A 日誌檔案,資料庫伺服器將立即刪除它並釋放空間。
如果您刪除狀態 U-B 日誌檔案,資料庫伺服器將其標記為已刪除(D)。在對包含該日誌檔案的資料庫空間和根資料庫空間進行了 0 級備份之後,資料庫伺服器刪除日誌檔案並釋放空間。
無法刪除狀態 C 或 L (當前正在使用或包含最近檢查點記錄)的日誌檔案。

A. 資料庫伺服器必須處於聯機、單使用者或靜默方式。
B. 執行以下命令來刪除日誌檔案號為 21 的邏輯日誌檔案:
onparams -d -l 21
一次刪除一個日誌檔案。您必須知道要刪除的每個邏輯日誌的日誌檔案號。
(如果日誌檔案具有新新增(A)的狀態,則將其立即刪除。
如果日誌檔案具有已使用(U)的狀態,則將其標記為刪除(D)。要刪除已使用的日誌檔案,請對所有資料庫空間進行 0 級備份。
)

4.4 更改邏輯日誌檔案的大小
如果您希望更改日誌檔案的大小,則新增所需大小的新日誌檔案並隨後刪除舊檔案會更為容易。

4.5 將邏輯日誌檔案移至另一個資料庫空間
IBM 提供的轉移邏輯日誌檔案的方法為刪除重建,如下:()
A. 從邏輯日誌檔案當前所在資料庫空間刪除這些檔案
B. 將邏輯日誌檔案新增到其新資料庫空間

IBM 給出的以下示例也為我們在建立資料庫伺服器時將預設安裝的5個邏輯日誌檔案刪除,並重新在其它資料庫空間建立邏輯日誌檔案提供了非常好的思路,原文如下:

將邏輯日誌檔案移出根資料庫空間(示例)
1. 請確保資料庫伺服器處於聯機方式、單使用者方式、靜默方式或快速恢復方式。

2. 向 dbspace_1 新增 6 個新邏輯日誌檔案。
請參閱手工新增邏輯日誌檔案。

3. 對所有儲存空間進行 0 級備份,以釋放除當前日誌檔案以外的所有日誌檔案。
(如果使用 onbar -l -b -c,則可備份包括當前日誌檔案在內的所有日誌檔案。)請參閱釋放邏輯日誌檔案。

4.使用 onmode -l 切換到新的當前日誌檔案。
請參閱切換至下一個邏輯日誌檔案。

5. 刪除根資料庫空間中的全部 6 個邏輯日誌檔案。
您不能刪除當前邏輯日誌檔案。

請參閱刪除邏輯日誌檔案。

6. 建立根資料庫空間和 dbspace_1 的 0 級備份。
有關更多資訊,請參閱《IBM Informix: 備份與恢復指南》。

五、關於長事務、高水印
5.1 什麼叫長事務(LTX)

A transaction started in one particular logical log and is not committed, when the database server needs the same log for reuse said to be a long trasaction. In other words: When an active transaction reaches the long transaction high water mark (LTXHWM), it will be declared a long transaction (LTX) and hence will be rolled back automatically.
如果一個活動事務超過了 LTXHWM (長事務高水印),則這個事務就會被宣告成長事務(LTX),並且這個事務也會被自動回滾。

55.2 什麼是高水印(high water-maker: HWM)
當 DYNAMIC_LOGS 設定為 1 或 2 時,預設的 LTXHWM 為80%, LTXEHWN 為90%
當 DYNAMIC_LOGS 設定為 0 時,預設的 LTXHWM 為50%, LTXEHWN 為60%
所以如果減少高水印值,就增加了長事務的可能性。
長事務高水印(LTXHWM)是在回滾事務前允許事務所跨的總日誌空間的百分比(其實是以邏輯日誌檔案的個數進行比較的,而並不是所佔的邏輯日誌檔案的空間)。如果資料庫伺服器在最舊使用的日誌檔案中發現開啟的事務,它會動態新增日誌檔案。因為日誌空間一直在增加,所以高水印會向外擴充套件。當日志空間到達高水印,資料庫伺服器會回滾事務。事務回滾及其它過程也會生成邏輯日誌記錄。資料庫伺服器繼續新增日誌檔案直至回滾完成,以便防止邏輯日誌耗盡空間。如果這個時候邏輯日誌的使用個數仍然持續上漲達到或超過 LTXEHWM 所設定的值,則資料庫會停止其他會話的正常運轉,全力保證該長事務的回滾操作。而 LTXEHWM 就是指互斥訪問長事務高水印,也就是在回滾長事務獲得對邏輯日誌的互斥訪問時的所佔的總日誌空間的百分比(還是邏輯日誌檔案個數的百分比)。
參考:http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0810niuxz2/


例如:資料庫伺服器有 10 個邏輯日誌,而 LTXHWM 設定為 98。事務從日誌檔案 1 開始,而更新活動填滿日誌 1 到 9。資料庫伺服器在日誌檔案 10 之後動態新增日誌檔案 11。只要事務不完成,該過程就一直持續至資料庫伺服器新增了 40 個日誌檔案。當資料庫伺服器新增第 50 個日誌時,事務已趕上高水印,而資料庫伺服器會將其回滾。

如果系統具有足夠的磁碟空間並且想要執行未知長度的事務,可以考慮將 LTXHWM 設定成 100 以強制資料庫伺服器繼續新增日誌檔案直到完成事務。

以下內容轉自:
http://blog.csdn.net/bocodb/archive/2008/01/08/2030903.aspx

一、檢視資料庫狀態
正常情況下是
infodb% onstat -
IBM Informix Dynamic Server Version 9.40.FC7 -- On-Line -- Up 35 days 16:51:16 -- 3920896 Kbytes

長事務情況下是
infodb% onstat -
IBM Informix Dynamic Server Version 9.40.FC7 -- On-Line (LONGTX) -- Up 35 days 16:41:40 -- 3920896 Kbytes
Blocked:LONGTX

二、顯示事務(transaction)資訊
其中flag欄位中第三個標誌位為R說明事務在rollback,說明這個事務是長事務
infodb% onstat -x
IBM Informix Dynamic Server Version 9.40.FC7 -- On-Line (LONGTX) -- Up 35 days 16:41:56 -- 3920896 Kbytes
Blocked:LONGTX
Transactions
1cf0a6748 A-R-- 1cd55c618 642073 119403 119405 0x1aa91e4 DIRTY 0

三、透過長事務的userthread值找出session id
infodb% onstat -u |grep 1cd55c618
1cd55c618 --RPX-- 1880841 informix - 0 0 642073 256446 323049

四、顯示會話連線資訊,找出造成長事務的SQL語句,並最佳化
infodb% onstat -g ses 1880841

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22565551/viewspace-1028128/,如需轉載,請註明出處,否則將追究法律責任。

相關文章