Informix 入門(mén)之---日志分析
大家都知道informix是需要日志的,但各日志都做什么用,各有什么意義等等,我們在下面做一個(gè)探討:
首先需要說(shuō)明的是informix的日志有兩種:一種是物理日志,用來(lái)存放數據的前映象;另一種是邏輯日志,用來(lái)存放所有事物的操作過(guò)程。
在初始化的配置中,物理日志和邏輯日志的不是存放在根的磁盤(pán)空間的。默認的大小物理日志2M,邏輯日志6個(gè),每個(gè)日志文件2M。但在實(shí)際的生產(chǎn)環(huán)境中,這兩個(gè)參數一般是需要調整的。
從Informix的本身的建議來(lái)說(shuō),要求邏輯日志的大小一般是要求一天的業(yè)務(wù)量,邏輯日志滾一圈,物理日志/邏輯日志=1/3。但是有的數據量很大的業(yè)務(wù)系統,這樣做是不可能的,要做適當的調整。
物理日志文件的個(gè)數僅為1,邏輯日志文件的個(gè)數最小為3,最大為32767。
關(guān)于物理日志和邏輯日志的改變,我們可以使用onparams命令來(lái)完成。
C:\Informix>;onparams --
Usage: onparams -a -d <DBspace>; [-s <size>;] [-i] |
-d -l <log file number>; [-y] |
-p -s <size>; [-d <DBspace>;] [-y]
-a - Add a logical log file
-i - Insert after current log
-d - Drop a logical log file
-p - Change physical log size and location
-y - Automatically responds "yes" to all prompts
上面是onparams的幫助文件,
下面我們首先來(lái)改變物理日志的位置和大?。?br>C:\Informix>;onparams -p -s 40000 -d phydbs -y
Shutting down, please wait ...
Initializing, please wait ...
Recovering, please wait ...
可以通過(guò)onstat –l 中的phybegin來(lái)查看物理日志當前存在了哪個(gè)chunk上。Physize來(lái)查看當前物理日志文件大大小,單位是頁(yè)。
在這之前我們創(chuàng )建了phydbs,并指定了他大小。我們在-s后指定物理日志文件的大小,在-d后指定物理日志文件的位置。
接著(zhù)我們來(lái)做邏輯日志位置和大小的改變:
C:\Informix>;onparams -a -d logdbs -s 30000 -i
Logical log successfully added.
然后用onstat –l來(lái)查看新加的邏輯日志:
C:\Informix>;onstat -l
IBM Informix Dynamic Server Version 9.40.TC2E1 -- Quiescent -- Up 00:08:10 -- 25728 Kbytes
Physical Logging
Buffer bufused bufsize numpages numwrits pages/io
P-1 0 8 8 7 1.14
phybegin physize phypos phyused %used
3:53 10000 12 0 0.00
Logical Logging
Buffer bufused bufsize numrecs numpages numwrits recs/pages pages/io
L-3 0 8 37 14 14 2.6 1.0
Subsystem numrecs Log Space used
OLDRSAM 37 2628
address number flags uniqid begin size used %used
0CB37CA8 1 U-B---- 1 1:763 500 500 100.00
0CB37CE8 2 U-B---- 2 1:1263 500 500 100.00
0CB37D28 3 U-B---- 3 1:1763 500 500 100.00
0CB37D68 4 U-B---- 4 1:2263 500 500 100.00
0CB37DA8 5 U-B---- 5 1:2763 500 284 56.80
0CB37DE8 6 U---C-L 6 1:3263 500 315 63.00
0CED8B98 12 A------ 0 2:37553 7500 0 0.00
0CED8B58 11 A------ 0 2:30053 7500 0 0.00
0CED8B18 10 A------ 0 2:22553 7500 0 0.00
0CED8AD8 9 A------ 0 2:15053 7500 0 0.00
0CED8A98 8 A------ 0 2:7553 7500 0 0.00
0CED8A58 7 A------ 0 2:53 7500 0 0.00
12 active, 12 total
可以發(fā)現新加的邏輯日志狀態(tài)都是A,先做0級備份ontape –s –L 0之后用onstat –l可以發(fā)現所有日志的flag位都變成了F狀態(tài)。
然后用onmode –l切換邏輯日志到新加的邏輯日志,用onmode –c強制做檢查點(diǎn)操作。
最后用onparams –d –l log_file_num –y來(lái)刪除原來(lái)的邏輯日志文件。
這樣就完成了informix日志的遷移。
在onstat –l中,flag位表示了邏輯日志的狀態(tài),
A表示新加了還不能使用的日志
F表示空閑的可以使用的日志,一般是在0級備份之后才有這樣的狀態(tài)
U表示已經(jīng)使用的邏輯日志
L表示當前的日志文件包含一個(gè)檢查點(diǎn)
C表示正在使用當前的日志文件
B表示已經(jīng)備份的日志文件
一般在新增或刪除日志文件之后都要做0級備份。
在onconfig文件中,LOGFILES指定了IDS邏輯日志的個(gè)數,LOGSIZE指定了邏輯日志的大小,PHYSDBS指定了物理日志的位置,PHYSFILE指定了物理日志大小。LTAPEDEV指定了邏輯日志備份的位置,LTAPEBLK指定了每個(gè)block塊的大小,LTAPESIZE指定了備份文件的大小。
下面我們討論數據庫的日志模式:
無(wú)日志
無(wú)緩沖日志
緩沖日志
ansi模式
我們可以通過(guò)ontape 來(lái)改變日志的模式
采用無(wú)日志的方式時(shí),所有的DML語(yǔ)句都不寫(xiě)日志,也就是說(shuō)此時(shí),數據庫不支持事物。當數據庫恢復系統備份的時(shí)候,無(wú)日志的數據庫不能完全恢復。因為在備份中只記錄了備份時(shí)的狀態(tài),備份后的數據庫的變化必須從邏輯日志中恢復,所以這些改變是不可恢復的。
緩沖日志:
所有的DML語(yǔ)句都寫(xiě)入log buffer,當log buffer寫(xiě)滿(mǎn)的時(shí)候,就開(kāi)始寫(xiě)入磁盤(pán)。這樣就可以大大減少磁盤(pán)的I/O,從而提高數據庫的性能。
但是在系統發(fā)生問(wèn)題恢復的時(shí)候,緩沖區內的數據將丟失。這些數據是不可能恢復的。
無(wú)緩沖日志模式:
所有的 DML語(yǔ)句在發(fā)生的時(shí)候是寫(xiě)到緩沖里的,但事物commit之后就立刻寫(xiě)回磁盤(pán),這樣在系統發(fā)生問(wèn)題就保證了數據丟失的最少,但是增加了磁盤(pán)的I/O,所以數據庫的性能會(huì )受到一定的影響。
Ansi模式:
此模式和無(wú)緩沖日志模式具有相同的日志緩沖處理方法,但是此模式是不可逆的。
另外BLOB日志的處理也是十分特別的,他不需要物理日志,不寫(xiě)前映象。BLOB頁(yè)是直接寫(xiě)磁盤(pán)的,不經(jīng)過(guò)共享內存的處理。任何BLOB空閑映象的改變都將記錄到邏輯日志中,所有的blob spaces數據刷新到硬盤(pán)上是隨邏輯日志的的備份而寫(xiě)下去的。