본문 바로가기

Note

[성능] SQL 성능 분석 DB2에서는 수행된 SQL을 분석할 수 있는 db2 벤치마크 도구를 제공한다. db2batch 라는 도구를 통하여 SQL이 수행된 시간, SQL이 수행되면서 사용된 bufferpool 정보들도 확인이 가능하다. 다양한 옵션이 많지만 장황하지 않는 선에서 다음과 같이 명령어를 정리해 본다. db2batch -d 데이터베이스 -f SQL_파일명 -a ID/PWD -m 변수값 -z 출력_파일명 -iso cs -car cc -o r 1 p 2 e yes 가장 간단한 옵션은 –f 옵션까지만 주어서 SQL문을 실행시키면 된다. 원격에서 실행하는 경우 –a 옵션을 주어 접속 계정 정보를 명시적으로 지정하고, –m 변수를 통하여 동적 SQL을 수행할 수도 있다. jennifer 등을 통하여 실행된 동적SQL의 변수 값.. 더보기
[설치] 리눅스 환경에서 고려해야 될 parameter 리눅스 환경에서 DB2 설치를 하여 사용하는 경우 고려해야 되는 parameter가 존재한다. 1. randomize_va_space = 0 DB2는 “자체 메모리 주소 체계”를 만들어 주소를 관리하도록 설계되어져 있다. 그래서 db2pd –osinfo 에서 "virtual memory” 라고 메모리 항목이 표현된 것을 볼 수 있다. DB2에서 메모리 주소를 가상화해서 사용하다보니, OS 레벨에서 메모리 주소가 가상화 되어지는 것을 메모리 관리 안정성 면에서 위험할 수 있다고 보는 것 같다. 그래서 IBM TechNote에서 리눅스 운영체제에서 랜덤 주소 공간 사용을 하지 못하도록 설정을 권장하고 있다. 개인적으로 운영 서버의 경우 설정될 필요가 있다고 생각이 든다. (개발이나 테스트 용도의 경우는 별도.. 더보기
[관리] row migration 과 row chain DB2의 데이터 관리는 page 단위로 이뤄진다. 그리고 지원하는 page 크기는 4K, 8K, 16K, 32K 가 존재한다. 이번 달에 출시된 V10.5 에서는 페이지 크기를 넘는 row를 기존 페이지에 관리할 수 있는 기능이 지원되었지만, 이런 page 단위의 데이터 관리는 IO 성능 관리에서 중요한 부분을 차지한다. DB2에서는 여러 page에 데이터가 분리되어 들어가는 것을 허용하지 않기 때문에 데이터 단편화(?) 가 발생하지 않는다. 반면, 테이블을 생성 전 어떤 페이지 크기로 사용할 것인지 고민이 필요하다. 이런 데이터 단편화에 대한 의미는 2가지로 구분을 할 수 있는데, 일반적으로는 “row chain”으로 인식이 되는 것 같다. 그래서 경쟁사에 비해 DB2는 데이터 단편화가 발생하지 않는다.. 더보기
[설치] 비루트 설치 DB2 V9.5 (Viper II) 부터 root 이외 계정으로 설치가 가능해졌다. 특정 고객사 설치 작업 시, root가 필요한 사유를 작성해야 되는 경우가 있었으니, non root 설치 방식 지원은 업무 진행에 도움이 될 것이다. 비루트 설치의 제약사항은 DB2 설치 시 인스턴스 구성이 된다는 점이다. (1 엔진에 1 인스턴스 구성만 가능) 어떤 의미에서는 엔진과 인스턴스가 붙어있다고 말할 수 있을 것 같다. 설치 후를 비교하면 다음과 같은 차이가 있다. 1. root로 수행되는 프로세스의 소유자 # root 설치 인스턴스 $> db2_ps UID CMD db2inst - 113:50 db2sysc 0 root - 0:00 db2ckpwd 0 root - 0:00 db2ckpwd 0 db2inst .. 더보기
[관리] 테이블 상태 확인(SQL0668N) 테이블 구조가 변경되거나, 정규화가 되어 RI가 존재하는 테이블을 사용하고 주기적으로 LOAD 작업이 발생한다면 SQL0668N 에러 메시지를 받게 될 것이다. 이런 경우는 테이블 상태 체크를 신속히 파악해야 되는데, 관리 뷰(AdminTabInfo)를 통해서 작업이 가능하다. SELECT CASE LOAD_STATUS WHEN 'PENDING' THEN 'Load Pending' WHEN 'IN_PROGRESS' THEN 'I' ELSE 'N' END , CASE REORG_PENDING WHEN 'Y' THEN 'R' ELSE 'N' FROM SYSIBMADM.ADMINTABINFO WHERE TABSCHEMA = ‘스키마’ AND TABNAME = ‘테이블’ AND TABTYPE='T' ; 데이터 .. 더보기
[설치] Activation Code 및 버전 EOS 가끔씩이기는 하지만 파트너 사 아니면 DBA 분들로부터 위 2가지 관련한 문의를 받는다. 이미 V9.1 Viper는 2012년 4월 말 End Of Service가 되었고, 내년 V9.5 Viper2가 EOS된다. 현재 가장 많이 쓰이는 버전은 V9.7 코브라라고 할 수 있고, V10.1(갈릴레오)이 최신버전이라 할 수 있겠다. 금년 여름 V10.5 케플러가 출시된다는 소식이 있으니 IBM에서 고속 성장을 하고 있는 제품이라 할 수 있겠다. 1. 라이센스 파일 및 Activation Code 일반적으로 DB2 Edition 유형은 WSE, ESE, AESE 정도가 일반적인데, IBM Tech Note를 보면 많은 License가 존재한다. DB2 라이센스는 시리얼 키 값이 아닌 Activation.zip.. 더보기
[설치] CentOS 6 64bit에서 DB2 V10.1 설치를 위한 Library 설정 Red Hat Enterprise Linux 및 Cent OS에서 DB2를 설치를 하려고 db2prereqcheck 를 실행하면 libstdc++.so.5 와 /lib/libpam.so 가 없다고 메시지를 준다. 특히 64bit 운영체제에서 설치하는 경우 32bit rpm을 요구를 한다. 만일 해당 운영체제에 64bit 라이브러리가 설치되어져 있는 경우 32bit 라이브러리를 다음과 같은 방법으로 편하게 설치할 수 있다. 1. libstdc++ 라이브러리 #> rpm -qa | grep libstdc (설치된 library 확인) libstdc++-4.4.7-3.el6.x86_64 compat-libstdc++-296-2.96-144.el6.i686 compat-libstdc++-33-3.2.3-69.e.. 더보기
[SQL] 테이블 함수 PD_GET_DIAG_HIST 로 진단로그의 MSG 컬럼 데이터 줄바꿈 변경 방법 db2의 진단로그(db2diag.log) 파일은 db2diag 유틸리티와 –fmt 옵션으로 포맷을 수정할 수 있다. 이외에도 테이블 함수를 사용해서 진단로그 내용을 SQL 방식으로 조회가 가능하다. 단 문제는 MSG 컬럼의 내용이 “줄바꿈”처리 되어 있는 경우 결과 값이 흐트러져서 나오는 문제점이 있다. 이 경우는 db2diag –fmt 옵션으로 볼 때도 마찬가지로 줄이 바뀌어져서 흐트러진다. 테이블 함수로 “줄 바꿈”하지 않고 처리할 수 있는 방법을 생각하다가 다음과 같은 함수를 사용해서 줄바꿈처리를 못하도록 변경할 수 있었다. select varchar(replace (MSG, CHR(10),’ ‘),1024) msg from TABLE(PD_GET_DIAG_HIST(‘MAIN’,’D’,’’,CAST.. 더보기
[SQL] 오라클 호환성 VARCHAR2 오라클 포팅작업을 하다보니 오라클 호환성 기능에 대해 새롭게 살펴보게 되는 것 같다. 오라클에서는 숫자형으로 선언된 컬럼에 공백값(‘’)을 입력하면 NULL 값 처리가 된다. DB2에서는 공백값을 입력하면 형 변환 오류가 발생하여 입력이 실패한다. 만일 문자열로 된 숫자 값 (예: ‘1234’) 식의 값을 입력하면 자동 캐스팅 되어 입력된다. iBatis에 대해서는 잘 모르지만, DBMS Migration 작업을 하다보면 XML 문서에 SQL문들을 모아 놓고 dynamic 하게 SQL을 실행하는 환경을 보게 된다. 아마도 XML문서에 값들도 동적으로 받아 처리되도록 하다보니, 매개변수의 데이터 유형이 DB에 선언된 컬럼 유형과는 다르게 지정되는 경우가 많다. (아마도 개발편의성 때문에 대부분은 VARCH.. 더보기
[권한] 사용자에게 테이블 생성 및 DML만 하게 하려면? DB2는 OS 사용자를 대상으로 권한/특권 부여하여 관리한다. 따라서 계정 인증처리는 db2ckpwd 프로세스를 통하여 처리된다. 권한/특권 부여는 인스턴스 레벨 (OS 그룹을 dbm cfg 구성 변수에 설정), DB 레벨, 테이블 공간 등의 하위 object 레벨로 이뤄진다. 대부분은 DB 레벨에서만 권한 관리하는 방식으로 고객에게 제시를 하는 편이여서, 하위 object에 대한 특권 관리를 자세히 보지는 않았었다. 고객으로부터 특정 사용자가 테이블 생성, DML, LOAD 정도만 되도록 권한 관리 방안을 요청해 와서 살펴 보았다. V10.1에서는 V9보다 조금 더 DB레벨 권한 종류가 다양해졌다. 모든 권한을 다 테스트해 본 것은 아니지만, DATAACCESS 권한이 상당히 비중이 큰 권한이라는 것을.. 더보기