Meşgul tablo vakumlanmıyor


11

Windows'ta Postgres 9.2'yi düşük frekanslı zaman çizelgeleri verilerini depolamak için kullanıyoruz: 24 saatte bir saniyede yaklaşık 2000 satır, haftada 7 gün kesinti olmadan ekliyoruz. DELETEMasanın uzunluğunu sabit sayıda güne tutmak için her 10 dakikada bir masada çalışan bir vardır. Bu oldukça istikrarlı bir 900 milyon sıra haline geliyor. (Bu ilgi için SELECT, INSERT, DELETEbütün ölçülebilir vardır).

Bu şekilde DELETE, satırları silerken disk alanı boşaltmaz. Bunun için VACUUMkaçmamız gerekiyor .

Ben sorgularım pg_stat_user_tablesve VACUUMhiç çalıştırmak değil gibi görünüyor.

Çeşitli belgelerden anladıklarım ( http://www.postgresql.org/docs/9.2/static/routine-vacuuming.html ):

  • otomatik vakum açık gibi görünüyor ve diğer tablolarda çalışıyor.
  • otomatik vakum çalışmaz FULLve masada özel bir kilit gerektirmez.

Otomatik vakumun neden çalışmadığını düşünen var mı? Bu sadece masanın sürekli meşgul olması nedeniyle mi?

Ve bu durumda VACUUMher birinden sonra koşmaya değer DELETE(ki her 10 dakikada bir çalışır)?

Düzenle:

Aşağıdaki SO bağlantısından SQL kullanarak sorgulama:

-[ 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       | *

ve ham çıktı:

-[ 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

4
PostgreSQL'de Agresif Otovakum'a bakınız . Ayrıca select * from pg_stat_user_tablesbu tabloya sahip olmak ilginç olurdu ( \xgüzel biçimlendirilmiş çıktılar için psql'de kullanın )
Daniel Vérité

2
Bu bağlantı yararlıdır ve belki de soruyu cevaplar - tablo otomatik vakumun çalışması için çok meşgul. @ DanielVérité Soruyu, istediğiniz çıktıyla güncelledim.
Barry

3
Bu bir sürü ölü tuple! Mümkünse, tabloyu zaman damgasına göre bölümlere ayırmayı ve silmek yerine eski bölümleri bırakmayı düşünün. En büyük uyarı, bölümler arasındaki benzersiz dizin desteklenmez.
Daniel Vérité

1
Günlük dosyasında bu tablodaki otomatik vakum hakkında iptal edilen mesajlar var mı?
jjanes

@jjanes Hayır - günlüklerde otovakumun başladığı yönünde hiçbir belirti yoktu.
Barry

Yanıtlar:


2

İçine olmazdı bölümleme . Güne göre bölümlere ayrılırsa, çok eski olduğunda tüm bölümü bırakabilirsiniz. Artık vakum yapmanız gerekmeyebilir.

Ayrıca, sildiğiniz yeri eklemediğiniz için genel performans artabilir. Yeni bölümler oluşturmak ve eskilerini silmek için kodu yazmanız yeterlidir.

Bölümleme tam olarak bunun içindir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.