MySQL Storage Engine들을 비교해볼 일이 생겨서 자료를 찾아봤습니다. 5.1 버전과 5.5 버전의 영문 메뉴얼을 보면서 정리한 내용입니다. MySQLKorea의 5.1버전 한글 번역판도 참고 했습니다.


1. MyISAM
Transaction을 지원하지 않지만 기본 Storage engine이며 많이 사용되고 있다. Table을 각각 독립적인 File에 저장한다. 5.5. 버전을 기준으로 256 TB까지 저장할 수 있다. Transaction을 지원하지 않는 대신 빠르고, 디스크 공간을 덜 차지하며, Update를 위한 메모리 공간도 적게 사용한다.
Transaction을 지원하지 않는 MyISAM 때문에 MySQL은 RDBMS로 인정해주지 못하겠다는 의견도 있었습니다. ("그러면 엑셀도 DB냐??"같은 의견이었죠.) 이제는 InnoDB같이 Transaction을 지원하는 Engine도 기본으로 설치되고 (설치는 되지만 여전히 사용 여부는 운영자의 판단이죠.), Transaction 지원을 포기한 대신에 빠른 속도와 가벼운 시스템 부하 등도 하나의 컨셉으로 받아들여지는것 같습니다. 하지만... Transaction을 지원하지 않는것은 큰 약점이라고 생각합니다. DB에서 처리해줄 Transaction을 Application상에서 구현해줘야 하니까요.


2. Memory
Table을 Memory에 저장하는 engine이다. 서버 재기동시 모든 data가 삭제된다. 5.5 버전 기준으로 RAM의 여유공간만큼 저장할 수 있다. Hash index를 지원한다.
Memory상에 Table이 직접 올라가 있으니 조회 속도는 엄청 좋을거라 생각합니다. 물론 시스템 부하가 얼마나 걸리는지, 과연 비싼 서버 메모리 비용을 부담할 만큼의 이점이 있는지는 실제 테스트를 한뒤 결정해야한다고 생각합니다.


3. Merge
여러개의 Table을 하나의 Table처럼 사용할 수 있게 해주는 Storage engine이라고 한다.
이부분은 음... 어떻게 보면 재밌게 쓸 수 있을거 같은데, 다음에 좀더 알아보고 정리하겠습니다.


4. InnoDB
Transaction을 지원하는 Storage engine이다.(기본 설정은 Auto commit이다) Foregine key 제약 사항, Clustered index, Row level lock을 지원하며 최대 64 TB까지 저장할 수 있다. Oracle과 유사하게 Tablespace에 data를 저장한다. 기본으로 설치용 바이너리 배포판에 포함되어 있다.
 SUN Microsystems가 Oracle에 인수되기 이전에 이미 Oracle사에 인수되어서 한때 MySQL 진영에서 InnoDB를 대체할 Storage Engine을 개발하려는 움직임이 있었죠.


5. BDB
BDB는 BerkeleyDB의 약자이다. InnoDB와 마찬가지로 Tarnsaction을 지원하는 storage engine이다. 다른 점이 있다면 Table을 저장할 때 MyISAM처럼 Table별로 독립된 File을 생성해서 저장한다는 점이다. 5.5 버전의 문서에 지원하는 Storage engine에서 제외된 걸로 봐서 앞으로의 공식 지원은 불투명한 상태이다. (뭐 이건 주관적인 생각입니다.)
 BerkeleyDB 역시 InnoDB와 마찬가지로 Sun Microsystems 인수 이전에 Oracle에 인수되었죠.(맞을겁니다.) MySQL과 별도로 단독으로 Application에 내장되어서 파일 기반의 DB로도 사용 가능합니다. 활용도가 높다고 생각합니다. 앞으로 어떻게 될지는 지켜봐야 겠네요.


6. Archive
대용량의 데이타를 인덱스 없이 저장하기 위한 Storage engine이다. INSERT, SELECT는 지원하지만, DELETE, UPDATE는 지원하지 않는다. 저장할 수 있는 크기에 제한이 없다.


7. CSV
Text file에 data를 저장하는 storage engine이다. 저장된 data file을 MS Excel이나 OpenOffice Calc같은 spreadsheet에서 열 수 있다. Index를 지원하지 않고, NULL도 저장할 수 없다.
 이거... 성능만 나쁘지 않다면 꽤 유용하게 쓸 수 있지 않을까요?!?! 이걸 어떻게 써먹을지 궁리를 좀 해봐야 겠습니다. 그리고 성능이 얼마나 나오는지도 확인해봐야 겠죠?


이상 너무 간단하지만, MySQL Storage Engine들에 대한 정리를 마칩니다. 영문 메뉴얼을 좀더 읽어보고, 실제로 Test도 해본뒤에 좀더 유용한 자료를 만들면 다시 올리겠습니다. 그럼 이만...


참고 자료
MySQL Documentation: MySQL Reference Manuals
MySQL Korea


Oracle database에 무작위로 숫자나 문자열을 생성하는 DBMS_RANDOM 패키지가 있죠. Tibero에도 있을까 궁금했었습니다. 그래서 PDF file로 받은 메뉴얼을 열어보았는데... 이럴수가 "tbPSM 참조 안내서(Tibero RDBMS 4 SP1 (TD-MAN-TDR-415005))"와 "tbPSM 안내서(Tibero RDBMS 4 SP1 (TD-MAN-TDR-415006))"에는 DBMS_RANDOM이라는 패키지 관련 내용이 없네요. 
 
정말 없을까? 궁금해서 tbAdmin에서 "DESC DBMS_RANDOM"을 실행해 보았습니다. 그랬더니, 메뉴얼에는 없지만DBMS_RANDOM이라는 패키지 정보가 뜨네요.
 
아래의 쿼리를 실행해보세요. 대충 어떻게 써야 할지 감이 올겁니다.

SELECT DBMS_RANDOM.RANDOM, DBMS_RANDOM.STRING('X', 5), DBMS_RANDOM.STRING('A', 8)  
FROM DUAL;

STRING 함수의 첫번째 인자값이 X이면 영문자 대문자와 숫자를 섞어서 무작위로 추출을 하고, A이면 영문자 대소문자를 섞어서 무작위로 추출을 합니다. 두번째 인자값은 문자열을 몇 자리로 할건지 지정해주는 인자입니다. 자세한 내용은 참고 문서의 내용을 확인해보시기 바랍니다. Oracle에 대한 문서이긴한데... Tibero에 적용해도 별 문제는 없네요.

참고 문서
http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_random.htm
http://psoug.org/reference/dbms_random.html 
오랫만에 IBM DeveloperWorks에 올라온 글을 소개합니다.
뭐... DB2에 대한 내용이라서 내가 업무에 쓸 일은 없을것 같긴한데, 그래도 가까운 미래에 한번쯤은 필요하지 않을까해서 링크를 모아둔다는 생각으로 소개하려합니다.

1. Oracle 11g 스킬을 활용하여 Linux, UNIX 및 Windows용 DB2 9.7 학습
원문 링크 : Oracle 11g 스킬을 활용하여 Linux, UNIX 및 Windows용 DB2 9.7 학습
DB2® 9 스킬 향상에 관심이 있는 데이터베이스 전문가라면, 다른 관계형 데이터베이스 제품을 다루면서 이미 상당한 수준의 데이터베이스 스킬을 갖추고 있을 가능성이 큽니다. 최신 버전의 DB2 및 Oracle을 위해 최근에 업데이트된 이 기사에서는 현재 가지고 있는 Oracle 11g 관련 지식을 바탕으로 Linux®, UNIX® 및 Windows®용 IBM® DB2 9.7에 대한 스킬을 빠르게 습득하는 방법을 보여줍니다.


2. DB2 9.7에서의 SQL 호환성
원문 링크 : DB2 9.7에서의 SQL 호환성
  "트리거에서 기능이 향상된 오브젝트로" 기사에서는 DB2 9.7에 새로 도입된 Oracle 호환성 기능의 데모를 제시합니다.


3. IBM 데이타 이동 도구
원문 링크 : IBM 데이타 이동 도구
이 기사에서는 다양한 원본에서 손쉽게 데이터를 이동하기 위한 매우 간단하고 강력한 도구를 소개합니다. 이 도구를 사용하면 거의 또는 전혀 아무 것도 변경할 필요 없이 Oracle과 Sybase의 다양한 애플리케이션이 Linux®, UNIX® 및 Windows®용 IBM® DB2® 버전 9.7에서 그대로 작동하도록 할 수 있습니다. 또한, 이 도구를 사용하여 다른 다양한 데이터베이스 관리 시스템에서 Linux, UNIX 및 Windows용 DB2와 z/OS®용 DB2로 데이터를 이동할 수도 있습니다. 이 도구는 pureScale 환경에서 원본 데이터베이스에서 DB2로의 데이터 이동도 지원합니다.


2010년 SQL Unplugged 행사에 참석한 뒤에 한참을 이것저것 하느라 바빴던터라... 이제야 정리를 하게되었습니다.


 IT 업계에 종사하면서 다양한 DBMS를 사용해왔습니다. Oracle, SQL Server, MySQL... 정말 맛보기로 IBM UDB와 PostgreSQL에 2년 전쯤 도입한 Tibero까지... 참 다양하게도 써왔습니다. 하지만 DBA로서 Oracle을 주로 공부하고 운영해 왔었고, 그래서 Oracle에 우호적인 사람이었습니다.  이제 SQL Server를 DBA의 입장에서 바라보기 시작한지 3년쯤 되어가는 DBA로서, Oracle도, SQL Server도 다양한 업무 환경과 서비스에 적용할 DBMS의 하나로 바라보기 시작한것 같습니다. 2010년과 올해(2011년)에 참석했던 SQL Unplugged 행사가 제게 많은 정보와 감동을 준 덕분이라 생각합니다. 이번 2011년도 SQL Unplugged 행사는 작년과는 또 다른 감격을 안겨줬습니다.
이 글을 시작하기전에 미리 말씀드립니다.
"감사합니다. 수고하셨습니다. 2012년 SQL Unplugged 행사가 벌써부터 기다려집니다."


0. 점심 도시락
 같이 갔던 누님은 뷔폐식사권이 당첨되어서 그곳으로 가시고, 저는 도시락을 먹었습니다. 도시락도 좋네요. ^^



1. DW applience
 DW 시장에는 applience 형태의 제품이 많습니다. 테라데이타, Oracle ExaData, 네티자 등의 이름은 한번쯤 들어보셨을겁니다.
 그동안 대형 DW 프로젝트에 들어가면 위의 제품들중 하나에 대한 지식, 경험 등이 필요했었죠. 저도... 테라데이타 무경험자로 대형 DW 프로젝트에 투입될 뻔한 적이 있습니다. (아시죠. 테라데이타를 써본적은 없지만... 어쩌구저쩌구... 이런 얘기를 했더랬죠.) 이야기가 딴 쪽으로 빠지기 전에...

 행사당일 HP 부스에서 접한 SQL Server 기반의 DW applience!! DW 시장에서도 SQL Server를 기반으로한 제품이 등장하여, 다양한 분야에서 SQL Server를 사용할 수 있음을 보여줬습니다. 아직 내부 구조를 살펴보지는 못 했지만, DW applience가 출시되었다는것 만으로도 상당한 의미가 있다고 생각합니다.
 물론 HP에서 SQL Server를 이용한 DW applience가 등장한 것은 여러가지 이유가 있을겁니다. Oracle사에서 Itanium CPU를 사용하는 장비에 대한 Oracle 제품 개발 및 지원을 더이상 하지 않겠다는 발표도 있었고, SUN을 인수한  Oracle이 Exadata의 H/W를 담당했던 HP와의 제휴를 끊고 자체적으로(SUN을 인수했죠.) H/W를 제작하기도 했고... 적고보니 모두다 Oracle 탓이라고 생각할만한데... 뭐 꼭 그렇지도 않다고 생각되는게, 그동안 H/W 업체중 MS와 돈독한 관계를 유지했던 HP이니까 DW applience가 HP에서 나오는게 어찌보면 자연스러운 거 아닐까요?

 암튼 HP의 DW applience는 나름... 신선한 충격이었습니다. "이젠 대형 DW 프로젝트도 SQL Server로 처리할 수 있겠구나!!"
OLTP에서 DW까지 쭈욱~
 

2. SQL Server "Denali"
 새로운 버전에 대한 정보를 접하는것은 늘 흥미로운 일이죠. 어떤 기능이 들어갔을까? 어떤 기능이 강화되었을까?

저의 이전 글을 보시면 아마 한두건 정도 "Denali"에 대한 글이 있을겁니다. 지금 알고있는 내용이 이 행사때 들은건지 헷가려서 이 부분은 통과 하겠습니다. 사실... 그날 들은 내용이 뭔지 기억이 잘 안나요. ^^;; 죄송합니다. 너무 늦게 정리하다보니...


3. 정보보안 시대의 SQL Server
 SQL Server의 암호화는 제 생각보다 편하더군요. DB 전체를 통체로 암호화하고 따로 함수를 쓰지 않아도 된다는 점. 음 물론 현재 정보보호 관련 법규에 적합한건지 좀 알송달송한 부분이 있지만, 이 부분은 현재 확인 중입니다. 만약에 현재의 정보보호 관련 법규에 적합하기만 하다면 정말 대박이라고 생각합니다. 따로 보안 솔루션을 도입하지 않아도 되니까요.



덧붙여서...
 또다른 사람에게 SQL Server의 세계를 알려주다.
 작년에 이어 올해에도 참가 신청을 한뒤 생각해보니 주변에 SQL Server를 업무에 사용하는 누님이 한분 계신데 과연 이분이 "SQL Unplugged" 행사를 알고계실지 궁금해졌다. 그분은 나와 같이 Oracle을 배웠지만 나와는 달리 SQL Server를 주로 사용하는 곳에 근무하고 있었다.(아마도...?!?!) 난 이것저것 섞어서 쓰고있다. 그리고 업무의 강도와 양으로 따지자면 20% 정도를 SQL Server가 차지한다고 생각한다.
 암튼, 이 누님에게 물어봤더니 처음 듣는다길래 같이 가자고 바람을 넣었고, 하루 종일 SQL Server만 다룬다는 얘기에 그리고 보안에 관련된 세션도 있다는 점에 참가 신청을 했다.
 결과는 대만족!!
"SQL Server가 이렇게 많은 부분을 다루는지 미쳐 몰랐어"라고 누님의 얘기에 추천한 보람을 느꼈달까... 내년에도 누군가와 함께 가야겠다는 일종의 의무감도 생겨버렸다. 누굴 데려가지???  아니 그전에 2012년에도 Unplugged 행사 개최하시는거죠? ^^

 이 부실한 글을 8월 18일에 쓰기 시작했으니 마무리하는데 2개월가량이 걸렸네요. 제 부족함과 게으름의 결과인듯합니다. 아~ 그 동안 제 아들 석이가 태어났어요. 이제 아빠랍니다.

MS SQL Server 2005에서 복제를 운영하다보면, 대상 객체를 조회할 필요가 가끔 생기죠. 복제 대상 목록 파일이 갱신이 잘 안되어 있다던지... ㅜㅜ
그런데 가지고 있는 자료가 별로 없어서리... 사실 회사돈으로 구매한 책 한권만 있다는... 내 돈 주고 산 책은 집에 있으니까 ㅋㅋ 들고 다니기 무겁고...
뭐 암튼 그래서 맨땅에 해딩하는 심정으로 찾아보았는데, 의외로 쉽게 찾은거 같다는 느낌??
뭐 알고보면 다른 방법으로 좀더 디테일한 정보를 조회가 가능할지도 모르겠지만... 아마 분명히 있겠죠??? 집에 가서 찾아봐야지
좀더 고급스러운 정보 가지신분은 연락주세요.

자 일단 오늘 찾은 정보!!

USE 배포
GO


SELECT *
FROM dbo.MSarticles

물론 위의 "배포"라는 데이타베이스는 버전이나 언어 설정에 따라서 바뀔수 있다.
요즘 SQL Server Codename "Denali"에 대한 글이 자주 올라오고 있죠. "Denali"에 대한 정보를 읽다보니 Codename "Juneau"라는 SQL Server Developer Tool에 대한 얘기도 있더군요.

일단 아래 홈페이지로 가시면 다운로드 받을 수 있습니다.
SQL Server Developer Tools Juneau Download
다운받은 파일을 실행하면 필요한 파일들을 받아서 설치를 진행합니다. 설치 중간에 PC 재부팅을 한번 하구요. 제 PC 사양이 별로라서 그런지 한시간 정도 걸린것 같습니다. 제 경우에는 설치 완료 후 화면에 Juneau 설치에 실패했다고 뜨길래 "확인"(아마도 확인일겁니다.)을 클릭했더니 설치에 실패한 프로그램만 설치하는 화면이 다시 떠서 나머지를 설치하고 완료하였습니다.
아래는 설치 완료 후의 화면입니다. 윈폰7 SDK같은 흥미로운 이름이 떠있죠... 이건 다음에 한번 시도해보려구요. ㅋㅋ



 기존에 SSMS(SQL Server Management Studio)를 이용하여 SQL Server에서의 개발, 관리를 해왔던 DBA의 시각에서 바라본 "Juneau"라는 툴은... Visual studio와 별로 다를게 없어보이네요.  뭐 Visual Studio에 모든 툴이 통합되고 있는건 원래 그랬던거고...


아직 이 툴을 설치 후 실무에 써보지는 않았으니 다른건 모르겠지만, 일단 설치와 첫 실행 화면이 깔끔하긴하다.
데이터 메뉴에 스키마 비교, T-SQL editor 등이 있고요. 이건 기존의 Visual studio에도 있었던것 같은데, 제가 기존 버전의 기능을 써보질 않아서 어떤점이 좋아졌는지는 모르겠습니다. ^^;
음 좀더 자세한 내용은 다음에 계속 하겠습니다. 그럼 이만~~~~

 넥슨DB팀의 블로그에 SQL Server 관련 정보가 종종 올라오더군요.
이번엔 차기 버전인 Code name "Denali"의 신기능을 정리한 문서입니다.
새 버전에서는 개발툴도 따로 있는것 같더군요. 음... 자세히 읽어봐야 겠습니다.

원문 보기 : SQL Server 2011 (Denali) 신기능
Microsoft SQL Server에서 날짜를 가공해서 쓰다보니 Oracle과 차이점이 있어서 정리해 놓는다. 예전에 한번 정리했던것 같은데, 음... 안 보여서리... ㅋㅋㅋ
암튼 아래의 쿼리를 실행시켜보면 원하는 형태의 날짜 정보를 얻을 수 있을것이다.
Oracle에서는 TO_CHAR라는 함수를 이요하여 SYSDATE로 받은 날짜형 자료를 변환했지만, SQL Server에서는 CONVERT로 변환해서 사용한다.

SELECT GETDATE() "기본값",
       CONVERT(VARCHAR, GETDATE(), 120) "120",
       REPLACE(SUBSTRING(CONVERT(VARCHAR, GETDATE(), 120), 1, 10), '-', '') "120+수정",
       CONVERT(VARCHAR, GETDATE(), 111) "111",
       REPLACE(CONVERT(VARCHAR, GETDATE(), 111), '/', '') "111+수정",
       CONVERT(VARCHAR, GETDATE(), 121) "121",
       CONVERT(VARCHAR, GETDATE(), 110) "110",
       CONVERT(VARCHAR, GETDATE(), 112) "112",
       CONVERT(VARCHAR, GETDATE(), 113) "113",
       CONVERT(VARCHAR, GETDATE(), 114) "114",
       CONVERT(VARCHAR, GETDATE(), 109) "109",
       CONVERT(VARCHAR, GETDATE(), 108) "108",
       CONVERT(VARCHAR, GETDATE(), 107) "107",
       CONVERT(VARCHAR, GETDATE(), 106) "106",
       CONVERT(VARCHAR, GETDATE(), 105) "105",
       CONVERT(VARCHAR, GETDATE(), 104) "104",
       CONVERT(VARCHAR, GETDATE(), 103) "103"
GO

아래에는 위의 쿼리문을 실행한 결과를 하나씩 나열한 것이다.
2011-07-12 17:57:34.787   
2011-07-12 17:57:34   
20110712   
2011/07/12   
20110712   
2011-07-12 17:57:34.787   
07-12-2011   
20110712   
12 07 2011 17:57:34:787   
17:57:34:787
07 12 2011  6:13:05:023PM   
18:13:05   
07 12, 2011   
12 07 2011   
12-07-2011   
12.07.2011   
12/07/2011


 Tibero RDBMS를 UNIX나 Linux상에서 운영할때 가끔씩은 session을 종료시켜야 할때가 있다. 이상한 쿼리가 실행되고 있다거나, Memory나 Disk I/O를 많이 일으킨다거나... 뭐 암튼 tm(Tibero Monitoring script)으로 확인한 session을 종료시키고 싶을때 명령행에서 처리하는 방법이다.

1. tbsql을 이용한다.
 이 방법은 뭐 따로 설명할 필요가 있을까마는....
# tbsql sys

tbSQL 4 SP1

TmaxSoft, Co. Copyright(C) 2001-2009. All rights reserved.

Enter Password:

SQL> alter system kill session(111,1111);

이런식으로 처리해준다. Oracle과 다를거 없다.
session이 종료되지 않을때도 있다.


2. tbsvr kill을 이용한다.
명령행에서 "tbsvr kill"을 입력하면 session을 종료시킬 수 있다.
# tbsvr kill
sess: 33 user: SYS

select kill session (0: QUIT):

요기서 33을 입력해주면 해당 session이 종료된다. 물론...... 안될때도 있다.
0(영)대신에 Q를 입력해도 이 프로그램에서 빠져나갈 수 있다.

 지난번에 2011년도 SQL Unplugged 행사에 다녀와서는 참석 후기를 잘 정리해보겠다고 얘기하고는 아직까지 아무것도 정리하질 못했는데 발표자료가 공개되었다. 음... 발표자료를 보면서 기억을 되살려 참석후기를 써봐야 겠다. ㅋㅋㅋ

발표자료 다운로드 받으러 가기!!

+ Recent posts