Ubuntu 12.04'te PG 9.1 kullanılması.
Şu anda, formda olan bir veritabanında çok sayıda UPDATE ifadesi çalıştırmamız 24 saat sürüyor:
UPDATE table
SET field1 = constant1, field2 = constant2, ...
WHERE id = constid
(Sadece kimlik ile tanımlanan nesnelerin alanlarının üzerine yazıyoruz.) Değerler harici bir veri kaynağından geliyor (zaten bir tabloda DB'de değil).
Tablolarda, her birinin bir avuç endeksi vardır ve yabancı anahtar kısıtlamaları yoktur. Sonuna kadar hiçbir KOMİTE yapılmaz.
pg_dump
DB'nin tamamını içe aktarmak 2 saat sürer . Bu, makul şekilde hedef almamız gereken bir temel gibi görünüyor.
PostgreSQL'in yeniden içe aktarılması için bir veri kümesini bir şekilde yeniden yapılandıran özel bir program üretmemekle birlikte, toplu UPDATE performansını içe aktarma performansına yaklaştırmak için yapabileceğimiz bir şey var mı? (Bu, kütük yapılı birleştirme ağaçlarının iyi işlediğine inandığımız bir alandır, ancak PostgreSQL içinde yapabileceğimiz bir şey olup olmadığını merak ediyoruz.)
Bazı fikirler:
- ID olmayan endekslerin düşmesi ve daha sonra yeniden inşası?
- Artan checkpoint_segments, ancak bu aslında uzun vadeli iş hacminin sürdürülmesine yardımcı oluyor mu?
- burada belirtilen teknikleri kullanarak ? (Yeni verileri tablo olarak yükle, ardından kimliğin yeni verilerde bulunmadığı eski verileri "birleştir"
Temel olarak denenecek bir sürü şey var ve en etkili olanın ne olduğundan ya da başka şeylere göz attığımızdan emin değiliz. Birkaç gün deneyerek geçireceğiz, ama burada da soracağımızı düşündük.
Masada eşzamanlı yüküm var ama salt okunur.
explain analyze
arama için bir dizin kullanıyor mu diye kontrol ettiniz ?