Informix 日志分析


大家都知道informix是需要日志的,但各日志都做什么用,各有什么意义等等,我们在下面做一个探讨:

首先需要说明的是informix的日志有两种:一种是物理日志,用来存放数据的前映象;另一种是逻辑日志,用来存放所有事物的操作过程。

在初始化的配置中,物理日志和逻辑日志的不是存放在根的磁盘空间的。默认的大小物理日志2M,逻辑日志6个,每个日志文件2M。但在实际的生产环境中,这两个参数一般是需要调整的。

从informix的本身的建议来说,要求逻辑日志的大小一般是要求一天的业务量,逻辑日志滚一圈,物理日志/逻辑日志=1/3。但是有的数据量很大的业务系统,这样做是不可能的,要做适当的调整。

物理日志文件的个数仅为1,逻辑日志文件的个数最小为3,最大为32767。关于物理日志和逻辑日志的改变,我们可以使用onparams命令来完成。

C:\Informix>onparams --

Usage: onparams -a -d

  1<dbspace> [-s <size>] [-i] |   
  2  
  3-d -l <log file="" number=""> [-y] |   
  4  
  5-p -s <size> [-d <dbspace>] [-y]   
  6  
  7-a - Add a logical log file   
  8  
  9-i - Insert after current log   
 10  
 11-d - Drop a logical log file   
 12  
 13-p - Change physical log size and location   
 14  
 15-y - Automatically responds "yes" to all prompts 
 16
 17上面是onparams的帮助文件,下面我们首先来改变物理日志的位置和大小: 
 18
 19C:\Informix&gt;onparams -p -s 40000 -d phydbs -y   
 20  
 21Shutting down, please wait ...   
 22  
 23Initializing, please wait ...   
 24  
 25Recovering, please wait ... 
 26
 27可以通过onstat –l 中的phybegin来查看物理日志当前存在了哪个chunk上。Physize来查看当前物理日志文件大大小,单位是页。在这之前我们创建了phydbs,并指定了他大小。我们在-s后指定物理日志文件的大小,在-d后指定物理日志文件的位置。接着我们来做逻辑日志位置和大小的改变: 
 28
 29C:\Informix&gt;onparams -a -d logdbs -s 30000 -i   
 30  
 31Logical log successfully added. 
 32
 33然后用onstat –l来查看新加的逻辑日志:   
 34  
 35C:\Informix&gt;onstat -l   
 36  
 37IBM Informix Dynamic Server Version 9.40.TC2E1 -- Quiescent -- Up 00:08:10 -- 25728 Kbytes   
 38  
 39Physical Logging   
 40  
 41Buffer bufused bufsize numpages numwrits pages/io   
 42  
 43P-1 0 8 8 7 1.14   
 44  
 45phybegin physize phypos phyused %used   
 46  
 473:53 10000 12 0 0.00   
 48  
 49Logical Logging   
 50  
 51Buffer bufused bufsize numrecs numpages numwrits recs/pages pages/io   
 52  
 53L-3 0 8 37 14 14 2.6 1.0   
 54  
 55Subsystem numrecs Log Space used   
 56  
 57OLDRSAM 37 2628   
 58  
 59address number flags uniqid begin size used %used   
 60  
 610CB37CA8 1 U-B---- 1 1:763 500 500 100.00   
 62  
 630CB37CE8 2 U-B---- 2 1:1263 500 500 100.00   
 64  
 650CB37D28 3 U-B---- 3 1:1763 500 500 100.00   
 66  
 670CB37D68 4 U-B---- 4 1:2263 500 500 100.00   
 68  
 690CB37DA8 5 U-B---- 5 1:2763 500 284 56.80   
 70  
 710CB37DE8 6 U---C-L 6 1:3263 500 315 63.00   
 72  
 730CED8B98 12 A------ 0 2:37553 7500 0 0.00   
 74  
 750CED8B58 11 A------ 0 2:30053 7500 0 0.00   
 76  
 770CED8B18 10 A------ 0 2:22553 7500 0 0.00   
 78  
 790CED8AD8 9 A------ 0 2:15053 7500 0 0.00   
 80  
 810CED8A98 8 A------ 0 2:7553 7500 0 0.00   
 82  
 830CED8A58 7 A------ 0 2:53 7500 0 0.00   
 84  
 8512 active, 12 total 
 86
 87可以发现新加的逻辑日志状态都是A,先做0级备份ontape –s –L 0之后用onstat –l可以发现所有日志的flag位都变成了F状态。然后用onmode –l切换逻辑日志到新加的逻辑日志,用onmode –c强制做检查点操作。最后用onparams –d –l log_file_num –y来删除原来的逻辑日志文件。这样就完成了informix日志的迁移。 
 88
 89在onstat –l中,flag位表示了逻辑日志的状态, 
 90
 91A表示新加了还不能使用的日志   
 92  
 93F表示空闲的可以使用的日志,一般是在0级备份之后才有这样的状态   
 94  
 95U表示已经使用的逻辑日志   
 96  
 97L表示当前的日志文件包含一个检查点   
 98  
 99C表示正在使用当前的日志文件   
100  
101B表示已经备份的日志文件 
102
103一般在新增或删除日志文件之后都要做0级备份。 
104
105在onconfig文件中,LOGFILES指定了IDS逻辑日志的个数,LOGSIZE指定了逻辑日志的大小,PHYSDBS指定了物理日志的位置,PHYSFILE指定了物理日志大小。LTAPEDEV指定了逻辑日志备份的位置,LTAPEBLK指定了每个block块的大小,LTAPESIZE指定了备份文件的大小。 
106
107下面我们讨论数据库的日志模式:   
108  
109无日志   
110  
111无缓冲日志   
112  
113缓冲日志   
114  
115ansi模式 
116
117我们可以通过ontape 来改变日志的模式 
118
119采用无日志的方式时,所有的DML语句都不写日志,也就是说此时,数据库不支持事物。当数据库恢复系统备份的时候,无日志的数据库不能完全恢复。因为在备份中只记录了备份时的状态,备份后的数据库的变化必须从逻辑日志中恢复,所以这些改变是不可恢复的。 
120
121缓冲日志:所有的DML语句都写入log buffer,当log buffer写满的时候,就开始写入磁盘。这样就可以大大减少磁盘的I/O,从而提高数据库的性能。但是在系统发生问题恢复的时候,缓冲区内的数据将丢失。这些数据是不可能恢复的。 
122
123无缓冲日志模式:所有的 DML语句在发生的时候是写到缓冲里的,但事物commit之后就立刻写回磁盘,这样在系统发生问题就保证了数据丢失的最少,但是增加了磁盘的I/O,所以数据库的性能会受到一定的影响。 
124
125Ansi模式:此模式和无缓冲日志模式具有相同的日志缓冲处理方法,但是此模式是不可逆的。 
126
127另外BLOB日志的处理也是十分特别的,他不需要物理日志,不写前映象。BLOB页是直接写磁盘的,不经过共享内存的处理。任何BLOB空闲映象的改变都将记录到逻辑日志中,所有的blob spaces数据刷新到硬盘上是随逻辑日志的的备份而写下去的。</dbspace></size></log></size></dbspace>
Published At
Categories with 数据库类
Tagged with
comments powered by Disqus