Chinaunix首页 | 论坛 | 博客
  • 博客访问: 256002
  • 博文数量: 33
  • 博客积分: 2587
  • 博客等级: 少校
  • 技术积分: 675
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-13 16:05
文章分类

全部博文(33)

文章存档

2011年(2)

2010年(2)

2009年(13)

2008年(16)

我的朋友

分类: DB2/Informix

2009-06-16 10:47:29

输入:ontape -s -L 0
报错:Please mount tape 1 on /space1/informix/back/bak_db and press Return to continue ...
Archive failed - ISAM error:  An error has occurred during archive back up.
 
LOG里的相关日志:
10:22:21  IBM Informix Dynamic Server Version 9.40.FC3W1
10:22:21   Who: Session(8750968, , 19284, 1ad506c90)
                Thread(11503298, ontape, 1b26579d8, 5)
                File: rsarcutl.c Line: 120
10:22:21   Action: init_archive()/ALLOC()
10:22:21  stack trace for pid 21391 written to /tmp/af.8aaa01dc
10:22:21   See Also: /tmp/af.8aaa01dc
10:22:21  shmget: [EINVAL][22]: key 531e4805: invalid segment size
10:22:21  create_tcb: cannot allocate memory
10:22:21  Assert Failed: Invalid Mutex Type
10:22:21  IBM Informix Dynamic Server Version 9.40.FC3W1
10:22:21   Who: Session(8751016, , 19310, 1ac08c540)
                Thread(11503424, xchg_1.0, 1bb6a2068, 4)
                File: mt.c Line: 7747
10:22:21  stack trace for pid 21390 written to /tmp/af.8b2801dc
10:22:21   See Also: /tmp/af.8b2801dc, shmem.8b2801dc.0
10:22:22  ISAM error:  An error has occurred during archive back up.
 
并没有做什么操作,数据库就宕了,用oninit -v 重启时很顺利的就起来了。此时再作
数据库宕时的日志:
10:22:47  mt.c, line 7747, thread 11503424, proc id 21390, Invalid Mutex Type.
10:22:47  Fatal error in ADM VP at mt.c:12298
10:22:47  Unexpected virtual processor termination, pid = 21390, exit = 0x100
10:22:47  PANIC: Attempting to bring system down
10:33:04  IBM Informix Dynamic Server Started.
Tue Jun 16 10:33:09 2009
10:33:09  Event alarms enabled.  ALARMPROG = '/opt/informix/etc/no_log.sh'
10:33:09  Booting Language from module <>
10:33:09  Loading Module
10:33:09  Booting Language from module <>
10:33:09  Loading Module
10:33:16  Requested shared memory segment size rounded from 680KB to 1024KB
10:33:16  IBM Informix Dynamic Server Version 9.40.FC3W1   Software Serial Number AAA#B000000
10:33:18  IBM Informix Dynamic Server Initialized -- Shared Memory Initialized.
10:33:18  Physical Recovery Started at Page (2:964502).
10:33:19  Physical Recovery Complete: 0 Pages Examined, 0 Pages Restored.
10:33:19  Logical Recovery Started.
10:33:19  20 recovery worker threads will be started.
10:33:22  Logical Recovery has reached the transaction cleanup phase.
10:33:22  Logical Recovery Complete.
          0 Committed, 1 Rolled Back, 0 Open, 0 Bad Locks
10:33:24  Dataskip is now OFF for all dbspaces
10:33:24  (28) connection rejected - no calls allowed for srvinfx
10:33:24  listener-thread: err = -27002: oserr = 0: errstr = : No connections are allowed in Dynamic
 Server quiescent mode.
10:33:24  (29) connection rejected - no calls allowed for srvinfx
10:33:24  listener-thread: err = -27002: oserr = 0: errstr = : No connections are allowed in Dynamic
 Server quiescent mode.
10:33:24  (30) connection rejected - no calls allowed for srvinfx
10:33:24  listener-thread: err = -27002: oserr = 0: errstr = : No connections are allowed in Dynamic
 Server quiescent mode.
10:33:24  Checkpoint Completed:  duration was 0 seconds.
10:33:24  Checkpoint loguniq 159384, logpos 0x8b7b048, timestamp: -127564850
10:33:24  Maximum server connections 0
10:33:25  (31) connection rejected - no calls allowed for srvinfx
10:33:25  listener-thread: err = -27002: oserr = 0: errstr = : No connections are allowed in Dynamic
 Server quiescent mode.
10:33:25  On-Line Mode
10:33:25  Affinitied VP 3 to phys proc 1
10:33:25  Affinitied VP 4 to phys proc 0
10:33:25  Affinitied VP 5 to phys proc 1
10:33:25  Affinitied VP 6 to phys proc 0
10:33:25  Affinitied VP 1 to phys proc 0
10:33:30  Booting Language from module <>
10:33:30  Loading Module
10:33:53  Checkpoint Completed:  duration was 0 seconds.
10:33:53  Checkpoint loguniq 159384, logpos 0x8c06018, timestamp: -127557973
10:33:53  Maximum server connections 6
10:34:50  Checkpoint Completed:  duration was 0 seconds.
10:34:50  Checkpoint loguniq 159384, logpos 0xa8d1018, timestamp: -127339929
10:34:50  Maximum server connections 14
10:34:53  Level 0 Archive started on rootdbs, plogdbs, llogdbs,oddbs
10:35:28  Logical Log 159384 Complete, timestamp:-127095141.
为什么会重启???
 
 
 
 
 
7月1日零级备份再次失败,并从日志找到了如下内容:
0备报错如下:Archive failed - ISAM error:  An error has occurred during archive back up.
日志报错如下:
14:20:22  Maximum server connections 1313
14:20:22  shmget: [EINVAL][22]: key 531e4805: invalid segment size
14:20:22  out of virtual shared memory
14:20:22  Assert Warning: ISAM error:  An error has occurred during archive back up.

14:20:22  IBM Informix Dynamic Server Version 9.40.FC3W1
14:20:22   Who: Session(1807226, , 9775, 1b0501a08)
                Thread(2360181, ontape, 1b00f5f30, 3)
                File: rsarcutl.c Line: 120
14:20:22   Action: init_arcbu()/SCBMALLOC()
14:20:22  stack trace for pid 20348 written to /tmp/af.75d4625
14:20:22   See Also: /tmp/af.75d4625
14:20:22  ISAM error:  An error has occurred during archive back up.
从网上搜搜了一些虚拟内存的相关内容:
 
【导读】数据库管理员(DBA)都非常关注数据库的调优问题,本文通过对Informix IDS数据库虚拟处理器、内存和数据存储参数的描述和监控来介绍数据库的调优问题。 



Informix IDS数据库广泛的应用在金融、电信和邮政等各个行业中,它是一个多线程的关系数据库服务器,采用对称的多处理器技术和单处理器体系结构,并具有先进的技术、性能与高可靠性和高可用性。它为用户提供了动态系统管理工具来监控和管理数据库服务器。随着数据库数量的增加和应用处理交易量的增多,它的运行效率显得尤为突出。在硬件环境不变的情况下,数据库性能的提高也一直成为大家关注的话题。 

数据库系统性能通常与CPU、共享内存、数据的存储和网络设置等四个方面有直接的关系。下面着重介绍通过配置Informix IDS参数和监控Informix IDS运行效率,来提高数据库的性能。 

虚拟处理器参数的调整和监控 

Informix IDS对于虚拟处理器的分类,达到了十多种,每个虚拟处理器像操作系统的一个CPU允许多个进程服务于多个用户一样,也可以运行多个线程来为多个 SQL 客户机应用程序提供服务。其中最重要的虚拟处理器是CPU、AIO、网络处理器三种,在这三种服务器中,CPU虚拟处理器(CPU VP)是最重要的,它驱动其他虚拟处理器,如磁盘 I/O 虚拟处理器(AIO VP)和 IDS 会话中的所有线程。AIO VP的功能是在 SQL 语句访问或更新数据库数据时,执行磁盘 I/O。网络处理器涉及到数据库服务器的客户机或用户连接。可以进行两种类型的连接:共享内存连接和网络连接。下面分别介绍这三种类型的参数。 

1.CPU虚拟处理器(CPU VP)的参数 

NUMCPUVPS:定义了Informix IDS 开始启动的CPU VP的数量。一般情况下不能超过系统CPU的个数,对于单或双CPU的计算机系统,建议设置NUMCPUVPS是1或者2,即使用一个或两个CPU VP;对于有4个以上CPU,建议设置NUMCPUVPS的值等于处理器总数减1。 

SINGLE_CPU_VP:定义了多CPU VP(0)和单CPU VP(1)设置。 

MULTIPROCESSOR:定义了多个CPU VP(1)还是单个CPU VP(0)。 

AFF_NPROCS:定义了可以绑定到CPU VP的CPU的数目。 

AFF_SPROC:定义了把连续的几个CPU(AFF_NRPOCS参数定义的值)中第一个CPU的序号连接到CPU VP上。 

例如,某个Informix IDS系统所在的硬件平台有4个CPU,AFF_NPROCS设置为3(即可用于绑定CPUVP的CPU有3个),NUMCPUVPS设置为3,AFF_SPROC设置为1,则3个CPUVP需要绑定到CPU上,是从第2个CPU开始,绑定到第二、三、四个CPU上。SINGLE_CPU_VP设置为0。 

2.对于磁盘I/O虚拟处理器(AIO VP)的配置 

NUMAIOVP 指定系统上 AIO/KAIO 虚拟处理器的数目,如果Informix IDS采用裸设备存储,可以设置成2。 

在Informix IDS9.2以后的版本中将NUMCPUVPS、NOAGE、AFF_NPROCS、AFF_SPROC、NUMAIOVP用VPCLASS参数代替。当Informix IDS处于online的状态下,可以使用onmode -p (+/-)#来增加或者减少虚拟处理器。#代表增加或者减少虚拟处理器的个数。 

3.对于网络处理器参数的配置 

NETTYPE:定义了Informix IDS的连接类型和连接可以连接的轮询线索数目。如果sqlhosts文件中支持一个以上的接口或协议的连接,就必须对每个连接类型规定独立的NETTYPE参数。 

轮询线索可以在两类VP上运行:NET VP和CPUVP。为得到最佳性能,Informix建议使用NETTYPE表项为CPU VP类只分配一个轮询线索,将其余轮询线索轮询线索分配给NET VP。分配给任何一种连接类型的轮询线索不得超过NUMCPUVPS的取值。 

NETTYPE的配置格式如下:NETTYPE connection_type,poll_threads,c_per_t,vp_class 。其中,connection_type 标识轮询线索分配的连接协议;poll_threads是分配给该连接类型的轮询线索数目,对任何连接类型,这个值不能超过NUMCPUVPS值;c_per_t 是每个轮询线索的连接数目,可以用如下公式计算这个值:c_per_t=connections/poll_threads;connections 是所希望指定的连接类型支持的最大连接数。对于共享内存连接(ipcshm),该值应该加倍以获得最好的性能;vp_class 是可运行轮询线索的VP类,如果CPU VP上只运行一个轮询线索,那么指定为CPU VP。 

在对虚拟处理器的监控中,可以通过系统的一些命令,也可以通过数据库的一些命令,常用的数据库命令是onstat-grea和onstat -g ioq。 

以下是onstat -g rea的输出: 

/usr/informix >onstat -g rea 

Informix Dynamic Server Version 9.30.FC5 -- On-Line -- Up 36 days 00:22:32 - 

- 5352416 Kbytes 

Ready threads: 

tid tcb rstcb prty status vp-class name 

onstat -g rea监控了就绪队列中的线程数目。包括准备运行而且在等待资源的线程。理想的状态下是输出极少的条目或者不显示任何条目。如果输出的某种 VP 类条目持续增长, 那么就要考虑在该类中添加VP。 

在onstat-g iog指令的输出中,最需要关注的列是len列。len列的值应该总是为 0 或接近于 0。如果该列的值很高并持续增长,那么我们可能需要添加另一个 AIO/KAIO 虚拟处理器来减少磁盘 I/O 负载。 

监控虚拟处理器的方法比较多,可以使用Informix IDS查询语句在系统表中找到虚拟处理器的使用情况:还可以在Unix操作系统中使用系统命令sar、top等来监控操作系统的CPU使用情况;还可以在一段时间内的重复执行Informix IDS命令onstat-g glo来监控各个虚拟处理器已占用的CPU资源。判断CPU的忙闲。 

内存使用效率的参数调整和监控 

Informix IDS 使用的内存部分被数据库服务器线程以及其他用户和虚拟进程共享,所以这部分的内存叫做共享内存,共享内存减少磁盘 I/O, 提供了最快地进行进程间通信的方法,还可以使数据库服务器减少总的内存使用。 

Informix IDS共享内存分为四个部分:驻留部分、虚处理部分、消息部分和虚拟扩展区部分,其中消息部分只有在客户机和服务器采用共享内存方式连接时才有,而且尺寸很小。虚拟扩展区也极小,它包含了用于 DataBlade 模块的线程 heaps 和其他在用户定义的虚拟处理器中运行的用户定义例程。 

1.驻留内存部分的参数 

驻留内存部分又可以细分为:共享内存头、缓冲区,逻辑日志缓冲区、物理日志缓冲区、锁。 

共享内存头在共享内存中包含所有其他结构的描述,还包含到这些结构位置的指针共享内存头是在初始化 Informix IDS 时创建的,并且不能进行调优。 

缓冲区存储 Informix IDS 从 dbspace 所读取的数据,是数据库对象数据,如表的数据或索引数据。缓冲区占用了驻留内存中最大的部分。所有的缓冲区被组织到一个较长的最近最少使用(least-recently-used,LRU)缓冲区队列中,并通过最近最少使用(LRU)机制进行管理。定义缓冲区的参数是BUFFERS。称作指定共享内存缓冲区的最大数目,该参数对数据库I/O和事务处理吞吐量有明显的影响。但是,如果分配过多的缓冲区会影响到操作系统的内存并导致过多的交换内存页面的活动。一般建议设置为物理内存的20%到25%。 

逻辑日志缓冲区是用来存储最后一次备份开始的逻辑日志记录的。逻辑日志记录保存了 SQL 语句对数据库数据进行的修改。在初始化Informix IDS 时,它创建三个逻辑日志缓冲区,以循环方式运作,来确保将获得的每一条逻辑日志记录都被刷新到磁盘中。LOGBUFF定义了逻辑日志缓冲区的数量,缓冲区的大小决定了它被添满的频率,从而决定了它必须被刷新到硬盘上的逻辑文件中的频率。一般情况下,Informix IDS建议设置为16KB或32KB 

物理日志缓冲区在Informix IDS修改或着删除记录之前,将该记录的原始值存入到物理日志缓冲区中,在事务失败时,用于恢复数据,以保持数据的一致性。在Informix IDS初始化时,创建了两个物理日志缓冲区,也以循环的方式运作。与物理日志缓冲区对应的参数是PHYSBUFF。 

锁包含可用锁的数量,每个用户对数据库的连接并执行数据库的操作,都需要一定数量的锁。在Informix IDS9.2以后的版本中,当用户的锁不够时,可以动态的分配锁的数量。在以前的版本中,该数值是固定不变的。与锁对应的参数是LOCKS。一般情况下设置为2000到8000000个。 

2.共享内存虚拟存储区的参数 

共享内存虚拟存储区存储各种各样的不同数据,可以分为:内部表、较大的缓冲区、会话数据、线程数据(堆栈和堆)、数据分布缓存器、字典缓存器、SPL 例程缓存器、SQL 语句缓存器、排序池、全局池。 

影响虚拟存储区的参数是:SHMADD、SHMVIRTSIZE 、STACKSIZE。 

SHMVIRTSIZE定义了分配给Informix IDS共享内存的虚拟存储区的大小。Informix IDS在处理大型查询或高峰负荷的需要增加共享内存给虚拟存储区,但是共享内存的分配需要增加事务处理的时间,故在设置SHMVIRTSIZE值时,一般考虑能满足一个日常操作的需要。 

STACKSIZE指示了数据库服务器为每个活动线程指派的初始堆栈的大小。如果将该参数配置得过小,那么线程将无法拥有执行其程序的足够内存空间,而且它将干扰其他线程。 

SHMADD定义了Informix IDS自动加到虚拟存储区的共享内存增量的大小。在增加共享内存时,要占用CPU周期;每次的增加量越大,增加次数就越少,留给其它的进程的内存也越少。所以一般采用大的增加量。但是在内存负荷很重时,少量增加使其他程序更好的共享内存资源。所以,如果实际内存小于等于256MB,则建议SHMADD使用缺省值8192KB;如果在256MB到512MB之间,则设置为16384KB;如果大于512MB,则设置为32768KB。 

可以用命令 onstat -g seg来显示 IDS 当前共享内存虚拟区中的段的数目。 

Informix IDS在初始化时,如果定义的虚拟内存区尺寸太小,会自动向虚拟区附加其他操作系统段,虚拟内存中的段过多从而引起数据库的整体性能下降。所以在初始化时,将虚拟内存区的尺寸配置得足够大,以避免进行动态的分配共享内存段。在该列的输出中,class列为R是驻留内存段,V是虚拟内存段,M是消息内存段。如果显示的虚拟内存段多于三个,那么就需要提高配置文件中 SHMVERSIZE 参数的值。 

命令 onstat -p是监控内存的另一个命令。其输出结果中的两个%cache显示了读写高速缓存比例的百分比,一般在80%到90%之间,如果低于80%,要调节BUFFERS参数值。ovlock 字段表明 IDS 在使用了最大数量的锁之后尝试过再使用锁的次数,如果该数字非零,可能需要提高配置文件中 LOCKS 参数的值。ovbuf 字段表明 IDS 在使用了最大数量的缓冲区之后尝试过再使用缓冲区的次数。如果该数字很大,比如说超过 100000,就需要提高 BUFFERS 参数,以便用户在需要从磁盘访问数据时不必等待缓冲区。在监控内存的使用情况时还可以采用Unix系统命令vmstat。 
 
 (确定数据库内存的分配是否足够)

  参数:BUFFERS、SHMVIRTSIZE、LOCKS、LRUS

  查看数据库是否使用内存正常:

  $ onstat  -p

  是否有ovbuff

  $ onstat  -m

  查看是否有动态增加的虚拟内存

  查看数据库的内存分配情况

  $ onstat  -g  seg

  $ ipcs -m

  查看连接的session内存分配情况

  $ onstat  -g  ses

  对于内存分配大的用户session,需要分析其原因


阅读(4855) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~