Postgres - недостаточно памяти при циклической вставке - PullRequest
2 голосов
/ 10 октября 2010

Я анализирую XML-файл с несколькими тысячами элементов для вставки в базу данных sql. С sqlite все работает нормально, но postgres умирает от меня с этой ошибкой:

PGError: ERROR:  out of shared memory

Я наблюдал за блокировками, и похоже, что есть блокировка для каждого оператора вставки, и, хотя я просто зацикливаюсь на вызовах "save", которые выполняет activerecord (каждая из которых должна иметь транзакцию), эти блокировки кажутся такими, что открывать несколько тысяч одновременно.

В качестве эксперимента я включил вызовы сохранения в транзакцию:

Coupon.connection.transaction do  
  @coupon.save!
end

И это, похоже, решило мою проблему с замками. Тем не менее, кажется, что здесь что-то не так. Кто-нибудь знает, что это может быть? Я использую драйвер "pg".

Спасибо, Том

1 Ответ

1 голос
/ 10 октября 2010

Ваш сервер может быть настроен только на использование небольшого объема разделяемой памяти - http://www.postgresql.org/docs/8.1/static/kernel-resources.html очень подробно описывает все это. Попробуйте поднять это для начала. Однако несколько тысяч элементов, побеждающих PostgreSQL, звучат очень странно - насколько велики объекты, которые вы храните? Как выглядит ваш код AR? Здесь не так много информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...