PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Postgresql - Bagaimana cara mempercepat pembaruan tabel besar (100 juta baris)?

Karena Anda menggabungkan dua tabel besar dan tidak ada kondisi yang dapat memfilter baris, satu-satunya strategi penggabungan yang efisien adalah penggabungan hash, dan tidak ada indeks yang dapat membantu dengan itu.

Pertama akan ada pemindaian berurutan dari salah satu tabel, dari mana struktur hash dibangun, kemudian akan ada pemindaian berurutan di atas tabel lainnya, dan hash akan diperiksa untuk setiap baris yang ditemukan. Bagaimana indeks bisa membantu dengan itu?

Anda dapat mengharapkan operasi seperti itu memakan waktu lama, tetapi ada beberapa cara untuk mempercepat operasi:

  • Hapus semua indeks dan batasan pada tx_input1 sebelum kamu memulai. Permintaan Anda adalah salah satu contoh di mana indeks tidak membantu sama sekali, tetapi sebenarnya menyakitkan kinerja, karena indeks harus diperbarui bersama dengan tabel. Buat ulang indeks dan batasan setelah Anda selesai dengan UPDATE . Bergantung pada jumlah indeks di tabel, Anda dapat mengharapkan peningkatan kinerja yang layak hingga besar.

  • Tingkatkan work_mem parameter untuk operasi yang satu ini dengan SET perintah setinggi mungkin. Semakin banyak memori yang dapat digunakan oleh operasi hash, semakin cepat. Dengan tabel sebesar itu, Anda mungkin masih memiliki file sementara, tetapi Anda masih dapat mengharapkan peningkatan kinerja yang layak.

  • Tingkatkan checkpoint_segments (atau max_wal_size dari versi 9.6 aktif) ke nilai tinggi sehingga ada lebih sedikit pos pemeriksaan selama UPDATE operasi.

  • Pastikan statistik tabel pada kedua tabel akurat, sehingga PostgreSQL dapat memberikan perkiraan yang baik untuk jumlah hash bucket yang akan dibuat.

Setelah UPDATE , jika itu memengaruhi sejumlah besar baris, Anda dapat mempertimbangkan untuk menjalankan VACUUM (FULL) pada tx_input1 untuk menyingkirkan tabel yang dihasilkan mengasapi. Ini akan mengunci meja untuk waktu yang lebih lama, jadi lakukan selama masa pemeliharaan. Ini akan mengurangi ukuran tabel dan akibatnya mempercepat pemindaian berurutan.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana membandingkan 2 nilai baris berturut-turut dalam objek hasil menggunakan python

  2. Heroku mentransfer db dari satu aplikasi ke aplikasi lain

  3. Koneksi Heroku Postgres dari aplikasi PHP localhost

  4. Baris yang dihapus dari tabel yang direfleksikan dengan SQLAlchemy

  5. pemulihan basis data ke status tertentu untuk pengujian