Slow query issues for large amounts of data
baegjae opened this issue · comments
최근 모바일가입증명 서버가 갑자기 느려지는 문제가 발생하였음
로그를 확인하니, aca-py-askar 에서 날리는 query가 70초가 되야 리턴되는 상황 발생. DB의 CPU사용량은 100%
처음에는 DB서버의 문제인줄 알았으나, 모바일가입증명 서버를 중지하였더니, DB CPU사용량이 줄어들고 DB정상화됨.
모바일가입증명 서버의 요청이 DB에 slow query를 발생시키는 상황.
LOG: duration: 72732.627 ms execute sqlx_s_9: SELECT id, name, value, (SELECT ARRAY_TO_STRING(ARRAY_AGG(it.plaintext || ':' || ENCODE(it.name, 'hex') || ':' || ENCODE(it.value, 'hex')), ',') FROM items_tags it WHERE it.item_id = i.id) tags FROM items i WHERE profile_id = $1 AND kind = $2 AND category = $3 AND (expiry IS NULL OR expiry > CURRENT_TIMESTAMP) AND i.id IN (SELECT item_id FROM items_tags WHERE name = $4 AND value = $5 AND SUBSTR(value, 1, 12) = $6 AND plaintext = 0)
여러 우여곡절이 있었지만, wallets DB에 index 를 추가하는 방법으로 해결하였음.
create index ix_items_exp
on public.items (profile_id, kind, category, expiry);
create index ix_items_tags_name_enc_plain
on public.items_tags (name, value, substr(value, 1, 12)) include (item_id)
where (plaintext = 0);
create index ix_items_tags_name_enc_plain
on public.items_tags (name, value, substr(value, 1, 12)) include (item_id)
where (plaintext = 0);
사양이 낮은 산인공 개발망 postgres에서는 아래와 같은 에러 발생(운영망은 사용이 좋아서 create 성공)
index row size 3864 exceeds btree version 4 maximum for index 2704