바쁜 테이블이 진공 청소기로 청소되지 않습니다 VACUUM하지 지금까지 실행 한 것으로

Windows에서 Postgres 9.2를 사용하여 저주파 시계열 데이터를 저장하고 있습니다. 가동 중지 시간없이 연중 무휴 24 시간마다 초당 약 2000 행을 삽입하고 있습니다. 이 DELETE일의 고정 번호로 테이블의 길이를 유지하기 위해 테이블에 매 10 분 정도를 실행합니다. 결과적으로 9 억 행이 상당히 안정적입니다. (사람들은 관심 들어, SELECT, INSERT, DELETE모든 확대됨에 있습니다).

따라서 DELETE행을 삭제해도 디스크 공간이 확보되지 않습니다. 이를 위해 우리는 VACUUM실행 해야 합니다.

나는 묻습니다했습니다 pg_stat_user_tablesVACUUM하지 지금까지 실행 한 것으로 나타납니다.

다양한 문서에서 이해하는 내용 ( http://www.postgresql.org/docs/9.2/static/routine-vacuuming.html ) :

  • 자동 진공 기능이 켜져 있고 다른 테이블에서 실행 중입니다.
  • auto-vacuum은 실행되지 않으며 FULL테이블에 대한 독점 잠금이 필요 하지 않습니다 .

auto-vacuum이 왜 실행되지 않는지 아는 사람이 있습니까? 테이블이 계속 바쁘기 때문에 이것이 순수합니까?

그리고 그것은 가치가 실행중인 VACUUM모든 후, DELETE이 경우 (이는 매 10 분마다 운행)에서는?

편집하다:

아래 SO 링크에서 SQL을 사용하여 쿼리하십시오.

-[ RECORD 2 ]---+---------------------------
schemaname      | stats
relname         | statistic_values_by_sec
last_vacuum     |
last_autovacuum |
n_tup           |    932,315,264
dead_tup        |    940,727,818
av_threshold    |    186,463,103
expect_av       | *

원시 출력 :

-[ RECORD 3 ]-----+---------------------------
relid             | 501908
schemaname        | stats
relname           | statistic_values_by_sec
seq_scan          | 12
seq_tup_read      | 4526762064
idx_scan          | 29643
idx_tup_fetch     | 2544206912
n_tup_ins         | 1573896877
n_tup_upd         | 0
n_tup_del         | 941176496
n_tup_hot_upd     | 0
n_live_tup        | 688858417
n_dead_tup        | 940727818
last_vacuum       |
last_autovacuum   |
last_analyze      |
last_autoanalyze  | 2014-08-09 01:36:21.703+01
vacuum_count      | 0
autovacuum_count  | 0
analyze_count     | 0
autoanalyze_count | 69



답변

나는 파티셔닝 을 살펴볼 것이다 . 일별로 파티션을 나누면 너무 오래되면 전체 파티션을 삭제할 수 있습니다. 더 이상 진공 청소기로 청소하지 않아도됩니다.

또한 삭제하는 위치에 삽입하지 않기 때문에 전반적인 성능이 향상 될 수 있습니다. 새로운 파티션을 생성하고 오래된 파티션을 삭제하려면 코드를 작성하면됩니다.

이것이 바로 파티셔닝을위한 것입니다.


답변