>> Delete Reply from No. 0 article
No. RE: 100만건 트랜잭션 테스트해봤습니다.

등록 2002-06-13 06:33:00     조회 5
이름 김주현    

		컴파일러는 gcc 2.95를 썼습니다. MySQL은 어제 나온 3.23.51 버젼이고
레드햇 7.2에 커널은 2.4.18을 사용했습니다.
 gcc 2.96이나 3.0은 아직 추천하지 않더군요.
특히 MySQL AB측에서 2.96의 경우 랜덤 크래쉬나 테이블 깨짐 현상이 일어날 수 있으니 사용을
 금하라고 되어있습니다.  테스트 방식은 간단한 innodb 타입의 테이블을 생성하고 PERL을 이
용하여 트랜잭션을 건다음 100만건을 모두 insert한 후 commit하도록 하였습니다.
 create table innodb ( one int primary key, two char(10), three char(30)) type=innodb;
 사용한 PERL DBI프로그램 코드 
 $dbh->do("set autocommit = 0");
  for ($j = 0; $j < 1000000; $j = $j + 1) {
   $dbh->do("insert into innodb values ($j, '$j', '$j')");
}
 $dbh->do("commit");
 $dbh->disconnect;
 결과는
 [root@localhost download]# time ./bench.pl
 real    1m49.544s
user    0m22.770s
sys     0m10.470s
  MyISAM타입의 테이블에도 동일한 테스트를 해봤습니다.
[root@localhost download]# time ./bench.pl
 real    1m55.493s
user    0m21.550s
sys     0m10.370s
  bulk insert의 경우 innodb가 오히려 트랜잭션을 걸고도 더 빠른 기현상이
발견되었습니다.
 100만건 트랜잭션 처리에 저 정도면 나쁘지 않다고 생각되는군요. :-)
  -------------------------------------------------------------
참고 사항:
 MyISAM bulk insert의 성능을 올리기위해서
insert 전에 write lock 을 걸고 insert 후 unlock tables를 해주니
innodb보다 빨라지기는 했습니다.
lock을 사용한 결과는
 [root@localhost download]# time ./bench.pl
 real    1m41.498s
user    0m21.460s
sys     0m9.390s
    :
:  MySQL 에서 트랜잭션은 innodb 와 같은 것들을 사용하여 가능하다는
:
:  것은 아마 다들 알고 계실겁니다.
:
:  하지만 매우 복잡한 문제들이 많이 있습니다.
:
:  역시 뻔한 이야기 이지만.... MySQL 로 운용 가능한 대형 싸이트 라는
:
:  조건하에... 트랜잭션 사용을 위해 innodb 로 바꾼 결과
:
:  끔찍한 일들이 벌어지곤 합니다.
:
:  사실 MySQL 이 개발되어진 근본적인 이유를 짚고 넘어가자면...
:
:  MySQL 에서 트랜잭션을 원하는것 자체가 좀 문제가 있지
:
:  않을까... 싶습니다.
:
:  어쨌든... 예전 방법대로 그냥 다시 사용하고 있습니다.
:
:  이번기회에 PostgreSQL 로 옮길 생각도 하고 있습니다.
:
:  제가 잘 몰라서... 그게 과연 효과가 있을지는 모르겠지만...
[관리자] 패스워드를 입력 하십시오. 답장이 존재하면 함께 삭제됩니다.[ 목록 | 이전 ]
패스워드:    

Copyleft 1999-2026 by JSBoard Open Project
Theme Designed by IDOO All right reserved