현업 업무 중 DB2의 메모리인 버퍼풀을 조정하기 위해 보통 Alter 명령을 사용한다.
예를 들면 아래와 같다.


db2 "alter bufferpool BP_8K size 2000"
db2 "select * from syscat.bufferpools"(버퍼풀의 조회)


근데 간혹 버퍼풀의 size를 조정할 때 위의 사이즈를 페이지단위가 아닌 바이트 단위로
착각하여 엄청난 크기의 버퍼풀을 생성하는 오류를 범할 수 있다.
(실제 현업에서 담당자가 위의 실수를 하여 운영 업무에 영향을 준적이 있다.)


문제는 DB2의 데이터베이스 Activate 시 실제 물리적메모리의 양을 초과하여 Paging을
유발 함으로써 DB접속이 상당히 오래 걸리거나 아예 안되는 상황이 발생할 수 있게 된다.
(실제 DB2 Activate 시 할당된 Bufferpool로 Shared Memory를 생성한다.)


이런 만약의 사태를 대비하여 DB2는 Resgistry 변수에 특별한 옵션이 존재 하며 이를 활용
하여 위의 사태를 해결할 수 있다.


DB2_OVERRIDE_BPF Registry 변수의 사용이다.


DB2SET DB2_OVERRIDE_BPF=1000(Page 단위)의 옵션을 사용하여 DB상의 설정된 버퍼풀로
Active 하는게 아니라 위의 옵션으로 Override하는 것이다.


다음은 위의 명령을 실행하는 절차이다.
====================================================================================
1. db2stop
2. db2set DB2_OVERRIDE_BPF=1000
3. db2stop
4. db2start
5. db2 activate db CNIDB
6. db2 "alter bufferpool BUFF size 1000"(기존에 하고자 했던 사이지로 재조정)
7. db2set DB2_OVERRIDE_BPF=
8. db2stop
9. db2start
10. db2 activate db CNIDB

 

+ Recent posts