DB2 구축 작업을 하면, 동시접속자수를 고려하여 maxuproc(AIX) 등의 OS 레벨의 변수 값을 검토하게 된다.

DB2 인스턴스 레벨에서는 MAX_COORDAGENTS 변수의 값으로 조정을 하게 되는데, 현재는 기본 값이 Automatic 이기 때문에 크게 고려할 필요가 없게 되었다.

 

그런데 pureScale 환경에서는 동시접속 관련하여 고려해야 될 변수가 있다.

클라이언트 친화성(Client Affinity) 방식 및 자동 워크로드 밸런싱(WLB) 방식 중 어느 방식이 pureScale 이중화 구성에 권장되는지는 알 수 없지만 WLB 방식인 경우 dsdriver 설정 파일에 maxTransports 값을 고려해야 된다.

 

V10.1 FixPack 0 (GA) 버전에서는 기본 값이 80 이였고, FixPack 1에서는 기본 값이 1000으로 변경되었다.

 

만일 설정 값 보다 접속 수가 초과하는 경우 –4210 에러 메시지(SQLSTATE=57033)를 Application에서 받게 되고, 진단로그(db2diag.log)에는 접속이 강제로 끊어지는 메시지(Detected client termination, ZRC=0x00000036=54)가 기록된다.

 

현재로서는 어느 정도 설정하고 쓰는지 알 수 없으나, maxTransports 변수 값은 WAS 및 업무 담당자와 협의를 통해서 설정되어져야 하겠다.

 

진단로그 오류메시지

2013-03-20-17.53.00.994278+540 I79184627A574        LEVEL: Error
PID     : 12190138             TID : 51181          PROC : db2sysc 1
FUNCTION: DB2 UDB, common communication, sqlcctcptest, probe:11
MESSAGE : Detected client termination
DATA #1 : Hexdump, 2 bytes
0x070000035ABEE222 : 0036 


2013-03-20-17.56.04.862158+540 I79264650A547        LEVEL: Error
PID     : 40108300             TID : 51479          PROC : db2sysc 0
FUNCTION: DB2 UDB, base sys utilities, sqeAgent::AgentBreathingPoint, probe:10
CALLED  : DB2 UDB, common communication, sqlcctest
RETCODE : ZRC=0x00000036=54

 

참고 문서

1. IBM APAR ( http://www-01.ibm.com/support/docview.wss?uid=swg1IC80398)

IC80398: INTERMITTENT -4210 ERRORS FOR TRANSPORT TIMEOUT WHEN MAXTRANSPORTS EXCEEDS MAX CONCURRENT APPLICATION CONNECTIONS.

 

2. IBM DeveloperWorks (AIX 기반 DB2 튜닝 사항)

  http://www.ibm.com/developerworks/aix/library/au-DB2AIXPERF.html 

 

3. 정보센터 참고 문서

http://pic.dhe.ibm.com/infocenter/db2luw/v10r1/index.jsp?topic=%2Fcom.ibm.db2.luw.apdv.cli.doc%2Fdoc%2Fc0056065.html&resultof%3D%2522%256d%2561%2578%2554%2572%2561%256e%2573%2570%256f%2572%2574%2573%2522%2520%2522%256d%2561%2578%2574%2572%2561%256e%2573%2570%256f%2572%2574%2573%2522%2520

 

http://pic.dhe.ibm.com/infocenter/db2luw/v10r1/index.jsp?topic=%2Fcom.ibm.db2.luw.wn.doc%2Fdoc%2Fi0060385.html&lang%3Dko

pureScale에 구성된 인스턴스 상태를 보기 위해서 db2instance –list 를 수행하면 진단로그에 다음과 같은 메시지가 기록된다.

2012-10-02-08.34.14.156718+540 E14601321A556        LEVEL: Error
PID     : 26148990             TID : 65120          PROC : db2sysc 0

FUNCTION: DB2 UDB, high avail services, sqlhaGetInfoForClusterObject, probe:4596
RETCODE : ECF=0x9000053E=1879046850=ECF_SQLHA_RESOURCE_NOT_FOUND

              Resource not found

2012-10-02-08.34.14.158708+540 I14601878A671        LEVEL: Error
PID     : 26148990             TID : 65120          PROC : db2sysc 0


FUNCTION: DB2 UDB, high avail services, sqlhaCheckMountResourcesOnHost, probe:4115
RETCODE : ECF=0x9000053E=-1879046850=ECF_SQLHA_RESOURCE_NOT_FOUND
          Resource not found

2012-10-02-08.34.14.556145+540 E14603779A977        LEVEL: Error
PID     : 26148990             TID : 65120          PROC : db2sysc 0


FUNCTION: DB2 UDB, high avail services, sqlhaGetObjectAttribute2, probe:1200
MESSAGE : ECF=0x90000552=-1879046830=ECF_SQLHA_OBJECT_DOES_NOT_EXIST
          Cluster object does not exist

 

위의 메시지는 DB2 V10.1 FixPack0 에서 발생하였고, 고객사 환경에서만 나오는 메시지였다.

IBM LAB에서는 다음과 같은 답변을 주었다.

It indicates "not find dependencies for this resource" and it is a just information, and this message type is changed from "Error" to "Information" on V10.1fp1.

V10.1 FixPack1 에서 위의 메시지는 “Error”에서 “Info”로 변경되었으며, 위의 메시지는 무시해도 되는 메시지로확인되었다.

에러라고 봐야할 지, 경고 성 메시지로 메시지를 봐야할 지 개인적으로도 아리송하지만, pureScale 환경에서 진단로그(db2diag.log)에 다음과 같음 메시지를 볼 수 있다.

2012-10-08-15.18.39.607132+540 I35440458A354 LEVEL: Error

PID : 13107340 TID : 1 PROC : db2havend

INSTANCE: db2inst1 NODE : 000

HOSTNAME: dbcni2

EDUID : 1

FUNCTION: DB2 UDB, high avail services, GPFSCluster::refreshVersionInfo, probe:5127

DATA #1 : String, 37 bytes

detected DB2_CFS_GPFS_NO_REFRESH_DATA

pureScale에 구성된 member와 CF의 상태 확인을 위해 보통 db2instance –list 명령어를 사용한다. 그런데 위 명령어가 결과를 반환하는데 약간의 시간이 걸린다. 약 3초 정도…

그래서 실행 시간을 빠르게 하기 위해 DB2_CFS_GPFS_NO_REFRESH_DATA=true 설정을 .profile에 할 수 있다.

위 변수에 대한 정보는 찾아 볼 수 없다. 다만, db2instance –list 를 수행하는 시점에 최신의 데이터를 수집해서 가져 오느냐? 아니면 이미 수집되어 있는(아마도 DB2 내부적으로 주기적으로 수집을 해 놓는 간격이 있어서) 데이터를 가져 오느냐? 의 차이로 짐작하고 있다.

개인적으로 체감하기에 신속한? 결과를 가져오는 것 같지는 않지만, 이 변수를 설정하고 나면 진단로그에 위와 같은 메시지가 기록이 된다. (V10.1 FixPack 0 기준)

여러 가지 테스트를 해 본 바, DB2_CFS_GPFS_NO_REFRESH_DATA 가 적용되는 시점은 db2start 시점은 아니고 db2instance –list 적용 시점에 반영이 된다.

테스트한 환경에서는 . .profile 등을 수행하여 환경 변수를 적용했을 때는 적용되지 못했고, 새롭게 인스턴스 계정으로 switch 한 경우 적용되었다.

“클러스터 관리자 자원 상태가 불일치하므로 db2start가 실패했습니다.”

상세 설명

클러스터 관리자 자원 모델과 db2nodes.cfg 파일이 일치하지 않으므로 db2start 명령으로 프로세스를 시작할 수 없습니다. 클러스터 관리자와 동기화되지 않은 db2nodes.cfg를 수정하면(고의적으로 또는 비고의적으로) 이러한 불일치가 발생합니다.

불일치가 해결될 때까지 DB2 pureCluster 인스턴스 또는 새 자원을 시작할 수 없습니다. 이미 시작된 DB2 자원은 이 오류에 영향을 받지 않습니다.

처리방법

db2nodes.cfg 파일을 이전 구성(클러스터 관리자와 동기화된 구성)으로 복원하십시오. 이전 구성으로 복원할 수 없으면 클러스터 자원 모델을 복구하십시오. 이를 수행하려면 전역 db2stop을 발행하여 인스턴스를 중지하고 -repair 옵션을 사용하여 db2cluster 도구를 실행하십시오.

DB2 V10.1 pureScale 설치 후 사용 중, Infiniband Adapter 기능코드(Feature Code)가 다르게 물려 있어서 Adapter를 교체하는 작업을 하였다.

이후 db2start 시 SQL1517N 메시지가 발생하면서 기동되지 못하였다. db2cluster 명령어를 통하여 repair 작업을 하면서 정상화할 수 있었다.

root 사용자로 db2 엔진이 설치된 경로로 이동하여 다음과 같이 작업을 수행하였다.

#> cd /db2/v10.1/bin
#> ./db2cluster -cfs -list –domain  (클러스터 도메인 명 확인)
#> ./db2cluster -cm -repair –domain 도메인명

 

db2cluster –repair 옵션 시, tsa 클러스터 구성(quorum, domain) 관련하여 초기화 후 재 설정을 하는 것 같다.

오늘은 PureScale 상의 Instance 생성의 Tip을 말씀드리고자 한다.
보통 일반적인 DB2상의 Instance 생성법은 설치된 모듈이 있는 instance라는 디렉토리에서
db2icrt라는 스크립트를 이용하여 생성을 한다.

아래는 일반적인 인스턴스 생성법과 PureScale상의 인스턴스 법을 설명하겠다.
-s 옵션에 따라 ESE 제품의 인스턴스를 만들지 PureScale의 인스턴스를 만들지를 지정할 수 있다.

 ./db2icrt -s ese <dsf> -u dongbucni duongbucni

시나리오 요건 중 동종 , 이기종간의 DB Federation 테스트를 진행해 보려 하였다.
한층 업그레이된 PureScale에는 어떠한 새로운 기능들이 추가 되어 있을까?
하는 기대감을 갖고 테스트에 돌입 전이었다.

하지만 이론~ DBM Update를 치자 마자 난 할말을 잃었다.
=======================================================================================
 

update dbm cfg using FEDERATE YES
 

db2 " ? SQL1419N"

Reason Code 17      

 

         The following configuration parameters are not supported in a

         DB2 pureScale environment:

 

         

         *  DYN_QUERY_MGMT - Dynamic SQL and XQuery query management

         *  AUTO_STATS_PROF - Automatic maintenance

         *  FEDERATED - Federated database system support

         *  HEALTH_MON - Health monitoring


우리는 구성된 PureScale 시스템에 아래와 같은 테스트 시나리오를 만들었다.
그리고 하나씩 테스트를 진행 하면서 그에따른 결과를 얻어 내었다.
테스트 시나리오는 아래와 같다.(그 중 일부를 하나씩 공개 하도록 하겠다)
=====================================================================
1. Online Reorg
    -> 테스트 결과 PureScale에서는 지원되지 않는 기능이었다.

dongbucni/db2> db2 "reorg table db2.stock inplace"

SQL2216N  SQL error "-1419" occurred while reorganizing a database table or

its indexes.

보통 지원 되지 않는 기능들은 SQL1419 에러를 내며 그에 따른 Reason Code가
주르륵 딸려 나온다.
아직 Online Reorg가 지원 되지 않는 상황을 보면서 약간은 당황했다.
언제쯤 우리의 Pure는 완벽한 기능을 보유한 날이 올까?

하지만 그날을 기다리며 오늘도 난 PureScale과 함께 삽질을 하고 있다.

현재 상황을 정리하여 IBM LAB에 내부적으로 db2dump파일을 참조로 PMR Open했다
부디 좋은 결과 및 원인이 나와서 빨리 적용하였으면 한다.

수십번의 PureScale 의 설치 및 구성 작업이다.(한20번은 한것 같다)
이제는 눈감고도 설치가 가능할듯하다. 또한 덕분에 OS 커맨드도 다시 익히게 되었다.
여하튼 어제 DB엔진이 주저앉는 내용을 diag.log를 분석해본 결과 아래의 메세지를 확인할 수 있었다.
====================================================================================
2011-08-10-10.49.04.071637+540 I209380A547          LEVEL: Error
PID     : 1069300              TID  : 19791         PROC : db2sysc 0
INSTANCE: db2sdin1             NODE : 000
APPHDL  : 0-54                 APPID: *N0.db2sdin1.110810014834
AUTHID  : DB2SDIN1
EDUID   : 19791                EDUNAME: db2agntp 0
FUNCTION: DB2 UDB, base sys utilities, sqleagnt_sigsegvh, probe:9
MESSAGE : Error in agent servicing application with PRODUCT SIGNATURE:
DATA #1 : Hexdump, 8 bytes
0x07800000062F66D4 : 5351 4C30 3930 3834                        SQL09084
=====================================================================================
SQL09084의 내용을 찾아본 결과
IC74943: DB2_MEMORY_PROTECT ON PURESCALE, SIGNAL #11 ON CREATE DB 을 확인하였다(실제 우리의 상황과는 직접적인 관계가 없는 듯하나 참고로 넣는다.)
다음의 APAR를 참고하기 바란다.

APAR status
OPEN
Error description
DB21085I  Instance "regres3" uses "64" bits and DB2 code release
"SQL09084"
with level identifier "09050107".
Informational tokens are "DB2 v9.8.0.4", "s110227", "IP23283",
and Fix Pack
"4".
Product is installed at "/home/regres3/sqllib".
$ db2set DB2_MEMORY_PROTECT=YES

$ db2start
03/09/2011 12:00:20     1   0   SQL1063N  DB2START processing
was successful.
03/09/2011 12:00:22     2   0   SQL1063N  DB2START processing
was successful.
03/09/2011 12:00:22     0   0   SQL1063N  DB2START processing
was successful.
SQL1063N  DB2START processing was successful.

$ db2 create db aabbcc
SQL1032N  No start database manager command was issued.
SQLSTATE=57019

Signal #11
<SignalDetails>
Signal #11 (SIGSEGV): si_addr is 0x0700000065032020, si_code is
0x00000034
</SignalDetails>
<SignalHandlers>
</SignalHandlers>
$
Stack traceback unavailable.

Real stack is

<StackTrace>
-------Frame------ ------Function + Offset------
0x090000001F4B6F0C sqlpcLSN
0x090000001F4E6B84 sqlbgbLatchPageForWARM0xB04
0x090000001F4E7AF0 sqlbgbProcessTPL
0x090000001ECE9974 sqlpWriteToLog
0x090000001ECF5900 sqlpWriteLR
0x0900000024575A48 sqlpWriteLR
0x0900000024576170 sqlptwpl
0x090000001F7B78E0 sqlpxcm1
0x090000001F7A58B0 sqlptfrg
0x090000001F6C4DD0 sqlrr_appl_term
0x090000001E25C8EC AppStopUsing
0x0900000023D1DFAC sqleStartDb
0x0900000023D1FB38 sqleCreateDb
0x09000000245BFA00 sqleCreateEntries_sd
0x09000000245C0978 sqlecrea_agent_sd
0x09000000245B6D04 sqleSubCreateDb
0x0900000021B0C310 sqleSubRequestRouter
0x0900000021B14300 sqleProcessSubRequest
0x090000001DE16CB4 RunEDU
0x090000001DE04828 EDUDriver
0x090000001DE04B5C sqlzRunEDU
0x090000001DA1AA58 sqloEDUEntry
</StackTrace>

다시 설치 및 구성이 잘되었던 픽스팩3 , hdisk 의 Shared영역을 다른 부분으로 설치 후 DB를 만들어 보아도 같은 증상 이었다.아~~ 무엇이 문제일까? DISK , OS
25~6번의 설치와 DB구성 후 약간의 허무함을 느꼈다. 이것이 진정 오라클의 RAC를 견주는 제품이란 말인가?
다음에는 OS엔지니어와 함께 OS , DISK 구성을 다시 해야 하겠다.

OS 엔지니어의 도움으로 HDISK 를 다시 재구성했다.
오~ 깔끔하게 설치 및 클러스터 파일 시스템을 구성했다.
다음은 클러스터 파일 시스템 구성 명령어 이다

1) db2cluster -cfs -create -filesystem db_home -disk /dev/hdisk4 -mount /dbcni/dbhome
2) db2cluster -cfs -create -filesystem db_storage -disk /dev/hdisk2 -mount /dbcni/storage
3) db2cluster -cfs -create -filesystem db_tnxlog -disk /dev/hdisk5 -mount /dbcni/tnxlog

여기서 cluster 의 구성은 root 유저로 해야 한다.
물론 아래와 같이 db2 instance에게 권한은 주어야 겠죵~~

 1) chown -R db2sdin1:db2iadm1 /dbcni/dbhome
 2) chown -R db2sdin1:db2iadm1 /dbcni/storage
 3) chown -R db2sdin1:db2iadm1 /dbcni/tnxlog

자~ 이제 DB를 생성해 보자
과거에는 2node 구성으로 2member , 2cf 에 DB생성까지 완료 했지만
이제는 3node 2member , 1cf로 구성된 Purescale에 DB를 생성 하겠다.

 1)  db2 create database cnidb on /dbcni/storage dbpath on /dbcni/dbhome

두둥~~~
에러가 아니라 DB엔진이 내려갔다. 뭐야~~ 이건.
픽스팩4의 버그가 아직 있단 말인가? 하지만 예전 DB구성 성공까지 진행 되었던
픽스팩3도 마찬가지였다
구성된 클러스터에 DB만 생성하면 DB엔진이 주저 앉는다.
아~~ 이런







+ Recent posts