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

Kebocoran memori di server postgresql setelah memutakhirkan ke Rails 4

Saya tidak tahu apa yang lebih baik:jawab pertanyaan saya atau perbarui ... jadi saya memilih untuk menjawab. Tolong beri tahu saya jika lebih baik memperbarui

Kami akhirnya menemukan masalahnya. Sejak versi 3.1, Rails menambahkan pernyataan yang disiapkan pada permintaan sederhana seperti User.find(id). Versi 4.0, menambahkan pernyataan siap untuk permintaan pada asosiasi (has_many, milik_to, has_one).Misalnya kode berikut:

class User
  has_many :adresses
end
user.addresses

buat permintaan

SELECT "addresses".* FROM "addresses" WHERE "addresses"."user_id" = $1  [["user_id", 1]]

Masalahnya adalah Rails hanya menambahkan variabel pernyataan yang disiapkan untuk kunci asing (di sini user_id). Jika Anda menggunakan permintaan sql khusus seperti

user.addresses.where("moved_at < ?", Time.now - 3.month) 

itu tidak akan menambahkan variabel ke pernyataan yang disiapkan untuk move_at. Jadi itu menghasilkan pernyataan yang disiapkan setiap kali permintaan dipanggil. Rails menangani pernyataan yang disiapkan dengan kumpulan ukuran maksimal 1000.

Namun, pernyataan yang disiapkan postgresql tidak dibagikan di seluruh koneksi, jadi dalam satu atau dua jam setiap koneksi memiliki 1000 pernyataan yang disiapkan. Beberapa dari mereka sangat besar. Hal ini menyebabkan konsumsi memori yang sangat tinggi pada server postgreqsl.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah mungkin untuk menangkap pelanggaran kunci asing di postgres

  2. PostGIS:Kueri dimensi z dan m (linestringzm)

  3. Tidak dapat menghubungkan PostgreSQL ke basis data jarak jauh menggunakan pgAdmin

  4. Aksen postgres yang tidak sensitif SEPERTI pencarian di Rails 3.1 di Heroku

  5. cara memindahkan tabel dari publik ke skema lain di Postgres