Chinaunix

标题: 谁懂informix日志分析? 指教一二 [打印本页]

作者: zwzc28    时间: 2008-07-28 13:38
标题: 谁懂informix日志分析? 指教一二
  因为工作需要, 要取数据库每日的增量而又要求效率, 想试试看能不能通过分析informix日志的方式来实现。 日志结构相关的资料请问谁有?
作者: liaosnet    时间: 2008-07-28 13:58
onlog?~? 看死你丫的..
作者: zwzc28    时间: 2008-07-28 14:37
标题: onlog
但是日志的结构不是很清楚。 有没有关于结构的相关资料?
作者: wtwu    时间: 2008-07-28 14:50
我们为每个存储过程估计逻辑日志的使用情况.牵涉到大量的测试和计算.以便获取针对应用程序中涉及到的每个表的每个数据库操作的逻辑日志使用情况的统计数字.我们要使用通过测试收集到的统计数字,为应用程序中的每个存储过程计算逻辑日志的使用情况.在所有数据库操作当中,插入操作要使用大部分的逻辑日志.因此我们使用插入作为我们进行估计的基准.首先,识别在存储过程中涉及到的一系列表,然后将一些行或记录插入到每个表中.接着我们使用onlog实用程序来查看由于插入操作而生成的逻辑日志记录有多少,并求每条逻辑日志记录长度的总和.
例如,为了为 NE 表估计逻辑日志的使用,在测试数据库时我们插入一行到 NE 表中,然后使用 -n 155,其中 155 是日志 id,这样我们得到以下输出:

addr     len  type     xid      id link   
18       48   BEGIN    20       155 0        07/01/2003 15:34:08 737   omcadmin
2ea9248  140  HINSERT  38       0  2ea9218  20005c   a0e      90
2ea92d4  88   ADDITEM  38       0  2ea9248  20005c   a0e      7     1     36   
2ea932c  56   ADDITEM  38       0  2ea92d4  20005c   a0e      2     2     4   
84       48   COMMIT   20       0  48       07/01/2003 15:34:08

上面的输出表明,将一条记录插入到 NE 表中将生成三条逻辑日志记录,该数据库操作所使用的总逻辑日志空间是 284 字节,这也是三条记录长度的总和(140 + 88 + 56)。此外,还有 96 字节的事务开销,也就是 BEGIN 和 COMMIT 记录的总和。事务开销是恒定的,每个数据库事务都要加上这一项。在这里,也就是对于存储过程的每次执行都要考虑这一项。结果,我们得出下面的表,这个表列出了将一条记录插入到 应用程序中涉及的每个表中的逻辑日志的使用:


不知道能否帮助你
作者: zwzc28    时间: 2008-07-28 15:15
谢谢, 我主要是想通过解析日志把新增、 删除、 更新的数据取出来。  所以想知道日志的详细结构。
作者: cdcd007    时间: 2008-07-28 15:41
有专门的软件 大型增量数据抽取软件IIE 专门抽取informix数据库增量数据
详情访问www.it-adv.com
作者: liaosnet    时间: 2008-07-28 15:42
原帖由 wtwu 于 2008-7-28 14:50 发表
我们为每个存储过程估计逻辑日志的使用情况.牵涉到大量的测试和计算.以便获取针对应用程序中涉及到的每个表的每个数据库操作的逻辑日志使用情况的统计数字.我们要使用通过测试收集到的统计数字,为应用程序中的每 ...


这个似乎是那个MOTO的工程师写的..呵~~
作者: liaosnet    时间: 2008-07-28 15:50
地址是这个~~
http://www.ibm.com/developerwork ... -0311fan/index.html
作者: zwzc28    时间: 2008-07-28 15:51
谢谢, 收费的工具我们不准备用。 以前就有这种工具但收费很高。
作者: cdcd007    时间: 2008-07-28 15:56
两种对数据库影响很大的方案:

第一、在表上建时间列,每个操作需要更新时间列;一段时间以后卸出增量数据。
第二、建触发器+存储过程,负荷高时会拖死数据库服务器。
作者: zwzc28    时间: 2008-07-28 16:26
呵呵, 可是客户不允许用这两种方式。 只能用最笨的办法了。
作者: liaosnet    时间: 2008-07-28 16:29
原帖由 zwzc28 于 2008-7-28 16:26 发表
呵呵, 可是客户不允许用这两种方式。 只能用最笨的办法了。


用测试机做测试吧~~ onlog的话..基本上没办法分析..
作者: cdcd007    时间: 2008-07-28 16:39
用onlog取不到增量数据,只能看到所作的操作
作者: zwzc28    时间: 2008-07-28 16:53
那么取增量数据难道要去从chunk里取吗?  呵呵, 那可麻烦了。
作者: cdcd007    时间: 2008-07-28 21:15
14楼正解 要不取增量数据的软件就不值钱了
作者: george002    时间: 2008-07-28 23:39
原帖由 cdcd007 于 2008-7-28 21:15 发表
14楼正解 要不取增量数据的软件就不值钱了

要不怎么值钱呢
作者: george002    时间: 2008-07-28 23:41
原帖由 cdcd007 于 2008-7-28 15:56 发表
两种对数据库影响很大的方案:

第一、在表上建时间列,每个操作需要更新时间列;一段时间以后卸出增量数据。
第二、建触发器+存储过程,负荷高时会拖死数据库服务器。

以前做得一个定时取新增数据的,根据最后的rowid来区分。
作者: cdcd007    时间: 2008-07-30 11:59
rowid并不可取,rowid的内容是
0x000001     1D
页号          页中的行地址
如果在这个定时时段之前被插入的数据在定时时段内被删除,之后再插入一行新的数据,那么这行新数据有可能使用被删除那行数据的rowid,根据rowid区分的时候,会丢掉这行新插入的数据。
作者: jily_cunix    时间: 2008-07-30 19:13
onlog日志举例:
addr     len  type     xid      id link   
978474   48   BEGIN    47       1808 0        07/24/2008 07:34:22 11948901 ctd
9784a4   120  HINSERT  47       0  978474   207156   3410     69
97851c   56   ADDITEM  47       0  9784a4   207157   3410     11    1     4   
978554   48   COMMIT   47       0  97851c   07/24/2008 07:34:22

其中内容:
BEGIN......COMMIT
    一个完整事务,同一事务的xid是一致。BEGIN行中有起始时间及访问数据库所用的用户名
207156
    这是一个16进制的partnum值,与用户访问的数据库systables表中partnum值对应,但此表中partnum是十进制的,需要做相应转换
HINSERT
    写入一条记录,如果有索引字段,则在HINSERT行后会有一个或多个ADDITEM行

注意:
1. 一个事物内可插入或删除多条记录
2.  需确认增量统计的周期要比逻辑日志切换一圈的周期小,否则统计无效

建议不要用分析逻辑日志的方式,我认为你的增量统计应该只是针对几个表,因此还是在应用软件侧增加功能,即对那几个表的所有insert delete操作成功后均写入日志表,之后对日志表进行统计。
作者: zzjijun    时间: 2008-07-31 12:55
原帖由 zwzc28 于 2008-7-28 15:15 发表
谢谢, 我主要是想通过解析日志把新增、 删除、 更新的数据取出来。  所以想知道日志的详细结构。


除了通过onlog,日志结构是不公开的。而且每个新版本日志结构都有可能改变。

除非想做通用的日志分析软件,否则在应用层实现增量数据的捕获更容易。
作者: wstar    时间: 2008-08-10 21:45
lz的想法很好,但是不容易实现。太复杂。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2