O 빠르고 강력한 데이터베이스 - 서브쿼리(데이터베이스라면 당연히 되어야 하는 기능) - 트리거, 저장프로시져, 저장함수, 뷰 기능지원 - 다양한 OS에서 실행 [/summary]
|
프 로그램명 : MySQL 5.0.15
파 일이름 : mysql-5.0.15.tar.gz
운 영체제 : Linux, Unix, Windows 등
라 이센스 : GPL, 상업용 non-GPL
홈 페이지 : http://www.mysql.com |
가볍고 빠른 데이터베이스를 지향하던 AB사의 MySQL이 많은 기능을 보강한 5.0버전의 오랜 베타테스트를 끝내고, 정식버전 릴리즈 하였다. MySQL은 지속적인 버전업을 하면서, 가볍고 빠르게 실행하기 위해 배제 했던 많은 기능들을 하나하나 추가 하기 시작했다. 4.1에서 가장 이슈가 되었던 서브쿼리(데이터베이스라면 당연히 되어야 하는 기능)를 추가하였고, 5.0버전에서는 트리거, 저장프로시져, 저장함수, 뷰 등의 데이터베이스의 꼭 필요한 기능들을 구현하였다. 공식 웹사이트인 mysql.com에서 발표한 MySQL 5.0의 새로워진 기능이라는 문서를 바탕으로 본 리뷰를 작성하며, 서버 환경에 설치하여 하나 하나 새로워진 내용을 살펴 보았다.
먼저 공식 웹사이트에서 소스를 다운로드 받았다.
현 존하는 거의 모든 OS를 지원하는 이 MySQL의 소스코드를 구하기 위해서는 마우스의 스크롤을 한도없이 내려야 했다. 마지막쯤에 소스코드 다운로드를 찾을 수 있었다. tar.gz으로 묶여 압축된 파일을 받아와서 컴파일 하면서 설치 진행해 보겠다.
tar 명령어로 압축을 푼다. 그리고 환경설정을 한다.
tar xvfz mysql-5.0.15.tar.gz
cd mysql-5.0.15
CFLAGS="-static -O2 -march=i686 -funroll-loops"
CXXFLAGS="-static -O2 -march=i686 -funroll-loops -felide-constructors -fno-exceptions -fno-rtti"
./configure
--prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data
--disable-shared --enable-assembler
--with-thread-safe-client --with-mysqld-user="mysql"
--with-readline --without-debug
--without-docs --without-bench
--with-client-ldflags=-all-static
--with-mysqld-ldflags=-all-static
--with-charset=euckr
내 가 자주 이용하는 정적 설치법을 이용하였고, 주로 사용하던 옵션을 그대로 적용시켰다. 그리고 설치할 디렉토리는 /usr/local/mysql이며, 데이터가 저장될 디렉토리는 /usr/local/mysql/data로 지정하였다.
다음은 컴파일하고, 설치한다.
make -j 4 && make install
위 -j옵션은 cpu가 여러개 일 때 또는 하이퍼스레이딩을 지원할 때 사용하면, 효율적인 옵션이다. -j 4의 의미는 컴파일 시간에 4개의 job으로 나눠 컴파일 한다. 그렇게 하면 cpu에 각각 작업이 분할되어 컴파일 되기 때문에 상당한 시간 절약을 가져올 수 있다. 테스트 한 장비는 Xeon 2.8*2이다. -j 옵션을 제거하고 컴파일 했을때 16분이 걸리지만, -j 4 옵션을 사용하니 4분 걸렸다. 설치가 무사히 끝나면, make install으로 설치한다. 컴파일이 비정상적이라면, make install을 실행하지 않는다.
모든 것이 정상적이라면, 다음은 기본 db를 생성하고, help 매뉴얼을 db에 넣기 위해 명령을 실행한다.
/usr/local/mysql/bin/mysql_install_db
mysql의 경우 mysql사용자를 생성해서 그 사용자의 권한으로 실행하여야 하며, data디렉토리는 mysql사용자의 권한으로 되어 있어야 정상 실행되기 때문에 다음과 같이 사용자를 생성하고, 데이터디렉토리의 소유자를 바꾼다.
useradd -M mysql
chown -R mysql:mysql /usr/local/mysql/data
그리고 자주 사용하는 명령은 패스가 걸려있는 디렉토리에 링크를 걸어주어 아무 곳에서나 실행할 수 있게 한다.
ln -s /usr/local/mysql/bin/mysql /usr/bin/
ln -s /usr/local/mysql/bin/mysqldump /usr/bin/
이렇게 준비가 되었다면, mysql서버를 실행한다.
/usr/local/mysql/bin/mysqld_safe &
꼭, & 표시를 붙여 백그라운드 모드로 실행하며, 위 명령어 외에
/usr/local/mysql/share/mysql/mysql.server start
명 령을 이용하여 시작, 종료, 재시작 할 수 있다.
이렇게 mysql서버를 실행하였다면, 꼭 mysql의 root 비밀번호를 다음 명령어를 사용하여 변경한다.
/usr/local/mysql/bin/mysqladmin -u root password "암호"
초 기 root 비밀번호는 없으며, 위 “암호”에 자신만의 비밀번호를 입력한다.
다른 버전과 같은 방법으로 MySQL설치시 아무런 이상 없이 설치되었다. 그렇다면, mysql클라이언트를 이용하여 db에 접속해 보도록 하자.
이렇게 설치하였으니 mysql.com에서 발표한 MySQL 5.0의 새로운 기능에 대해서 알아보겠다.
가. BIT 데이터 타입 을 제공
새로운 데이터 타입이 생겼다. BIT타입이며, 이 BIT타입은 1~64비트까지 제공되며, 비트수를 명시하지 않았을 때는 1비트가 기본으로 적용된다. 다음 예를 보자.
위 예는 2비트를 a 컬럼의 데이터 타입으로 하였다. 표현 가능한 숫자 범위는 0~3이다.
2 라는 값을 넣어서, 2진수, 16진수, 8진수로 본 결과 이다.
나. Cursors 제공
기 본적으로 Server-Side 커서를 제공한다. 저장프로시져에서 주로 사용한다.
다. INFORMATION_SCHEMA 제공.
MySQL데이터베이스의 환경을 이 Meta database를 이용하여 확인 가능하다.
다 음은 information_schema 데이터베이스의 테이블들을 확인한 스크린샷이다.
라. Instance Manager
Instance Manager를 통해 원격지에서 데이터베이스 시작 및 종료 가능하다.
마. 정 확해진 계산
• 정확해진 계산
부동소수점의 문제를 해결하여 정확한 계산을 한다.
예) 0.0001을 10,000번 더하면, 1에 가까운 숫자가 나오는 것이 아닌, 정확하게 1이 나온다.
• ROUND() 함수가 환경에 영향을 받지 않고 정확한 결과를 처리한다.
• platform 독립성을 향상시켰다.
각기 다른 플렛폼에서도 같은 결과를 계산값을 가지게 하였다.
• 잘못된 값들을 처리한다.
Overflow 또는 0으로 나눴을 때 단순히 null을 리턴 하는 것이 아닌, 에러를 알아챈다.
이 설정을 하기 위해서는 시스템변수인 "sql_mode"를 설정하여야 한다.
바. Storage Engines
ARCHIVE, FEDERATED Storage Engine을 제공한다.
• ARCHIVE Storage Engine : 데이터 압축저장.
많은 양의 데이터를 인덱스 없이 저장할 때 사용한다.
설치시 configure 단계에서 --with-archive-storage-engine 옵션을 주어야 한다.
저장되는 파일은 압축된 파일인 테이블명.ARZ, .ARM, ARN 으로 저장된다.
단지, insert, select 쿼리만 지원한다. (delete, update, replace 지원안함)
• FEDERATED Storage Engine : 원격지 데이터 저장 엔진
로컬테이블보다, 원격데이터 베이스에 접근이 많을시 사용한다.
설치시 configure 단계에서 --with-federated-storage-engine 옵션을 준다.
.MYD파일이 생성되지 않는다.
다음은 FEDERATED 테이블 생성예제이다.
사. Stored Routine
저장 프로시져, 저장 함수를 지원한다. 그전 버전에서 아쉬웠던 사용자정의 함수를 지원하여 보다 쉬운 데이터베이스 설계가 가능하며, 프로그램으로 전송하는 데이터양을 줄일 수 있기 때문에 N/W부하를 줄일 수 있다. CREATE PROCEDURE , CREATE FUNCTION 등의 쿼리를 이용하여 생성 가능하다.
아. Strict Mode and Standard Error Handling
다양한 SQL 모드 지원하다. 시스템 변수인 sql_mode 를 이용하여, 다양한 sql 구문과, 에러 메시지 출력을 지원한다.
자. Triggers
제한된 트리거를 제공한다. “CREATE TRIGGER"이런 문장으로 트리거를 생성한다. 저장함수 및 저장 프로시져에서도 기본적인 트리거를 제공한다.
차. VARCHAR Data Type
VARCHAR 데이터타입의 길이가 65,532 byte로 늘어났다. 데이터의 마지막 공백은 제거하여 문제가 발생했던 점을 수정하여, 데이터에 어떠한 처리도 하지 않고 입력하다.
카. Views
named, updateable 뷰를 제공한다. 아쉬웠던 뷰를 이제 제공한다.
타. XA Transactions
Server-Side XA 트렌젝션 제공한다.
파. Performance enhancements(성능향상)
• 많은 테이블 join에서 좋지않은 키 사용에도 성능이 향상되었다.
• 다른키의 OR 연산에 최적화 되었다.
• join에서 “=”가 향상되었다.
• NOT IN 과 NOT BETWEEN를 최적화하여, 쿼리만드는데 사용하는 검색 시간을 줄였다.
• InnoDB Storage Engine에서 성능향상.
+ 새로운 압축방법을 사용하여 20% 의 공간절약을 할 수 있다.
+ ALTER TABLE에서의 실패 또는 중지에 대해 더 빠르게 복구 한다.
+ TRUNCATE에서 더 빠르게 실행한다.
• NDBCluster Storage Engine에서의 성능향상
+ IN 과 BETWEEN 을 사용하는 쿼리들의 성능이 향상되었다.
+ Condition pushdown : 가장 새롭게 기록된 정보를 먼저 검색하게 하여 성능 향상시키고, 네트웍의 부하를 줄였다.
• COUNT(DISTINCT) 사용시 BLOB 타입이 아니라면, 테이블 데신 임시파일을 직접 다루어 성능향상 시켰다. MIN(), MAX(), GROUP BY 또한 성능 향상되었다.
• MySQL client library에서 buffer를 사용하여 수신하기 때문에 많은 양의 시스템콜을 줄여서 성능향상시켰다.
• COUNT()함수에서 NULL키를 미리 제거하여 속도를 향상시켰다.
예) SELECT COUNT(*) FROM t1,t2 WHERE t2.c=t1.a;
여기서 c는 NULL값이 허용된 키이다.
• 단일 테이블의 UPDATE 또는 DELETE 쿼리에서 ORDER BY ... LIMIT N 문장을 사용할 경우 단지 N개의 레코드만 읽어 성능을 향상시켰다.
위의 새로워진 기능들은 mysql.com에서 공식적으로 발표한 내용이다. 여기서 눈여겨 보아야 할 내용들은 뷰, 트리거, 저장함수 등이다. 이 리뷰는, 사용하면서 새로운 기능보다는 새로운 기능을 소개한 문서의 내용들을 정리해 보았으며, 불필요한 부분은 제거하고, 필요한 부분들은 메뉴얼을 보면서 채웠다. mysql이 접하기 쉬워 사용하면서 몇 가지 아쉬운 기능들을 많이 개선하고 있다. 계속 발전하기를 바라는 마음으로 본 리뷰를 마무리 하겠다.
참 고사이트 : www.mysql.com
test OS : Fedora Core 2 (Kernel 2.6.10)
작 성자 수퍼유저코리아 에스유 (doly@superuser.co.kr) |