金融其它

关于DB2活动日志目录下存在已经归档日志的疑惑,求解答

数据库版本:
CTI_TEST2:/home/usr/gl_kpiad >db2level
DB21085I  Instance "gl_kpiad" uses "64" bits and DB2 code release "SQL09057"
with level identifier "06080107".
Informational tokens are "DB2 v9.5.0.7", "special_27196", "IP23136_27196", and
Fix Pack "7".
Product is installed at "/opt/IBM/db2/V9.5".
数据库日志参数设置:
CTI_TEST2:/home/usr/gl_kpiad >db2 get db cfg|grep -i log
Log retain for recovery status                          = YES
User exit for logging status                            = NO
Catalog cache size (4KB)              (CATALOGCACHE_SZ) = 300
Log buffer size (4KB)                        (LOGBUFSZ) = 98
Log file size (4KB)                         (LOGFILSIZ) = 100
Number of primary log files                (LOGPRIMARY) = 10
Number of secondary log files               (LOGSECOND) = 0
Changed path to log files                  (NEWLOGPATH) =
Path to log files                                       = /DBTEST/gl_kpiad/NODE0000/SQL00001/SQLOGDIR/
Overflow log path                     (OVERFLOWLOGPATH) =
Mirror log path                         (MIRRORLOGPATH) =
First active log file                                   =
Block log on disk full                (BLK_LOG_DSK_FUL) = NO
Block non logged operations            (BLOCKNONLOGGED) = NO
Percent max primary log space by transaction  (MAX_LOG) = 0
Num. of active log files for 1 active UOW(NUM_LOG_SPAN) = 0
Percent log file reclaimed before soft chckpt (SOFTMAX) = 100
Log retain for recovery enabled             (LOGRETAIN) = ON
User exit for logging enabled                (USEREXIT) = OFF
HADR log write synchronization mode     (HADR_SYNCMODE) = NEARSYNC
First log archive method                 (LOGARCHMETH1) = DISK:/tmp
Options for logarchmeth1                  (LOGARCHOPT1) =
Second log archive method                (LOGARCHMETH2) = OFF
Options for logarchmeth2                  (LOGARCHOPT2) =
Failover log archive path                (FAILARCHPATH) =
Number of log archive retries on error   (NUMARCHRETRY) = 5
Log archive retry Delay (secs)         (ARCHRETRYDELAY) = 20
Log pages during index build            (LOGINDEXBUILD) = OFF
参数设置后,个人理解LOGPRIMARY参数设置为10,则数据库活动日志目录/DBTEST/gl_kpiad/NODE0000/SQL00001/SQLOGDIR/下的日志数量为10个,均为未归档的日志。对于已经归档的日志,根据参数LOGARCHMETH1设置会移到/tmp目录下。
而目前测试的现象是:活动日志目录,即/DBTEST/gl_kpiad/NODE0000/SQL00001/SQLOGDIR/下的日志数一直多余10个,数量在13-23之间,查看发现有除了未归档的10个日志,还有已经归档到/tmp目录下的日志,没有清理或者重用,导致活动日志目录下日志数量一直多余10个。
疑惑:DB2的活动日志目录下为何还要部分已经归档的日志存在,既然已经归档到/tmp目录下,为何不删除?如果这些日志是用来重写的,那么活动日志目录下未删除的归档日志的数量得有个上限吧,这个是怎么控制的?跟LOGPRIMARY的设置有关吗?
参与37

35同行回答

qichangqichang数据库管理员中国银联
回复 14# tongjixianing     这个我也观察了,确实如你所说,last log number = first active log number + log primary + secondary。但是因为活动日志目录下会有已经归档的日志,而且不确定会遗留多少个已归档日志,所以就存在一个隐患,就是如果活动日志目录文件系统...显示全部
回复 14# tongjixianing


    这个我也观察了,确实如你所说,last log number = first active log number + log primary + secondary。但是因为活动日志目录下会有已经归档的日志,而且不确定会遗留多少个已归档日志,所以就存在一个隐患,就是如果活动日志目录文件系统不设置的足够大,会导致文件系统满,进而影响到新的日志的生成,最后相信会导致数据库夯死或者其他什么情况。我们遇到了这个问题,已经通过扩展文件系统的方法临时解决。收起
金融其它 · 2012-05-18
浏览570
zss0109211zss0109211数据库管理员null
:) ,其实这个问题看下,db2pd -d db_name -logs,确认一下是否有非活动日志在活动日志目录.再看下db2diag.log archive log信息就可以确认了.显示全部
:) ,其实这个问题看下,db2pd -d db_name -logs,确认一下是否有非活动日志在活动日志目录.再看下db2diag.log archive log信息就可以确认了.收起
互联网服务 · 2012-05-20
浏览797
ljbupcljbupc软件开发工程师上海安硕科技
回复 34# qichang 确定不是磁盘读写瓶颈?每秒钟写了多少M日志啊?忙的时候,归档读的日志也是这么多M,再写也是这么多M。也就是基本上要乘以3了。如果数据还在这个盘上,还要加上查询的读,插入删除的写。。如果是本地import,那还是有读有写的。。那需要看看CPU是否瓶颈了,写日志的优...显示全部
回复 34# qichang

确定不是磁盘读写瓶颈?每秒钟写了多少M日志啊?忙的时候,归档读的日志也是这么多M,再写也是这么多M。也就是基本上要乘以3了。如果数据还在这个盘上,还要加上查询的读,插入删除的写。。如果是本地import,那还是有读有写的。。
那需要看看CPU是否瓶颈了,写日志的优先级是最高的,但是copy日志的优先级估计是相当靠后的了。。收起
互联网服务 · 2012-05-20
浏览837
qichangqichang数据库管理员中国银联
回复  qichang 不过还有一种情况,就是数据copy跟不上,或许是磁盘写入原因,或许是网路传输原因,或许是C ...ljbupc 发表于 2012-5-19 22:28 我们生产上的这个问题,我初步估计是是数据copy跟不上,日志文件系统和数据库的数据分别是不同的物理存储。另外,测试环境虽然归...显示全部
回复  qichang
不过还有一种情况,就是数据copy跟不上,或许是磁盘写入原因,或许是网路传输原因,或许是C ...
ljbupc 发表于 2012-5-19 22:28



我们生产上的这个问题,我初步估计是是数据copy跟不上,日志文件系统和数据库的数据分别是不同的物理存储。另外,测试环境虽然归档日志目录和活动日志目录是在同一块磁盘上,但是在测试时候,我topas查看了一下硬盘的读写,应该也没有到达瓶颈。接下来我会再向IBM确认一下,是不是我们的猜想的,有结果我也会贴出来跟大家共享。谢谢你的热心帮助收起
金融其它 · 2012-05-20
浏览863
ljbupcljbupc软件开发工程师上海安硕科技
回复 32# ljbupc     上面那个截图不是很好,因为上面我中间隔断了一段时间再insert的数据;这个图更能好些。我terminate后把归档日志清理了。活动日志断开所有连接后,重新连后自动格式化为只有主日志文件个数的日志文件,比如我设置的2,则会只剩下2个文件。。依旧左...显示全部
回复 32# ljbupc
   

log.jpg

上面那个截图不是很好,因为上面我中间隔断了一段时间再insert的数据;
这个图更能好些。我terminate后把归档日志清理了。
活动日志断开所有连接后,重新连后自动格式化为只有主日志文件个数的日志文件,比如我设置的2,则会只剩下2个文件。。

依旧左边归档,右边循环日志。对U盘进行数据拷贝。
已复制完成的95,96被重命名重用了。。
正在复制的97,和待复制的98,99,100……无法重命名并重用。
所以需要写新日志的时候会新建日志文件。。


这个和版本没有关系,我用的玩的是windows 的10.1,刚装不久。
没有复制的被重命名重用的话,会导致归档日志不全面的,那就严重了。。
DB2归档的时候是重命名并复用而不是移动的原因是:新建并格式化日志文件很耗时,而重命名的时间相对可以忽略了。
如果你的主日志文件个数比较多且日志size比较大,如20个,大小为1G。。
如果是第一个连接数据库的,DB2机器不够好会等挺久的时间,因为这个时候DB2会创建20个1G的日志文件并格式化;
第二个连接数据库的人会很快就连接上;因为这个时候主日志文件已经创建好了。
本地你可以试试,如果只有一个连接,就terminate 然后connect。同时打开日志文件夹看着。。收起
互联网服务 · 2012-05-19
浏览826
ljbupcljbupc软件开发工程师上海安硕科技
你去检查下:日志和数据是在同一块盘么?如果是,最好分开,并发高的系统容易争抢磁头读写数据;如果归档日志和他们都是同一块磁盘,那建议马上更改。。现在的问题最有可能的就是这个原因引起的了。如果日志归档是映射到了其他地址上,看看网络传输速率会不会有问题。CPU问题,这个可能...显示全部
你去检查下:日志和数据是在同一块盘么?如果是,最好分开,并发高的系统容易争抢磁头读写数据;
如果归档日志和他们都是同一块磁盘,那建议马上更改。。现在的问题最有可能的就是这个原因引起的了。


如果日志归档是映射到了其他地址上,看看网络传输速率会不会有问题。
CPU问题,这个可能性应该很小。。收起
互联网服务 · 2012-05-19
浏览818
ljbupcljbupc软件开发工程师上海安硕科技
回复 29# qichang 问题我自己弄出来了。是用一个优盘弄的。。插了个优盘,设置归档日志路径为U盘,然后拷贝U盘里8G的零散数据到电脑中。显示需要总时间30分钟,够我测试了。配置如下: 日志缓冲区大小 (4KB)               &...显示全部
回复 29# qichang
问题我自己弄出来了。是用一个优盘弄的。。
插了个优盘,设置归档日志路径为U盘,然后拷贝U盘里8G的零散数据到电脑中。显示需要总时间30分钟,够我测试了。
配置如下:
日志缓冲区大小 (4KB)                          (LOGBUFSZ) = 256
日志文件大小 (4KB)                          (LOGFILSIZ) = 50000
主日志文件的数目                           (LOGPRIMARY) = 2
辅助日志文件的数目                          (LOGSECOND) = 1
已更改的至日志文件的路径                   (NEWLOGPATH) =
日志文件路径                                            = E:\DB2\NODE0000\SQL00
001\LOGSTREAM0000\
首个活动日志文件                                        = S0000088.LOG
第一个日志归档方法                        (LOGARCHMETH1) = DISK:g:\
logarchmeth1 的归档压缩   (LOGARCHCOMPR1) = OFF
2+1=3;应该是3个日志文件的 。。结果到了6个了。。
我中间插入了几次200W数据。都是插入后就提交的,避免活动日志满错误。
结果是这样:

log.jpg



由于卡在日志复制阶段了,所有那个活动日志文件夹下面文件数目超了。。
实际上是出于复制或者等待复制阶段。。无法对其重命名复用,将会新建一个文件。收起
互联网服务 · 2012-05-19
浏览818
ljbupcljbupc软件开发工程师上海安硕科技
回复 29# qichang 不过还有一种情况,就是数据copy跟不上,或许是磁盘写入原因,或许是网路传输原因,或许是CPU 原因;就是一个主日志文件该被重用时,比如:S0000047.LOG这个文件是写完就提交的;然后下一个事物来了,这个时候应该是会重命名S0000047.LOG这个文件,但是数据库中将要进行重...显示全部
回复 29# qichang
不过还有一种情况,就是数据copy跟不上,或许是磁盘写入原因,或许是网路传输原因,或许是CPU 原因;
就是一个主日志文件该被重用时,比如:
S0000047.LOG这个文件是写完就提交的;然后下一个事物来了,这个时候应该是会重命名S0000047.LOG这个文件,但是数据库中将要进行重命名的时候,发现这个文件正在copy中,无法重命名,这个时候应该会新建一个日志文件(需要IBM专家证实)。
我自己实验出来了,在下楼。。收起
互联网服务 · 2012-05-19
浏览829
qichangqichang数据库管理员中国银联
回复 28# ljbupc    那就奇怪了。我这里在多次测试,均出现了该问题。并且我们生产环境也出现了这个问题。请问你数据库版本?另外,我看你是windows下测试的把,你有没有linux或者aix环境试试,我都是在linux或者aix测试出现的。另外,下面是我的参数设置,活动日志目录和归...显示全部
回复 28# ljbupc


   那就奇怪了。我这里在多次测试,均出现了该问题。并且我们生产环境也出现了这个问题。请问你数据库版本?另外,我看你是windows下测试的把,你有没有linux或者aix环境试试,我都是在linux或者aix测试出现的。
另外,下面是我的参数设置,活动日志目录和归档日志目录肯定不同。
CTI_TEST2:/home/usr/gl_kpiad >db2 get db cfg|grep -i log
Log retain for recovery status                          = YES
User exit for logging status                            = NO
Catalog cache size (4KB)              (CATALOGCACHE_SZ) = 300
Log buffer size (4KB)                        (LOGBUFSZ) = 98
Log file size (4KB)                         (LOGFILSIZ) = 100
Number of primary log files                (LOGPRIMARY) = 10
Number of secondary log files               (LOGSECOND) = 0
Changed path to log files                  (NEWLOGPATH) =
Path to log files                                       = /DBTEST/gl_kpiad/NODE0000/SQL00001/SQLOGDIR/
Overflow log path                     (OVERFLOWLOGPATH) =
Mirror log path                         (MIRRORLOGPATH) =
First active log file                                   =
Block log on disk full                (BLK_LOG_DSK_FUL) = NO
Block non logged operations            (BLOCKNONLOGGED) = NO
Percent max primary log space by transaction  (MAX_LOG) = 0
Num. of active log files for 1 active UOW(NUM_LOG_SPAN) = 0
Percent log file reclaimed before soft chckpt (SOFTMAX) = 100
Log retain for recovery enabled             (LOGRETAIN) = ON
User exit for logging enabled                (USEREXIT) = OFF
HADR log write synchronization mode     (HADR_SYNCMODE) = NEARSYNC
First log archive method                 (LOGARCHMETH1) = DISK:/tmp
Options for logarchmeth1                  (LOGARCHOPT1) =
Second log archive method                (LOGARCHMETH2) = OFF收起
金融其它 · 2012-05-19
浏览899
ljbupcljbupc软件开发工程师上海安硕科技
回复 26# qichang 我这里真无法出现你说的那个问题。我改为50了。那你看看是不是你的活动日志文件夹同时被作为了归档文件夹。。只有你一个用户连接时,你先提交一次,把现在活动日志文件夹中的文件名全记录下来;然后多执行几次UPDATE或insert不提交,直到你看到这个文件夹中的...显示全部
回复 26# qichang
我这里真无法出现你说的那个问题。我改为50了。那你看看是不是你的活动日志文件夹同时被作为了归档文件夹。。
只有你一个用户连接时,你先提交一次,把现在活动日志文件夹中的文件名全记录下来;
然后多执行几次UPDATE或insert不提交,直到你看到这个文件夹中的个数增加了;
然后再对比下现在活动日志文件夹里是否还存在刚才记录下来到文件名。
不存在才是正常的,因为数据库会顺序重命名并重用,然后才会新建文件。
如果存在,那说明同时被作为归档目录了,这个时候你就要看看其他设置了。。


下面是我的执行步骤:

E:\work\test>db2 +c insert into test select * from test1
DB21034E  该命令被当作 SQL 语句来处理,因为它是无效的“命令行处理器”命令。在
SQL 处理期间,它返回:
SQL0964C  数据库的事务日志已满。  SQLSTATE=57011

E:\work\test>db2 get db cfg |find "LOG"
目录高速缓存大小 (4KB)                (CATALOGCACHE_SZ) = (MAXAPPLS*5)
日志缓冲区大小 (4KB)                          (LOGBUFSZ) = 256
日志文件大小 (4KB)                          (LOGFILSIZ) = 50
主日志文件的数目                           (LOGPRIMARY) = 2
辅助日志文件的数目                          (LOGSECOND) = 8
已更改的至日志文件的路径                   (NEWLOGPATH) =
日志文件路径                                            = E:\DB2\NODE0000\SQL00
001\LOGSTREAM0000\
溢出日志路径                          (OVERFLOWLOGPATH) =
镜像日志路径                            (MIRRORLOGPATH) =
首个活动日志文件                                        = S0000047.LOG
磁盘上已满的块日志                    (BLK_LOG_DSK_FUL) = NO
非记录块操作                          (BLOCKNONLOGGED) = NO
事务使用的最大主日志空间的百分比        (MAX_LOG)= 0
1 个活动 UOW 的活动日志文件的数目        (NUM_LOG_SPAN) = 0
第一个日志归档方法                        (LOGARCHMETH1) = DISK:e:\db\testbak\
logarchmeth1 的归档压缩   (LOGARCHCOMPR1) = ON
logarchmeth1 的选项                        (LOGARCHOPT1) =
第二个日志归档方法                        (LOGARCHMETH2) = OFF
logarchmeth2 的归档压缩   (LOGARCHCOMPR2) = OFF
logarchmeth2 的选项                        (LOGARCHOPT2) =
在索引构建期间记录页                    (LOGINDEXBUILD) = OFF
日志 DDL 语句                           (LOG_DDL_STMTS) = NO
日志应用程序信息                        (LOG_APPL_INFO) = NO

左边为归档日志文件夹,右边为活动日志文件夹。

log.jpg



活动日志里的文件个数最多为10个。修改参数后db2 terminate ,然后再connect,活动日志文件夹只会有2个,因为我设置LOGPRIMARY
=2;
是活动日志满,因为前面的9个文件都顺序写完了,所以复制到归档里了,只有最后一个日志S0000056.LOG没有写完,只在活动日志里,没有在归档文件夹里;前面9个就算是回滚了,依旧在归档里。
这就是前面说的归档和提交、未提交、回滚都没有关系,只要这个文件写满了就被归档。收起
互联网服务 · 2012-05-19
浏览887

提问者

qichang
数据库管理员中国银联

问题状态

  • 发布时间:2012-05-17
  • 关注会员:1 人
  • 问题浏览:14920
  • 最近回答:2012-05-20
  • X社区推广