Saya menggunakan PostgreSQL 8.3 + PostGIS 1.3 untuk menyimpan data geospasial di Ubuntu 8.04 Hardy .
Versi PostGIS tertentu ini memiliki bug ketika menghitung buffer()
segmen yang sangat kompleks, yang menyebabkan kueri mengambil lebih banyak dan lebih banyak memori hingga seluruh mesin macet.
Saya mencari mekanisme PostgreSQL yang dapat:
- Batasi konsumsi memori (dan mungkin sumber daya lainnya) yang digunakan oleh permintaan tertentu.
- Secara otomatis menghentikan kueri yang waktu eksekusi melebihi batas tertentu.
Ada ide?
performance
postgresql
Adam Matan
sumber
sumber
Jawaban:
Untuk membatasi konsumsi memori, parameter konfigurasi utama adalah
work_mem
. Karena ini berlaku per operasi, bukan per kueri, Anda tidak bisa hanya mengaturnya ke N jika Anda ingin menghabiskan jumlah memori N, tetapi Anda harus mengubah dan menyelaraskannya sedikit untuk mendapatkan hasil yang diinginkan.Namun, ini tidak membantu jika ada bug dan kebocoran memori lainnya dalam kode server atau ekstensi. Anda bisa mengendalikannya dengan batas sumber daya spesifik proses yang dikendalikan oleh
ulimit
. Tetapi jika Anda mencapai batas dan alokasi memori gagal, apa yang Anda inginkan terjadi? Mungkin tidak akan berperilaku terlalu baik. Lebih baik memperbaiki bug itu atau menggunakan versi yang berbeda.Stop kueri yang waktu eksekusi melewati ambang batas, gunakan parameter `statement_timeout ', misalnya,
sumber
Lihatlah Postgres Wiki :
Anda dapat menyesuaikan pengaturan kinerja pada per pengguna atau per basis data tetapi tidak kapan harus membatalkan permintaan tertentu.
sumber