PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Изтичане на памет на postgresql сървър след надграждане до Rails 4

Не знам кое е по-добре:да отговорите на въпроса ми или да го актуализирате ... затова избирам да отговоря. Моля, уведомете ме дали е по-добре да актуализирам

Най-накрая откриваме проблема. От версия 3.1 Rails добави подготвени изрази при проста заявка като User.find(id). Версия 4.0, добавени подготвени изрази към заявки за асоциации (has_many, belongs_to, has_one). Например следния код:

class User
  has_many :adresses
end
user.addresses

генериране на заявка

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

Проблемът е, че Rails добавят само подготвени променливи за изявление за външни ключове (тук user_id). Ако използвате персонализирана sql заявка като

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

няма да добави променлива към подготвените изрази за moved_at. Така той генерира подготвени отчети всеки път, когато се извика заявката. Rails обработват подготвени изрази с пул от максимален размер 1000.

Подготвените изрази за postgresql обаче не се споделят през връзката, така че за един или два часа всяка връзка има 1000 подготвени израза. Някои от тях са много големи. Това води до много висока консумация на памет на 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. Не може да се инсталира pg gem в Mavericks с Postgres.app

  2. Как да използвам array_agg() за varchar[]

  3. PostgreSQL tsrange:правилно ли е, че lower_inf('(-infinity,today)'::tsrange) е невярно?

  4. Нулирайте стойността на последователността като 1

  5. PostgreSQL нечувствителен към малки и големи букви SELECT на масив