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

Parameter konfigurasi work_mem di PostgreSQL di Linux

Saya memposting rencana permintaan Anda di explain.depesz.com, lihatlah.

Perkiraan perencana kueri sangat salah di beberapa tempat. Sudahkah Anda menjalankan ANALYZE baru-baru ini?

Baca bab-bab dalam manual tentang Statistik yang Digunakan oleh Perencana dan Konstanta Biaya Perencana. Berikan perhatian khusus pada bab tentang random_page_cost dan default_statistics_target .
Anda dapat mencoba:

ALTER TABLE diplomas ALTER COLUMN number SET STATISTICS 1000;
ANALYZE diplomas;

Atau bahkan lebih tinggi untuk tabel dengan 10 juta baris. Itu tergantung pada distribusi data dan kueri yang sebenarnya . Percobaan. Standarnya adalah 100, maksimumnya adalah 10.000.

Untuk database sebesar itu, hanya 1 atau 5 MB work_mem umumnya tidak cukup. Baca halaman Wiki Postgres di Tuning Postgres yang terhubung dengan @aleroot.

Karena kueri Anda membutuhkan 430104kB memori di disk sesuai dengan EXPLAIN output, Anda harus mengatur work_mem ke sesuatu seperti 500MB atau lebih untuk memungkinkan penyortiran dalam memori. Representasi data dalam memori membutuhkan lebih banyak ruang daripada representasi di disk. Anda mungkin tertarik dengan apa yang diposting Tom Lane tentang masalah itu baru-baru ini.

Meningkatkan work_mem dengan hanya sedikit, seperti yang Anda coba, tidak akan banyak membantu atau bahkan bisa melambat. Menyetelnya ke tinggi secara global bahkan dapat merugikan, terutama dengan akses bersamaan. Beberapa sesi mungkin membuat satu sama lain kekurangan sumber daya. Mengalokasikan lebih banyak untuk satu tujuan menghilangkan memori dari yang lain jika sumber daya terbatas. Penyiapan terbaik bergantung pada situasi lengkapnya.

Untuk menghindari efek samping, setel cukup tinggi secara lokal di sesi Anda, dan sementara untuk kueri:

SET work_mem = '500MB';

Setel ulang ke default Anda setelahnya:

RESET work_mem;

Atau gunakan SET LOCAL untuk mengaturnya hanya untuk transaksi saat ini untuk memulai.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tulis kerangka data panda cepat ke postgres

  2. Kolom PostgreSQL foo tidak ada di mana foo adalah nilainya

  3. Kunci untuk SELECT sehingga proses lain tidak mendapatkan data lama

  4. Driver QPSQL tidak dimuat Qt

  5. Tambahkan Jam ke Nilai Waktu di PostgreSQL