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 8827 게시물 읽기
No. 8827
vacuum 궁금사항입니다.
작성자
이창로(jlonglee)
작성일
2011-06-09 23:00
조회수
10,408

explain select count(filed_name) from table_name

위와 같은 단순 쿼리 실행계획을 보니 실제 로우갯수는 80건인데
cost는 10만이
넘어가더군요..(물로 그때문인지 속도도 엄청느림니다. )

기존 오라클을 사용해오던 터라 단순 테이블풀스캔하면 0.xx초면 될거같았는데
PostgreSQL 은 상당히 당황스러운 실행계획과 속도를 나타냈습니다.

혹시나 싶어서 vacuum full analyze table_name 한뒤 실햬계획을 살펴보니
cost가 6.0 수준으로 뚝떨어졌으며 결과 역시 순간적으로 나오네요...

왜.. 그럴까요? PostgreSQL 의 특성을 파악하지 못함일까요?
아니면 제가 잘못알고있었던 걸까요(오라클 테이블 풀스캔역시?)

 

 

 

 

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

 

 

 오라클에서도 비슷한 상황을 만들수 있습니다.  테이블 하나를 만드시고 100만건 정도 insert 하신후에  full scan  해보고, 10 row만 남기도 다 지워 보세요. 그후 full scan을 해보시면 100만건일때나 실행 속도에 차이가 없음을 알수 있습니다. (요부분이 확실치 않으시면 high water mark로 검색해보세요)

거기에 더해서 postgres은  undo image를 data와 동일한 테이블 스페이스에 저장합니다. 그리고 vacuum이 돌때까지 undo image가 expired  되었어도 그 공간을 재활용을 하지 않습니다. 그러다보니 delete, update 등이 많이 일어나는 테이블은 실제로 row수가 변하지 않더라도 테이블 사용공간은 계속 늘어나게 됩니다. 그리고 그렇게 늘어난 공간역시 full scan시에는 읽혀져야 하므로  cost가 아주 크게 됩니다.

상황이 이렇다보니 postgres에서는 주기적 vacuum이 아주 필수적이죠.

lte님이 2011-06-14 21:50에 작성한 댓글입니다. Edit

 오라클, 이하 대부분의 상용 엔터프라이즈급 DB는 빈번한 자료 변경에 따른 자료 통계치 자동 갱신 기능이 사용자도 모르게 실행하고 있습니다.

이것은 PostgreSQL에서는 Autovacuum 이라는 용어로 8.2 이상 버전(?) 부터는 사용자가 특별히 autovacuum 기능을 끄지 않는한 자동 실행되어 이제는 저런 문제가 잘 발생하지는 않습니다. 

물론 순십간에 엄청나게 지우고, autovacuum 처리가 일어나기 전에 바로 쿼리를 보내면 늦기도 하겠죠.

이 문제는 윗분 말처럼 오라클 뿐만 아니라, 모든 RDBMS가 똑 같이 가지고 있는 맹점입니다.

 

요즘 안그래도, 이 부분에 대한 고민을 틈틈히 하고 있는데, 이것의 가장 좋은 방법은 '공유 메모리'로 점점 굳어져가고 있습니다. 크크

아주 빈번한 자료 입출력에, 아주 빈번한 자료 변경이 일어난다면, 그리고 그 자료구조가 비교적 단순하다면, 그리고, 서버의 갑작스런 중지에 자료가 손실되어도 복구할 방법만 있다면, 이런 처리의 가장 좋은 방법은 공유메모리가 열쇠인듯합니다. 

 

김상기(ioseph)님이 2011-06-15 02:03에 작성한 댓글입니다.

오래기다렸는데..

두분의답변 정말 감사드립니다.

PostGreSQL은 첨써보는지라 톡특한(?) 부분이 있네요 ㅋㅋ

감사합니다.

이창로(jlonglee)님이 2011-06-15 21:15에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
8830Vacuum analyze시 out of memory 문제 해결(4411번)
이기정
2011-06-24
8574
8829특정 컬럼 암호화 [1]
2011-06-13
10051
8828형 변환자 목록 [1]
이기정
2011-06-10
9505
8827vacuum 궁금사항입니다. [3]
이창로
2011-06-09
10408
8826postgre 에서 원격의 mysql 서버에 DBlink 걸수 있나요?
나종현
2011-06-08
9186
8825Postgresql to Oracle Db Link 관련.. [2]
최재원
2011-06-07
16147
8824db 사용 user 관련 정보를 table 속성에 저장하고 싶어요~~ [1]
류선영
2011-06-05
8857
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.019초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다