MS SQL Server 2005를 사용하는 서비스가 있습니다. 그동안 상세하게 튜닝을 하지 않았었는데, 이번에 컨설턴트분의 의견을 적극 반영하여 튜닝을 시도하게 되었습니다. 그 중에서 첫번째가 tempdb 설정입니다.

 기본 설치로 진행하게되면 tempdb는 다른 시스템데이터베이스와 마찬가지로  하나의 data file과 하나의 transaction log file(정확한 명칭인지는 모르겠습니다.)로 구성됩니다. 그런데 CPU가 여러개 설치되어 있다면 물리적인 CPU 갯수만큼 tempdb의 file을 추가해주는게 좋다고 합니다. 보통 코어수가 아닌 물리적인 CPU 갯수대로 해주는게 좋다는데, 상세한 아키텍쳐에 대한 설명은 내공이 부족해서 다음으로 미루겠습니다. 일단 제 경우에는 아래와 같이 설정해 줬습니다.

 CPU가 두 장인 IBM X 시리즈 서버에 MS SQL Server를 설치한 후 tempdb의 파일 설정을 한다고 가정하면
 1) 파일 개수 : 2개
 2) 기본 크기 : 128 MB
 3) 증가 값 : 2 MB씩 무제한 증가


 SQL Server를 사용하는 곳의 File 크기 설정을 보면 보통은 파일 크기가 기존 크기의 일정 비율로 증가하도록 되어있습니다. 저희도 그랬구요. 그런데 이렇게 되면 data file이 증가하는게 규칙성이 없이 마구잡이로 늘어나니까 안 좋다고 하더군요.
 그래서 외부 컨설턴트의 권고에 따라서 일정한 수치로 증가하도록 변경했습니다. 시스템 DB는 용량의 변화도 별로 없고... 뭐... 걍 기본 설정 그대로 두고 서비스에 사용하는 사용자 DB에만 적용했습니다. Oracle에 Data file 생성할 때 처럼 512MB... 뭐 이런식으로요.

 저희 시스템이 부하가 많이 걸리는 시스템이 아니라서 평소에 뭔가 효과를 본다는 느낌은 들지 않지만, 그래도 서버 튜닝 기법으로 많이 쓰이는, 그리고 어느정도 효과가 공인된 방법입니다. 다음에는 좀더 있어보이는 방법을 얘기해보겠습니다.  ㅋㅋ
Tibero4 migration 모험기 (4) 중간정리
Oracle DBA의 Tibero 사용기
 사용기나 감상문 정도로 적으면 될걸 굳이 모험기라는 조금은 부정적인 의미의 단어를 사용한건, Tibero라는 생소한 제품으로의 이전이 제게는 모험에 가깝다고 생각되어서입니다. 아주 주관적인 얘기니까 혹시 티맥스 관계자분들이 보시면... 걍 얘가 겁이 많구나... 이 정도로 생각하시면 됩니다. 현재 Tibero를 아주 잘 사용하고 있습니다. ^^

 그동안 Oracle을 사용하다가 Tibero RDBMS로 이전을 하기로 결정이 내려졌고, 현재 하나의 시스템을 제외하고는 Tibero로 이전을 하였습니다. 처음 Tibero를 접했을때는 너무 자료가 없고, 폐쇄적이라 테스트 해보기 힘들었다는게 문제였고, 실제 서비스에 일부 사용하고 있는 현재는 타업체의 DB, 솔루션과 함께 사용할때 생기는 다양한 문제점의 원인 파악 및 해결이 어렵다는게 가장 큰 문제입니다. 서두에 이미 결론을 내버려서 이 글을 끝까지 읽지 않으실지도 모르지만, 도입 결정 후 시스템 이전 과정과 서비스 과정에서 생긴 일을 하나씩 얘기해보려 합니다.

--------------------------------------------------------------------------

 * Tibero 도입을 결정하다.
 제가 이전에 블로그에 남겼던 글을 읽으셨다면 어느 정도 감을 잡으셨겠지만, Tibero 도입의 결정적인 이유는 다음과 같습니다.
첫째, Oracle RAC 도입 가격에 비해서 아주 저렴한 가격에 Shared Disk 방식의 Cluster DB를 도입할 수 있다.
둘째, Oracle에서 사용하던 Query, Procedure, Function 등이 수정없이 Tibero에서 사용할 수 있다.
셋째, 필요한 기능 추가 및 시스템 에러에 대한 빠른 대응 가능(국내에 연구 개발을 담당하는 조직이 있어서 가능한거죠.)

 위의 세가지 이유로 도입이 결정되었었습니다.

2010/02/18 - [Database] - DBA의 고민 (1) 고성능, 고가용성 시스템 구축. 안정성과 성능의 두 마리 토끼를 잡아야 하는데... ㅜㅜ
 위의 글을 보시면 왜 RAC같은 Cluster DB 제품을 도입하려하는지에 대한 내용이 들어 있습니다.

--------------------------------------------------------------------------

 * 테스트와 이전 작업을 진행하다.
도입이 결정되고는 내부 테스트와 이전 작업이 진행되었습니다. 작업 중 Oracle과는 다른점이 여러가지 발견되었습니다.

 [다르긴 하지만 크게 문제는 없어서 넘어간 점들]
첫째, 리스너는 하나 밖에 사용할 수 없다. 정책적으로 서비스나 솔루션별로 서로 다른 리스너를 사용할 수 없습니다.
둘째, log file들이 저장되는 위치를 마음대로 바꿀수 없다. Oracle에 비해서 자유도가 떨어지더군요.

 [문제가 있지만, 아직 패치가 되지 않은 점들]
첫째, Index rebuild를 할때 저장되는 Tablespace를 바꿀 수 없다. 여기에 관해서는 제가 예전에도 글을 올렸던 적이 있습니다. 2010/02/01 - [Database] - Tibero4 migration 모험기 (3) Index rebuild 기능

둘째, 서로 다른 Tibero instance간에 Materialized View를 생성해서 쓰면 성능 문제가 생길 수 있다.
  저희가 Materialized View(이하 M-View)를 사용하면서 격은 문제입니다. M-View에는 Fast라는 옵션을 줄 수 있습니다. 아시겠지만, 이 옵션을 쓰면 원본 Table에서 변경된 Data만 가져와서 M-View에 적용을 해줍니다. 이러면 M-View의 Data 동기화 작업 시간을 줄여주고, CPU 부하도 줄여주고... 뭐 이런저런 장점이 있습니다. 그런데 문제는요  동일한 인스턴스에서 M-View를 생성하면 Fast 옵션을 줄수 있는데, 서로 다른 티베로 인스턴스에서 DB Link를 이용해서 M-View를 생성하면 Fast 옵션을 줄 수 없다는겁니다. 어쩔 수 없이 Force 옵션을 주고 생성을 하게 되는데, 이러면 아카이브 파일이 엄청나게 쌓이더군요. M-View를 Refresh할때 마다 대량의 아카이브 파일이 생겨서 운영하기가 힘들 정도였습니다. 언제 패치가 나올지 확답을 받지 못한 상태입니다. 혹시 M-View를 많이, 그리고 여러 DB Instance에서 운영하시는 분들은 참고하시길 바랍니다.


--------------------------------------------------------------------------

이건 tbAdmin 사용자들을 위한 팁입니다.

* tbAdmin에서의 PSM 실행
 Oracle에서 DBMS_JOB 패키지를 사용하여 job을 설정하죠. Tibero에서도 동일하게 job을 설정합니다. 문제는 tbAdmin(TmaxData에서 Tibero client로 배포하는 이클립스 기반의 프로그램입니다.)의 sql 편집창에서 해당 PSM(Oracle의 PL/SQL에 해당합니다.)을 실행시켜도 job이 설정되지 않습니다. 그렇다고 에러 메세지도 보이지 않습니다.
 해결 방법은 간단하더군요. SQL 편집창 말고 PSM 편집창이 따로 있습니다. 거기에서 실행시키면 잘 됩니다.


 그동안 여러 세미나에 다녀왔지만, 아마 MS SQL Server만 다루는 세미나는 처음인걸로 기억합니다. 바로 지난 금요일(2010년 6월 11일)에 열린 "SQL Unplugged 괴물 이야기"라는 세미나입니다.
 처음에는 MicroSoft에서 개최하는 행사인줄 알았는데, PASS(SQL Server 전문가 협회(PASS_Professional Association for SQL Server))라는 커뮤니티의 한국 회원분들의 주도하에 진행된 행사더군요. 그동안 Oracle을 주로 사용해왔던터라 PASS라는 이름도 그날 처음 들었습니다. 엑셈이 MS-SQL 분야에서도 컨설팅을 한다는 것도 신선한 소식이었고, 무엇보다 제가 듣고 싶었던 HA, BI, 대용량 DB, Query tunning 등에 대한 다양한 세션이 준비되어있어서 아무 맘에 들었었습니다. 문제는 제가 DBA 세션만 들었다는 겁니다. 동영상 편집이 완료되는대로 업로드한다고 하니까 곧 나머지도 볼 수 있을거라 생각합니다.

1. 엑셈의 MS SQL Server 컨설팅
 사실 Oracle 관련 정보만 평소에 접하다보니 엑셈이라는 이름이 아주 친숙했었습니다. 근데, SQL Server 세미나에서 엑셈이라는 이름을 듣게 될줄은 몰랐었습니다. 엑셈의 컨설턴트가 발표하는 세션을 들었는데, DMV(Dynamic Management View)라고 Oracle의 v$ 혹은 DBA_로 시작하는 각종 Dictionary View에 해당하는 것이 존재하는것도 알게되었고, 이를 튜닝, 트러블슈팅에 이용하는것도 조금은 알게되었습니다. 앞으로 공부할게 너무 많아져서 고민입니다.


2. HA. DB 복제와 MSCS에 대한 얘기
 DBMS에서 HA 구성에 대한 얘기를 하면 흔히 Oracle의 RAC를 떠올리게됩니다. 시장에서 가장 많이 알려진 제품이고, 구축 사례도 많기 때문이죠. 이와 비슷한(사실 비슷하지만 많이 다른것 같습니다. IBM의 P시리즈의 가상화를 이용한다는걸로 알고있습니다.) IBM의 pureScale이라는 DB2 제품이 나왔습니다. 다만, SQL Server에서는 아직 이런식의 Cluster 제품은 나오지 않았습니다. 그래서인지 DB 복제와 MSCS에 대해서 발표자들이 소개했고, 참석자들의 질문은 DB 복제에 집중되었습니다. 복제 관련 질문이 너무 많아서인지 사회자가 복제에 대한 질문을 제한하기도 했었죠. 복제에 대한 질문이 너무 많아서인지 제가 궁금했던 점과 인식하지 못했던 점까지 알게되어서 좋았습니다.
 세미나에서 들은바로는 현재 많이 사용하고 있는 복제는 2008 이후 버전에서는 P2P 복제가 대체하게 된다고합니다. 앞으로 P2P 복제에 대해서 공부를 좀 해야 겠다는 생각을 해봅니다.

 그리고 MSCS(MicroSoft Cluster Service의 약자)에 대해서 얘기하자면, 현재 잡코리아에서 이를 이용해서 Active-Standby 구성의 HA를 운영중이며, 장애 발생시 1분 이내에 처리가 완료된다고 합니다. 3rd party Cluster 제품을 이용하는 업체도 MSCS로 재구축하는 사례가 있다는 얘기를 하던데요. Windows 환경에서의 Cluster 구성은 이제는 MSCS가 제일 안정적인가봅니다.


3. Business Intelligence
 사실 이 부분은 제가 지금 근무하는곳으로 이직 하기전에 했던 DW구축 및 운영 업무와 관련이 있어서 듣고 싶었던 세션입니다. HA와 튜닝 등의 세션에 밀려서 듣지 못했지만, 동영상 편집이 끝나는대로 볼 수 있게 해준다고 하시네요. 기대하고 있어요~ ^^
앞으로 이 부분은 실무에도 적용을 해보고 싶은데, 현재는 정보 부족으로 테스트도 해보지 못했습니다. 예전에 썼던 DataStage만큼만 해주면 참 좋을것 같은데...


 MS SQL Server는 중소형 서비스에 적합한 쉽게 설치해서 쉽게 쓰는, 그래서 세세한 튜닝이나 운영은 필요없는 초보용 DBMS라는 인식이 많았던게 사실입니다. 저 역시 그렇게 생각해왔었구요. 그런데 이번 SQL Unplugged에 참석하고나서 생각이 많이 바뀌었습니다. 충분한 교육과 정확한 자료만 있다면 아주 파워풀하게 사용할 수 있겠다는 생각이 듭니다.
앞으로 SQL Server에 투자하는 시간이 좀더 늘어날것 같습니다.


ROqynQX3gVz0_QcF16svVOdb_B0bY6IcdGWU77GNOT8,

 저희 회사에 Tibero TAC(Tibero Active Cluster)가 도입되었다는건, 이전의 제 글들을 보신 분이라면 아실겁니다. 국산 DBMS 시장에 여러가지 제품이 출시되어 있지만, Oracle RAC처럼 Shared disk 방식으로 구현한 Active-Active 형태의 Cluster 제품은 Tibero TAC가 처음이죠.

 현재 TAC를 사용중인데 편한 점부터 얘기를 해볼까합니다.

 우선 서비스 중단 없이 OS, DBMS 등의 패치 및 점검 작업 등을 할 수 있다는 점이 아주 편하다고 생각합니다. 각 노드를 번갈아가면서 재부팅하는 작업을 해보니 꽤 편하더군요. ^^  그리고 한쪽 노드에 부하가 몰려있을때라도 좀 한가한 나머지 노드에 접속하여 Data 조회, 조작 작업을 할 수 있는 가용성. 확실히 Cluster의 장점이 아닐까요?

 이제, TAC 제품의 단점을 얘기해볼까 합니다.

첫째, 원인을 정확하게 알 수 없는 성능 저하 현상 발생.
Storage와 OS 등의 제품들과 엮여서 딱히 어느 곳이 문제인지 알 수 없는 성능 저하 현상이 발생합니다. 그것도 자주!
벌써 몇달째 고생중인 문제인데요. 현재 원인 규명 작업을 진행중인데 쉽게 해결될것 같지가 않습니다.

둘째, 이기종 DBMS와의 data 공유가 어렵다. DBMS 자체가 이기종 DBMS와의 data 공유가 어렵다는건 티베로 만의 문제는 아니긴 한데, Data 공유를 위한 솔루션(ETL, DB복제툴 등)에서 티베로를 거의 지원하지 않는다는게 문제입니다. TmaxData에서 나온 제품만 지원하고 있죠. DB복제툴은 Oracle이외의 DBMS는 제대로 지원하지 않고, ETL tool의 경우에는 다양한 DB를 지원하지만 실시간 동기화(2, 3분 이내)에는 적절하지 않더군요.
Oracle과는 JAVA Gateway를 이용해서 처리할 수 있는데, 현재는 어느정도 해결이 되었지만 이 부분이 그동안 문제가 많았었죠. 프로세스가 정상 종료되지 않고 남아서 성능을 떨어뜨리는 현상을 일으켰는데, 현재는 Tibero 패치를 통해서 해결이 되었습니다. 뭐, Oracle과는 어느정도 해결이 된다고하지만 그 외의 DB와는 아직 문제가 많습니다. MS-SQL과는 Openquery를 통해서 select만 가능합니다. MS-SQL Gateway를 이용해서 data 공유가 가능하다고 하는데, 별로 권장하지 않는다고합니다. 그래서 좀 고민이 되는 부분입니다. 


 Oracle과 MS-SQL 사이의 Data 공유를 위해서 Openquery를 이용하고 있습니다. 지금까지 잘 이용하고 있었는데, 문제가 발생했습니다. Oracle DB를 Tibero로 바꾼다는거죠. 그래서 Tibero에서도 해당 기능을 사용할 수 있는지 점검해 봤습니다.
 Tibero to MSSQL Gateway라는게 존재하는데, 이는 설정을 따로 요청해야 하고, 기존의 MS-SQL측에서 생성된 프로시져를 쓸 수가 없다는 단점이 있어서 일단 Openquery를 이용하는 방법을 시도해봤습니다.

 MS-SQL에서 Linked server를 생성하는 방법에는 Tibero ODBC driver를 이용해서 Data 원본(DSN)을 만든 뒤에 이를 이용해서 Linked server를 생성하는 법과, Tibero oledb driver(2가지를 지원하더군요.)를 이용해서 바로 Linked server를 생성하는 방법이 있습니다.

 1. select query 실행
  ODBC, OLEDB 두가지 방법으로 모두 이상없이 잘 됩니다.

2. update query 실행
 ODBC, OLEDB 두가지 방법으로 모두 오류가 발생합니다.

결론.
 Openquery를 이용할 때 Tibero로는 select query만 실행 가능하다는 문제가 있습니다.
 저희 회사의 시스템 구축 목표 중 아주 중요하게 생각하는 항목은 "가능한 모든 DB는 저렴하게 Active - standby를 구현하자"입니다. 결국 "저렴하게 안정성 향상과 성능 극대화를 추구한다."라는 말인데, 이 문구를 보시면 많은 분들은 "저렴하게"라는 부분만 빼면 가능한 일이라고 생각하실겁니다. 저도 그렇게 생각하구요. 예산만 풍부하다면...

 제가 생각하는 아주 좋은 회사는 장비(시스템)와 직원에게 비용을 아끼지 않는 회사입니다.(낭비가 아니라 "아끼지 않는다"입니다. 내가 원하는 기능, 성능 및 안정성을 제공하는 장비나 서비스를 구매하고 이에 비용을 지불하는건 낭비가 아니라고 생각합니다. 물론 사원에게도 마찬가지로 적절한 보수와 특근, 야근 수당을 다 챙겨주는...) 물론 이런 회사에 근무하는건 아주 드문 일이라고 생각합니다. 제가 DW 구축 및 Oracle DB 운영 업무(능력있는 사수님이 계셨었죠. 제가 부사수였습니다. ^^;)를 맡았었던 K사의 모 시스템에서도 비용을 절감하고, 보유한 자원을 최대한 활용하려는 노력은 끊이지 않았었죠. 대한민국 사람이라면 다 아는 큰 회사에서도 비용 절감은 중요한 사항이었죠.

 제가 비교적 시스템 자원이 풍부한 곳에서 일을 해왔었던 탓인지 현재 재직중인 회사에 와서 좀 충격을 받았었습니다. 안정성 향상을 위해 Cluster 혹은 Standby 시스템을 구축하는데는 보통 비용이 많이 들기 마련인데, 그 비용에서 타협을 하면 안정성이나 성능도 어느정도 타협을 해야 하는데... 그렇게 생각을 하지 않으니...

 암튼 초고속 인터넷이 보편화되어있는 대한민국의 IT 환경에서 안전한 백업보다도 고객들이 원하는건 중단되지 않는 서비스가 아닐까합니다. 그리고 실시간으로 Data 동기화 등의 작업이 이루어지길 원하죠.
 경영진으로서는 당연히 직원들이 해결해야할 문제이고, 실무진으로서는 돈도 적게 주면서(예산, 연봉 및 수당을 말합니다.) 품질만 최고를 원한다는 불만을 가지게 됩니다. 아~ 힘들다.

 DB Cluster를 구성하려고 여러가지 고민을 해봤습니다.
이번 글에서는 DBMS Cluster에 어떤 것들이 있는지 나열해보고, 제가 근무중인 곳에서 도입한 TAC에 대한 감상을 적어보겠습니다. 다른 DBMS Cluster에 대해서는 다음에 정리해서 올리도록 하겠습니다.

1. Oracle RAC
 말이 필요없죠. 좋습니다. 가격이 너무 비싸다는걸 빼면요. 저렴하게 구축하려면, Linux 기반으로해서 공유 스토리지는 Oracle ASM을 이용하는 방법도 있습니다. Oracle 11g 이후 버전에서는 Raw device를 지원하지 않고 ASM을 기본으로 할지도 모른다고 하니까 성능에는 자신이 있는 모양입니다.

 당연한 얘기지만 관련 서적도 제법 있습니다. RAC 자체에 대해서는 영문판 책이 대부분이며, 한글판으로는 RAC에서의 성능 문제에 대한 엑셈의 책도 있습니다.
ADVANCED OWI INTERNALS AND PERFORMANCE IN ORACLE 10G RAC
카테고리 컴퓨터/IT
지은이 조동욱 (엑셈, 2007년)
상세보기




2. IBM DB2 PureScale
 메인프레임의 기술을 유닉스에서... Cluster 도입을 고려하던 당시에는 자료가 별로 없어서 제외했습니다.
Oracle RAC에 대항마로서 나온 제품 같습니다.(예전에 DB관련 세미나에 갔더니 고객들이 "RAC~ RAC~"한다고 한 숨을 쉬시더군요.) Oracle RAC처럼 모든 노드를 Active로 사용할 수 있다고 합니다. 단점은 아직까지는 AIX에서만 사용 가능하다는 점입니다.


3. MySQL Cluster
 Active-Standby Cluster입니다. Standby DB는 평소에 읽기 전용으로 사용하기를 권장하더군요. 저희쪽에 제안을 들어온 업체의 제안 내용에 따르면, 일반적인 Intel CPU 장비를 제안해놓고는 메모리는 가득 채워서 설치하기를 요구하더군요. 쿼드코어 CPU 두장에 메모리는 128GB이던가... 그것만으로도 가격이 상당히 뛰더군요. 업체측에서는 Active-Active로 궁성을 해도, 거의 실시간으로 모든 노드에 Data 동기화가 이루어져서 Data 정합성이 깨지지 않는다고 하지만... 타 DBMS 업체에서는 이런 구조는 필연적으로 정합성에 문제가 생긴다고 하더군요... 뭐...
 좋은 점은 공유 스토리지를 필요로 하지 않아서 SAN 및 공유 Storage 구축 비용이 절감된다는 장점이 있습니다. 그런데 개별 서버에 대용량의 메모리를 설치해야 한다는 점이 조금 걸립니다.  다양한 관련 서적이 있으며, HA관련 서적이 한글판으로도 출판되어 있습니다.
MYSQL 5.1 REFERENCE GUIDE(레퍼런스 가이드)
카테고리 컴퓨터/IT
지은이 박장규 (혜지원, 2009년)
상세보기


MY SQL 5.1 H A 매뉴얼
카테고리 컴퓨터/IT
지은이 (글로벌, 2009년)
상세보기


4. MS SQL Server Cluster
 Active-Standby Cluster입니다. 일반적으로 얘기하는 HA구성이죠. MS-SQL 라이센스에 Cluster 라이센스를 구매해야하며, 당시엔 이에 대한 사내의 인식과 자료가 좀 부족해서 제외되었었습니다. 또한 MS SQL Server 자체에 대한 책은 많이 출판되어 있으나 HA에 대한 자료는 거의 없습니다.


5. Cubrid Cluster
 NHN에서 Open source로 제공하는 Cubrid를 Cluster로 구성하는 방법입니다. Cubrid야 NHN에서 서비스에 사용중이니 안정성 등은 믿음이 가지만, Cluster는 아직 개선의 여지가 많이 필요한거 같아 보입니다. 큐브리드 부설 연구소에서 2008년도에 출판된 책이 한 권 검색되네요. 음... 최근 버전에 관한 내용은 큐브리드 홈페이지에서 찾으시면 됩니다. 그리고 Naver 개발자 센터의 CUBRID프로젝트큐브리드 공부하기 카페에서도 관련 정보를 찾으실 수 있습니다.
데이터베이스 이해와 실습
카테고리 컴퓨터/IT
지은이 큐브리드 부설 연구소 (정익사, 2008년)
상세보기

 앞으로의 발전 가능성에 꾸준히 관심을 갖고 지켜보고 있는 제품입니다.


6. Tibero Active Cluster (TAC)
 TmaxData의 Tibero RDBMS를 Oracle RAC 형태로 구성한 Cluster입니다. 영진 전문 대학이라는 레퍼런스가 존재했고, 견적을 냈을때 Oracle의 10분의 1에 해당하는 가격이라 이걸로 결정되었었습니다.

 혹시 Tibero Active Cluster(이하 TAC)를 도입하려고 검토하시는 업체라면, 아주 신중히 결정하시라고 말씀드리고 싶습니다. TAC는 Tibero라는 DBMS를 Cluster로 구성한거라 Tibero의 약점을 그대로 가지고 있습니다. Oracle과 같은 문법을 제공하기에 기존 개발자가 적응하기 쉽다는 장점이 있지만, Oracle에서 당연히 되던 기능들이 작동을 안 하기도 합니다. 제가 썼던 글을 참조하세요.(2010/02/01 - [Database] - Tibero4 migration 모험기 (3) Index rebuild 기능)

 그리고 기존의 DB 보안, DB 복제, ETL tool 등이 정상 작동을 하지 않는 부분이 많습니다. 관련 업체의 인증을 받았다지만, 관리 툴이 Tibero에서는 완벽하게 사용할 수 없다던지, 중요 기능이 대용량 Data 환경에서는 정상 작동을 하지 않는다는 문제가 있습니다. 관련 솔루션 테스트 중에 몇 십만건 단위의 Data 처리를 시키니까 DB가 뻗어버리더군요. ㅜㅜ

 또 하나의 문제점이라면... Oracle RAC의 경우에 좀 저렴하게 구성하려면 Linux에 Oracle을 올리고, Oracle ASM을 이용하면, Veritas CFS 등의 Cluster filesystem을 구매하지 않아도 Cluster 구성이 가능한데, Tibero에는 자체적으로 제공하는 Cluster filesystem이 없어서 공유 스토리지 구성에 상당한 비용이 소요됩니다. 제 기억엔 TAC 자체 가격과 Veritas CFS 가격이 비슷했던것 같은 기억이...

 또한 시중에 출판된 Tibero 혹은 TAC 관련 서적은 없습니다. TmaxData에서 제공하는 Tibero 관련 메뉴얼이 있으며, 테크넷(technet.tmax.co.kr)에서 PDF 파일로 다운로드 가능합니다. 왠만한 명령은 Oracle과 비슷한 문법을 제공해서인지 메뉴얼만으로도 해결이 가능합니다. 사실 이게 최대의 장점이죠.
 DBA로 살기 위해 여러 세미나와 각종 교육 등을 받아보면, 자주 등장하는 강사(혹은 발표자)의 농담 섞인 얘기들이 있습니다.
"DBA가 할 일이 별로 없는 회사가 시스템이 잘 굴러가는 곳이다."
"가장 효과적이고 확실한 튜닝은 돈을 투자하는 것이다."
"오늘 설명한 작업은 시스템에 사용자가 별로 없는 시간대에 하거나, 외부의 접속을 끊고 진행하는것이 좋습니다."
라는 얘기죠.
 흔히 낮에는 하지 말자라는 작업을 몇가지 생각나는대로 읇어보면...(물론 어떤 시스템이냐, 어떤 장비를 쓰느냐에 따라 달라지긴 합니다.)

1. 대용량 Data file 추가
2. 대용량 Data table의 이전 혹은 여기에 생성되어 있는 Index의 rebuild 작업
3. online full backup
4. 통계 Data 정리
음... 이거 말고도 부하를 줄만한 작업이 꽤 많죠. 음... DW구축 등의 작업이 보통 새벽이나 밤에 시작되죠.
예전에 근무했던 곳에서는 내부 업무용 DW DB라 그런지 9시 쯤부터 배치 작업이 돌아갔었던거 같습니다. 음... 일년 정도 지나니까 생각이 잘 안나네요.

 암튼... 이런 얘기를 하는건...
뭔가 원인이 있었겠지만, 저희 팀의 윗분 한분이 사용자가 많은 시간에 인덱스 리빌드를 몇개 돌리시더군요. 저한테는 DBA가 왜 낮에 시스템에 부하를 주는 작업을 하냐고 타박을 주시던 분인데...
DB 서버에 Wait가 걸리고, 웹 서버 프로세스 수가 급증하는 통에 전화기에는 불이나고...

음... 그대로 놔뒀으면 사용자들이 조금은 느리더라도 서비스를 이용할 수 있었을텐데, 굳이 그런 작업을 해서 서비스가 중단되는 테러를 자행하다니...

전화 폭탄과 SMS에 스트레스가 쌓여서 요렇게 글로 풀어봅니다. ^^;
 TmaxData의 Tibero4로 migration을 진행하면서 알게된 몇가지 내용 중 Index rebuild에 대해서 얘기해보고자합니다. 기존에 사용하던 Oracle을 기준으로 하면... (제가 가장 잘 아는게 Oracle이라 이녀석이 기준입니다.) Index를 사용하다가 rebuild 해줄때 몇가지 옵션을 줄 수 있습니다.

SQL> ALTER INDEX IDX01 REBUILD ONLINE;
   * 기존의 인덱스를 계속 유지한채로 REBUILD하고, REBUILD가 끝나면 바꿔치기 하는 옵션이죠.

SQL> ALTER INDEX IDX01 REBUILD ONLINE TABLESPACE TS_IDX2;
   * REBUILD를 하면서 저장하는 TABLESPACE도 바꾸는 옵션이죠.


 사실 DB 관리를 하다보면 tablespace를 바꿔줄 일이 가끔씩 생깁니다. 그래서 Tablespace를 바꿀 수 있는 옵션은 아주 유용합니다. 그런데... Tibero4에서는 이를 지원하지 않고 있네요. ㅡ.ㅡ
[General syntax error]라는 오류가 발생합니다. Tmax에서도 지원하지 않는다고 하네요. 그런데, Tmax에서 제공하는 Tibero 관리/개발용 툴인 tbAdmin에는 인덱스 리빌드창(마법사??)에서 Tablespace를 선택할 수 있도록 되어있습니다. 혹시나 해서 실행시켜보니까 똑같은 오류가 발생하네요.


 Tibero를 사용하면 꼭 사용해보게되는 tbAdmin이라는 Tool이 있습니다. Tmax에서 Eclipse 기반으로 개발한 Tibero client tool입니다.
 작년 겨울부터 사용해온 툴인데... 이건 뭐...이클립스로 이런 저런 툴을 다 만들수 있구나 하는걸 알 수 있습니다.
IBM은 심포니라는 오피스 프로그램까지 만들어 놓기는 했지만, 국내 기업 중에서 이렇게 툴을 만들어 내놓은게 참 반갑더군요.

 문제는 Tibero에 있지 않나 생각합니다. tbAdmin에는 설정하는 항목이 있는데, Tibero에서는 막상 그 설정변경된 내용이 지원되지 않아서 에러가 발생하는 웃기는 상황이 있더군요.
뭐... 자세한 내용은 다음에 소개하도록 하겠습니다. 다만... 이클립스 기반으로 만들 툴이 좀 아깝구나 하는 생각이 들었습니다. 그럭저럭 client 설치없이 바로 쓸 수 있는 편한 환경이던데...

 MS-SQL에서 Oracle에 있는 Data에 접근하기 위한 방법으로 Openquery라는걸 소개한 적이 있죠.
기본적으로 제공하는 기능이라 좋긴 하지만 동적으로 쿼리를 만들어서 결과값을 받아올수 없다는 얘기를 한 적이 있습니다. 그렇게 되면 WHERE절 조건을 정확하게 줄 수 없으니 오라클 DB에 부하를 많이 주게 되겠죠.
저도 이렇게 알고 서비스 중인 MS-SQL과 Oracle 사이에 Data 동기화 프로시져를 만들었었습니다.
그런데....

 웬걸...

 회사에서 사용중인 MS-SQL 2005에서 혹시나 하는 마음에 문자열 변수에 커서를 정의하는 문장까지 포함해서 동적으로 쿼리를 만들어 주고, 커서를 열었더니... 결과 값이 정상적으로 나오네요. 앗싸~ 가오리~

아래와 같은 방식으로 처리하니까 동적으로 쿼리문장을 만들어서 실행시키고 결과값을 커서에 받아서 사용할 수 있습니다.


DECLARE @QUERY_STRING VARCHAR(1000)
DECLARE @CODE        VARCHAR(30)
SET @CODE='SUPERCODE'
DECLARE @USERNAME VARCHAR(50)

SET @QUERY_STRING = 'DECLARE ORA_CUR CURSOR FOR
                     SELECT USERNAME
                         FROM OPENQUERY(ORA_DB, ''SELECT USERNAME
                                FROM USER_INFO
                               WHERE CODE='''''+@CODE+''''' AND USER_FLAG=''''N'''' '') '

EXEC (@QUERY_STRING)
OPEN ORA_CUR
FETCH NEXT FROM ORA_CUR INTO @USERNAME

WHILE @@FETCH_STATUS = 0
    BEGIN
    INSERT INTO dbo.USER_INFO(USERNAME)
    VALUES(@USERNAME)

    FETCH NEXT FROM ORA_CUR INTO @USERNAME
  END;

CLOSE ORA_CUR

DEALLOCATE ORA_CUR

+ Recent posts