http://publib.boulder.ibm.com/infocenter/idshelp/v10/topic/com.ibm.admin.doc/admin504.htm#sii-
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.
(http://publib.boulder.ibm.com/infocenter/idshelp/v10/topic/com.ibm.adref.doc/adref104.htm)
一、备份逻辑日志文件的概念
从第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 | 不分配日志文件,但发出以下关于打开的事务的消息: | 否 | 否 | 否 |
-------------------------------------------------------------------------------------------------------------------------------------
(http://publib.boulder.ibm.com/infocenter/idshelp/v10/topic/com.ibm.admin.doc/admin534.htm)
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 提供的转移逻辑日志文件的方法为删除重建,如下:(http://publib.boulder.ibm.com/infocenter/idshelp/v10/topic/com.ibm.admin.doc/admin530.htm)
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)
http://www.tek-tips.com/faqs.cfm?fid=2537
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