Menggunakan PG 9.1 di Ubuntu 12.04.
Saat ini diperlukan waktu hingga 24 jam bagi kami untuk menjalankan serangkaian besar pernyataan UPDATE pada database, yang berbentuk:
UPDATE table
SET field1 = constant1, field2 = constant2, ...
WHERE id = constid
(Kami hanya menimpa bidang objek yang diidentifikasi oleh ID.) Nilai-nilai tersebut berasal dari sumber data eksternal (belum ada dalam DB dalam tabel).
Tabel memiliki beberapa indeks masing-masing dan tidak ada batasan kunci asing. Tidak ada KOMIT yang dibuat sampai akhir.
Diperlukan 2 jam untuk mengimpor a pg_dump
dari seluruh DB. Ini terlihat seperti garis dasar yang harus kita targetkan secara wajar.
Kurang menghasilkan program khusus yang entah bagaimana merekonstruksi set data untuk PostgreSQL untuk diimpor kembali, adakah yang bisa kita lakukan untuk membawa kinerja UPDATE massal lebih dekat dengan impor? (Ini adalah area yang kami yakini dapat menangani pohon gabungan dengan struktur log, tapi kami bertanya-tanya apakah ada yang bisa kami lakukan di dalam PostgreSQL.)
Beberapa ide:
- menjatuhkan semua indeks non-ID dan membangun kembali sesudahnya?
- meningkatkan checkpoint_segments, tetapi apakah ini benar-benar membantu throughput jangka panjang yang berkelanjutan?
- menggunakan teknik yang disebutkan di sini ? (Muat data baru sebagai tabel, lalu "gabungkan" data lama di mana ID tidak ditemukan dalam data baru)
Pada dasarnya ada banyak hal untuk dicoba dan kami tidak yakin apa yang paling efektif atau jika kita mengabaikan hal-hal lain. Kami akan menghabiskan beberapa hari berikutnya bereksperimen, tetapi kami pikir kami akan bertanya di sini juga.
Saya memiliki beban bersamaan di atas meja tetapi hanya-baca.
explain analyze
bahwa itu menggunakan indeks untuk pencarian?