database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 4828 게시물 읽기
No. 4828
200만건 데이터의 PostgreSQL 성능 보고
작성자
김상기(ioseph)
작성일
2003-08-06 23:11
조회수
3,519

아래 신기배님의 MySQL 과 PostgreSQL의 기본적인 select, insert 비교를 하면서, PostgreSQL 성능에 대한 한계(?)를 이야기 하셨는데,

그 글을 읽으면서 개인적으로 '저런 수치가 나올 수가 없을 터인데....' 하면서 읽었지요.

 

그래서, 이곳에서 구할 수 있는 데이터를 가지고, 개인 서버에서 테스트를 해 보았습니다.

 

대용량 데이터에 조작에 대해 관심 있으신 분들께서는 한번 즈음 읽어 보시는 것도 괜찮을 것같네요.

 

테스팅 환경

CPU: 팬티엄 II 350MHz 듀얼

메모리: 1GB

HDD: 일반 5400RPM IDE 드라이브

OS: Linux 2.4.18-6

PostgreSQL: 7.3.3

MySQL: 4.0.12

자료: 이곳 재고 데이터 200만건 (더 이상의 자료를 구하질 못해서 -.-)

 

작업이야기

이곳은(제가 일하는 곳) 사용자 측 RDBMS로 PostgreSQL놈을 쓰고, 내부적으로 Oracle를 씁니다. 판매 누적 데이터는 Oracle에서 관리하는지라, 일단 Oracle 데이터를 PostgreSQL copy로 넣기 위해서 tab 구문 문자로 덤프를 받고, 먼저 PostgreSQL 쪽으로 집어 넣었습니다.

이때, 날짜, 상점, 상품 이 세가지를 Primay Key로 하는지라, 그대로 지정한 상태에서 데이터를 집어넣었지요.

 

작업시간은 9분 40초

 

다음, MySQL 쪽으로 보내기 위해, pg_dump -d 로 자료를 받고 mysql 쪽에 넣었지요.

 

작업시간은 14분 20초

 

다음 select count(*) from t 의 모든 레코드 갯수 구하기

PostgreSQL : 15초

Mysql: 0.00초

(이놈은 PostgreSQL의 테이블 전체 레코드 갯수 구하는 알고리즘이 아직까지 시스템 카타로그를 사용하지 않기 때문에 어쩔 수 없는 문제입니다. 이것은 조만간에 바뀔 듯)

 

다음 Primary key 인덱스를 사용하는 실무에서 사용하는 쿼리

특정달(월단위) 특정상점의 특정 상품 재고 구하기.

PostgreSQL: 58ms

MySQL: 300ms

 

위의 똑같은 쿼리에 대한 인덱스 full search, (날짜에서 like 에서 %로 시작 - 이렇게 하면, 인덱스를 사용하기는 하는데, 특정상점, 특정 재고에 대한 모든 자료를 검색해서 필터링하지요, - mysql 놈은 약간 다르게 처리하더군요.)

PostgreSQL: 7.6초

MySQL: 8초

 

-------

이런식으로 실질적으로 업무에 사용되는 쿼리로 조회할 경우, 단순 테이블에서 의외로 제가 테스트한 환경에서는 PostgreSQL 놈이 더 빠르게 작동했습니다.

 

개인적으로 의외의 결과였지만, 어느 정도 예상했던 결과였습니다.

왜냐하면, DSN 검색 자료도 이미 수백만건이 넘어가고 있거든요. 그럼에도 불구하고, 사용자의 체감 속도에서 '느리다'는 느낌을 받지 않으니까요.

이 글에 대한 댓글이 총 3건 있습니다.

설정 파일을 뵈주세여! -.-;;;

다시 pgsql 교체론을 =_=

신기배(nonun)님이 2003-08-06 23:39에 작성한 댓글입니다.

설정파일이라고 할 것도 없습니다.

둘놈다(PostgreSQL, MySQL) 완벽한 설치 초기값이였습니다.

김상기(ioseph)님이 2003-08-07 09:16에 작성한 댓글입니다.

아침에 다시 한번 살펴보았는데,

신기배님의 결과치가 어느 정도 수긍이 가네요.

 

select 결과의 row 수가 수백건 미만일 경우는 PostgreSQL 놈이 MySQL 놈보다 약간 더 빠르지만,

(이 속도는 10-20ms 정도니까, 체감할 수 없는 속도인지라, MySQL 튜닝을 잘하면, 충분히 같아지거나 더 빨라질 수 있는 문제인듯)

1천 정도가 넘어가니까, 약 두배정도 느려지네요. 거기다 2천건 이상 되니까, 속도 차이는 더 심해지고,

.....

 

그래서 인덱스를 없애보았지요. :)

PostgreSQL 놈이 더 빨랐네요.

7초대 12초 정도.. (인덱스 사용하면, 평균 50-100ms 정도 소요되는 쿼리였는데...)

 

아무튼 이 장난의 결론은

어느 RDBMS를 사용하는가는 그 자료가 어떻게 구현되고, 어떻게 사용되어질 것인가?에 달려있는 것 같습니다.

김상기(ioseph)님이 2003-08-07 10:11에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
4831PGOle 프로바이더 컴파일 해보신분? [1]
이상호
2003-08-09
1764
4830동일 커넥션을 가지고 멀티 쓰레딩을 한다면... [2]
김일형
2003-08-09
1861
4829postgres 설치시 오류.. 급합니다^^; [1]
오주환
2003-08-07
1516
4828200만건 데이터의 PostgreSQL 성능 보고 [3]
김상기
2003-08-06
3519
4826PostgreSQL 7.3.4 가 릴리즈 되었네요... [1]
이상호
2003-08-06
1519
4825[질문]파일 import 관련 .. [1]
Jin
2003-08-06
1715
4824PostgreSQL 속도 향상을 위한 방법을 알려주세요 [5]
신기배
2003-08-06
10375
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다