hotmail
作者hotmail·2015-01-22 17:24
软件开发工程师·hotmail

因系统资源耗尽导致DB2数据库crash无法启动故障诊断

字数 5950阅读 4413评论 2赞 0

数据库crash后无法启动,启动时报如下错误:SQL1072C  数据库管理器资源处于不一致状态。数据库管理器可能已被不正确地终止,或者另一个应用程序使用系统资源的方式与数据库管理器使用系统资源的方式发生冲突。
具体解决步骤如下所示:
一、通过检查db2diag.log日志发现如下错误信息:
2015-01-15-21.16.45.815270+480 I192752690A2038    LEVEL: Error (OS)
PID     : 11076548             TID  : 258         PROC : db2sysc 0
INSTANCE: db2inst1             NODE : 000
EDUID   : 258                  EDUNAME: db2sysc 0
FUNCTION: DB2 Common, OSSe, ossErrorMemoryAnalysis, probe:100
CALLED  : OS, -, fork
OSERR   : ENOMEM (12) "Not enough space"
DATA #1 : String, 72 bytes
A total of 5 analysis will be performed :
 - ulimit info
 - Memory info
DATA #2 : String, 381 bytes
Current process limits (unit in bytes except for nofiles) :
  mem     (S/H) = unlimited / unlimited
  core    (S/H) = unlimited / unlimited
  cpu     (S/H) = unlimited / unlimited
  data    (S/H) = unlimited / unlimited
  fsize   (S/H) = unlimited / unlimited
  nofiles (S/H) = unlimited / unlimited
  stack   (S/H) = 4294967296 / 4294967296
  rss     (S/H) = unlimited / unlimited
DATA #3 : String, 41 bytes
current sbrk(0) value: 0x0000001f0e881480
DATA #4 : String, 118 bytes
System RAM information (in megabytes) :
  Total       = 39936
  Free        = 69
  Available   = -1
  Addressable = -1
DATA #5 : String, 69 bytes
Swap space information (in megabytes) :
  Total = 16384
  Free  = 480
DATA #6 : String, 115 bytes
Virtual Memory Information (in megabytes) :
  Total     = 56320
  Reserved  = -1
  Available = -1
  Free      = 549
CALLSTCK: (Static functions may not be resolved correctly, as they are resolved to the nearest symbol)
  [0] 0x0900000007749F2C pdOSSeLoggingCallback + 0x34
  [1] 0x09000000014B4CC4 oss_log__FP9OSSLogFacUiN32UlN26iPPc + 0x1C4
  [2] 0x09000000014B51A0 ossLogSysRC + 0xA0
  [3] 0x09000000014D4924 ossErrorMemoryAnalysis__FCPC21OSSErrorAnalysisParam + 0x744
  [4] 0x09000000014D5DD4 ossErrorAnalysis@AF12_1 + 0x34
  [5] 0x0900000009BD1D30 sqloSystemErrorHandler + 0x3E0
  [6] 0x0900000009BDE5A0 sqloSystemErrorHandler@glue7E8 + 0x154
  [7] 0x090000000732D6A8 @83@sqloexecs__FPCcN21iPiT4CP19SQLO_NPIPE_HANDLE_TT7 + 0x280
  [8] 0x0900000007EC5064 sqloexec2 + 0x2C
  [9] 0x0900000007ED1B88 sqloInitializeVendorProcess + 0x3BC
 
2015-01-15-21.16.45.831607+480 I192754729A567     LEVEL: Error
PID     : 11076548             TID  : 258         PROC : db2sysc 0
INSTANCE: db2inst1             NODE : 000
EDUID   : 258                  EDUNAME: db2sysc 0
FUNCTION: DB2 UDB, oper system services, sqloInitializeVendorProcess, probe:200
MESSAGE : ZRC=0x870F00FA=-2029059846=SQLO_MEMORY_LIMIT
          "no memory to create process"
DATA #1 : String, 30 bytes
Error creating vendor process.
DATA #2 : String, 33 bytes
/home/db2inst1/sqllib/bin/db2vend
DATA #3 : String, 23 bytes
PD Vendor Process - 258
我们通过以上日志分析猜测可能的原因是由于操作系统内存资源耗尽导致系统强制杀死所有非关键进程导致数据库崩溃。
二、我们通过AIX通过系统日志进一步验证
1、使用errpt -dS 显示最近错误列表
2、使用errpt -aj 查看时间点最近的错误日志信息
LABEL:          PGSP_KILL
IDENTIFIER:     C5C09FFA

Date/Time:       Thu Jan 15 21:16:32 GMT+08:00 2015
Sequence Number: 2752
Machine Id:      00C3F6744C00
Node Id:         cbusdbst
Class:           S
Type:            PERM
WPAR:            Global
Resource Name:   SYSVMM         

Description
SOFTWARE PROGRAM ABNORMALLY TERMINATED

Probable Causes
SYSTEM RUNNING OUT OF PAGING SPACE

Failure Causes
INSUFFICIENT PAGING SPACE DEFINED FOR THE SYSTEM
PROGRAM USING EXCESSIVE AMOUNT OF PAGING SPACE

        Recommended Actions
        DEFINE ADDITIONAL PAGING SPACE
        REDUCE PAGING SPACE REQUIREMENTS OF PROGRAM(S)

Detail Data
PROGRAM
db2fmp
USER'S PROCESS ID:
              21889096
PROGRAM'S PAGING SPACE USE IN 1KB BLOCKS
           0
通过以上红色的信息,我们可以确认当时的确是因为AIX操作系统内存资源耗尽后,SYSVMM主动杀死了db2sys进程释放内存资源。
三、如何恢复数据库到一致性状态
1、杀死所有db2实例下的相关进程:db2_kill
2、清除内存中的相关进程的缓存信息:ipclean
3、启动db2:db2start 启动成功
四、那么为何会产生此类问题
我们通过检查db2数据库参数的设置发现如下问题:
db2inst1:/home/db2inst1>db2 get dbm cfg|grep -i mem
 Size of instance shared memory (4KB)  (INSTANCE_MEMORY) = AUTOMATIC(9066483)
db2的实例级内存请求设置为了automatic从而导致当db2在遭遇过载服务时,过渡的向系统申请资源从而导致操作系统内存资源耗尽问题的发生,最终导致了数据库实例的crash。
五、如何避免此类问题的再次发生
为避免此类问题的发生我们可以调整实例内存参数为固定值即可
db2 update dbm cfg using INSTANCE_MEMORY 9066483

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论2 条评论

flywiththewindflywiththewind其它easy world
2015-01-29 17:42
我想问下,在生产系统中,instance_memory你是自动呢还是固定值。我们这里是自动的
drdb2drdb2系统工程师se
2015-01-23 05:28
nice
Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广