해당 스크린샷에서 하늘색 그래프가 row exclusive lock 인데요, 오후 5시 20분 경부터 꾸준히 8 정도를 유지하면서 중간 중간 피크를 치던 것이 2시간 정도 지나서야 풀렸습니다.
왠지 느낌이 있어서 postgresql.log 를 뒤져보니 해당 시간동안 테이블에 autovacuum 이 수행중이었더라구요.
2015-06-09 19:20:00 KST [118566-1] LOG: automatic vacuum of table moci.public.card: index scans: 1
pages: 0 removed, 2429771 remain
tuples: 18574 removed, 58095356 remain, 9936 are dead but not yet removable
buffer usage: 4043806 hits, 3473377 misses, 1444040 dirtied
avg read rate: 3.930 MB/s, avg write rate: 1.634 MB/s
system usage: CPU 8.00s/99.26u sec elapsed 6905.53 sec
질문은 다음과 같습니다.
1) autovacuum 이 수행중인 테이블엔 row exclusive lock 이 걸리는지요? 그리고 중간 중간 저렇게 row exclusive lock 이 피크를 치는 것도 autovacuum 의 영향인지요?
2) 해당 테이블은 하루에 약 100만건의 insert 와 수백만건의 update 가 일어나는 테이블입니다.(delete 는 없습니다.) 또한 현재 쌓인 row 는 약 6천만 건 정도 되는데요, 현재 autovacuum 관련 설정은 다음과 같습니다.
* autovacuum_vacuum_scale_factor = 0.01
* autovacuum_vacuum_threshold = 50
몇몇 도큐먼트에서는 조금 더 공격적인 autovacuum 을 위해서 autovacuum_vacuum_threshold 를 상수(5만에서 10만정도) 로 설정하고 autovacuum_vacuum_scale_factor 를 아예 0 으로 설정해 버려서 그냥 autovacuum 의 임계치를 상수로 설정하라는 말을 보았는데요, 적정한 autovacuum 의 임계치는 어떻게 설정하는 것이 좋을까요?
postgresql 을 잘 모르는 상태에서 제법 큰 데이터를 다루려다 보니 막히는 부분이 정말 많네요 ㅠㅠ
|