안녕하세요~
항상 많은 정보를 얻어 DSN 감사하고있는 초급개발자 입니다.^^
다름이 아니라 .. 제가 DB를 설계하고 현재 업무에 사용하고 있는데 궁금한점이 있어서 이렇게 글을 올립니다.
우선 pgsql의 schema를 두개를 나뉘어 쓰고 있습니다.
Schema
- log : 순수 로그 저장 스키마
- public : 업무 스키마
이렇게 만들어서 사용중에 있습니다.
문제점은 두개의 log Schema의 로그 저장 Table 의 insert와 업데이트가 이루어지는데
(현재 쌓여있는 Data는 4만건 정도입니다.)
이 로그저장 Table의 질의를 하면 Data가 엄청나게 많은것도 아닌데 속도가 느려진다는 것입니다.
그래서 Public의 스키마의 Query 질의의 속도의 영향을 주고, 락이 걸려 Query가 빠지지 않습니다.
DB과부하가 계속 걸려서 webpage가 엄청난 속도로 느려진다는 것입니다. T.T
explain에서는 전혀 문제가 없는데요.. 조건도 간단한거라..
아래 Table과 Query/plan도 같이 첨부합니다.
한번 읽어보시고 고언 부탁드립니다(__) ;
-- 질의 Table
CREATE TABLE log.server_log_range_1
(
server_log_range_idx serial NOT NULL,
flag integer,
client_ip inet,
id character varying,
pwd character varying,
nn character varying,
ver character varying,
cdkey character varying,
tf_flag boolean,
connetion_time timestamp with time zone, -- 접속시간
log_time timestamp with time zone, -- 로그시간
user_ip inet,
CONSTRAINT log_server_log_range_1 PRIMARY KEY (server_log_range_idx)
)
WITH (OIDS=TRUE);
ALTER TABLE log.server_log_range_1 OWNER TO apache;
-- talb의 null값이 존재합니다.
-- 질의 Query
SELECT server_log_range_idx AS max_log_idx
, flag AS max_flag
FROM log.server_log_range_5
WHERE client_ip='172.11.142.208'
ORDER BY server_log_range_idx DESC
LIMIT 1 OFFSET 0
-- 질의 Query plan
"Limit (cost=0.00..474.19 rows=1 width=8)"
" -> Index Scan Backward using log_server_log_range_5 on server_log_range_5 (cost=0.00..86776.02 rows=183 width=8)"
" Filter: (client_ip = '172.11.142.208'::inet)"
|