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 7696 게시물 읽기
No. 7696
SELECT 속도관련 질문입니다~ 도와주세욤^^;
작성자
주성진(szcom)
작성일
2009-04-22 15:30
조회수
7,210


두개의 table이 있습니다.

1번 table : ip_list(임의 대역별 IP를 저장하고있는 table)
2번 table : ip_total(임의 대역을 저장하고있는 table)

※ 두개의 table에는 INSERT가 일어나지 않습니다.

 ip_total table(45 row)

ip_total_idx(serial)  |    ip_age(inet)  |
----------------------------------
     1                     | 133.255.255.0/24  |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 
ip_list table(5800 row)
 

ip_list_idx(serial)  |    ip(inet)     | flag |     flag_time
-----------------------------------------------------
     1                   | 133.255.255.1 | t     | 1234567890(unix_time)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(btree 인덱스가 ip 컬럼 에 걸려있음)

여기서 ip가 사용중이면 flag값이 t로 업데이트 되면서 flag_time도 업데이트 가 이루어지고. 미사용중이면 flag값이 f로 업데이트되면 flag_time도 업데이트가 
됩니다,
위사항을 포함해서 하루의 대략 ip_list의 table의 3000번정도의 업데이트 이루어집니다.

여기서 문제는
두개의 table을 아래 조건으로 SELECT 했을때

WHERE ip << ip_age 
          AND flag='f' 
        AND to_timestamp((s.flag_time::integer + 86400)::double precision) < now() 

(설명: ip가 ip_total table 대역의 포함되고, 미사용중이고, 미사용시간이 하루이상이 지난 IP를 SELECT 함)


몇일은 Query의 속도가 괜찮다가,, 이후 한 보름정도 지나면, SELECT 의 속도가  현저히 지연됩니다.

그래서 현재는 계속 transaction처리(VACUUM)을 수동으로 하고 다시 정상의 속도로 만듭니다.

table을 재정규화나, Query 수정, 인덱스 재처리를 해봤는데도, 시일이 지나면 다시 똑같습니다.

이 문제를 해결할수있는 방안이 있을까요?


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

안녕하세요.


해당 전체 쿼리와 쿼리에대한 실행계획(EXPLAIN) 정보를 알려주시면 문제를 찾는데 도움이 됩니다.

김영우님이 2009-04-22 18:14에 작성한 댓글입니다. Edit

두번째 문제는 vacuum문제 같은데여 일단 postgresql.conf 세팅을 잘하시고 autovacuum처리를 하면 해결된거 같은데여 제생각으로는 하루에 3000번 정도 업데이트가 일어나는데 보름 정도 밖에 못간다면 메모리 관련 세팅이 너무 낮은 것도 있는거 같거든여 ..

 

제가 좀 허접해서 하시기전에 문서 읽어보시고 해보세용

열혈지누(jinukey)님이 2009-04-22 23:14에 작성한 댓글입니다.

앗차! 죄송합니다.

두개의 Table을 View로 만들어서 Query를 질의하고 있습니다.

View Query 와 Explain 다시 첨부하겠습니다.


CREATE OR REPLACE VIEW view_ip_onlist AS
 SELECT ipl.ip, ipt.ip_total_idx
 FROM ip_list AS ipl ,ip_total AS ipt
  WHERE ip << ip_age
          AND flag='f'
        AND to_timestamp((ipl.flag_time::integer + 86400)::double precision) < now()
 ORDER BY ipt.ip_total_idx


-- 질의 : SELECT * FROM view_ip_onlist 

-- Explain

"Sort  (cost=452.54..459.79 rows=2900 width=36)"
"  Sort Key: ipt.ip_total_idx"
"  ->  Nested Loop  (cost=22.76..285.76 rows=2900 width=36)"
"        Join Filter: (ipl.ip << ipt.ip_age)"
"        ->  Seq Scan on ip_list ipl  (cost=0.00..132.50 rows=5 width=32)"
"              Filter: (((flag)::text = 'f'::text) AND (to_timestamp((((flag_time)::integer + 86400))::double precision) < now()))"
"        ->  Materialize  (cost=22.76..34.36 rows=1160 width=36)"
"              ->  Seq Scan on ip_total ipt  (cost=0.00..21.60 rows=1160 width=36)"

이렇게네요~ 도와주세요 T.T

주성진(szcom)님이 2009-04-23 10:10에 작성한 댓글입니다.

제가 설명을 너무 허접하게 해서인지.. 

고언이 없으시네요 T.T 

김영우님, 열혈지누님 답변 감사합니다 (__)꾸벅(Orz..굽신,굽신)

주성진(szcom)님이 2009-04-23 17:49에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
7699[질문]로그볼 수 있는 방법 좀 알려주세요..
가우나라
2009-04-23
6949
76988.4 CREATE SERVER [2]
tyro
2009-04-22
6872
7697pgsql에서 모두 삭제할 때 스퀸스까지 [4]
아앙
2009-04-22
7111
7696SELECT 속도관련 질문입니다~ 도와주세욤^^; [4]
주성진
2009-04-22
7210
7695pgadmin III에서 여러 IP Address 접속하는 법이 궁금합니다. [3]
박춘삼
2009-04-20
7386
7694solaris 10 pgpool-II 접속문제 [2]
김태규
2009-04-20
9781
7693pl/pgsql api 자료 있는곳을 알려주세요 [2]
치우
2009-04-17
6999
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다