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 4256 게시물 읽기
No. 4256
vacuum 이후 인덱스가 깨집니다
작성자
소타
작성일
2002-07-16 05:58
조회수
1,182

안녕하세요

그간 별고 없이 postgres를 쓰다가 방금 어이없는 현상을 보고 질문 드리러 날아왔습니다 ^^;

 

테이블은 게시판입니다.

 

CREATE TABLE "tb_board" (

"no" integer NOT NULL default nextval('seq_board_no'),

"b_id" integer NOT NULL references tb_board_title(b_id) match full on delete cascade on update cascade,

"num" integer NOT NULL,

"replyseq" varchar(10) DEFAULT 0 NOT NULL,

primary key(no)

);

 

위와 같이 테이블의 목록을 저장하는 테이블이 있고요. 물론 쓸데없는 필드는 적지 않았습니다.

 

CREATE TABLE "tb_board_detail" (

"no" integer NOT NULL references tb_board(no) on delete cascade on update cascade,

"dsc" text,

primary key(no)

);

 

게시물의 내용만 따로 저장하고 있습니다.

 

문제는요 tb_board 에 생성한 인덱스에서 발생했습니다.

CREATE INDEX board_no_index on tb_board using btree ("b_id", "num", "replyseq");

이와 같이 인덱스를 생성했고

b_id 는 게시판의 ID이며 num은 부모게시물의 값이고 모든 게시물에 들어가며 중복될수 있습니다. 답글이 있을시에는 replyseq 를 통해 정렬하는데

num 은 큰수부터 작은수로 저장됩니다. (시퀀스를 만들때 큰수부터 시작해서 -1씩 증가되게 했습니다) replyseq는 원글은 0 이고 답글이 아래로 달릴수록 증가되는 방식이고요

 

그럼 저런 인덱스가 있다면

select * from tb_board where b_id='게시판ID'

라고만 하면 이론적으로는 num과 replyseq 가 작은수 -> 큰수 대로 자동 정렬이 되어 나와야 합니다 order by 를 쓰지 않아도.

 

문제는 잘 되던게.. vacuum 을 한번 하고 나면 꼭 인덱스가 잘못됐는지 인덱스를 쓰지 않습니다 =_=;

테이블을 처음부터 다시 만들기 전에는 끝까지 인덱스를 쓰지 않네요.

 

vacuum 전

Limit

-> Index Scan using board_no_index on tb_board

 

vacuum 후

Limit

-> Seq Scan on tb_board

 

이렇게 되어버립니다 =_=;

게시물 정렬은 안되버리고요

 

vacuum 을 사용할때는 어떤 주의사항같은것이 있는지요

 

답변 부탁드립니다~ ^^;

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

아참..

빼먹은게 있어서 추가합니다.

vacuumdb DBNAME

을 해봐도 역시 같은 증상입니다.

7.2.1 을 사용하고 있으며 두대에서 사용중인데

한대는 소스컴파일, 한대는 RPM입니다. 두가지 모두 그러네요.

아무래도 tb_board_detail 이 참조하면서 뭔가 얽힌거 같은데 조언 부탁드립니다~

소타님이 2002-07-16 06:09에 작성한 댓글입니다.

REINDEX TABLE 를 이용해 보세요..

김순석(astrobio)님이 2002-07-16 08:59에 작성한 댓글입니다.

INDEX가 걸리면 정렬도 되나요?

황치영님이 2002-07-16 22:09에 작성한 댓글입니다.

앗 감사합니다.

reindex table 하니까 다시 인덱스가 동작하는군요 =_=;

그것도 모르고 pg_dump 하고 다시 restore 시켰습니니다 지금까지 -_-;;;

 

다른건 모르겠지만 btree 같은 >, < 방식으로 동작하는 인덱스는 자동정렬이 됩니다~

hash로 잡아논 테이블은 안해봐서 모르겠습니다 =_=;

소타님이 2002-07-17 23:26에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
4260또 글올립니다. 도와주세요 이번엔 다른 문제가 생겼어요 [1]
주성열
2002-07-19
953
4259pg_ctl start 실행후 에러가 발생합니다. 도와주세요 [1]
주성열
2002-07-19
918
4257현재 DB 정보를 보는 방법? [3]
박준철
2002-07-16
1009
4256vacuum 이후 인덱스가 깨집니다 [4]
소타
2002-07-16
1182
4255postgres, oracle 두개 디비를 한서버에 [1]
나그네
2002-07-12
961
4254레드헷7.3에서 부팅시 자동실행문제 [3]
신성욱
2002-07-10
1013
4250mysql의 enum과 같은 역할을 하는 데이터 타입이 뭔가요? [3]
김유신
2002-07-06
1047
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.022초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다