Ошибка хранения db2 при запуске хранимых процедур - PullRequest
0 голосов
/ 01 апреля 2009

Я вижу вышеупомянутую ошибку при запуске небольшого количества хранимых процедур в нашем приложении. Фактическая ошибка, которую мы получаем, это sqlcode = -930, которая согласно документации db2: «Недостаточно памяти для обработки оператора».

Вопрос: как я могу увеличить объем памяти, доступной для этих процедур? кто-нибудь еще сталкивался с этой ошибкой, и если да, то нашли ли вы решение?

спасибо

1 Ответ

1 голос
/ 02 апреля 2009

Поскольку вы еще не ответили, какую платформу вы используете, для начала я попробую AIX.

Вам нужно взглянуть на db2diag.log, чтобы узнать конкретную причину, но обычно это происходит из-за того, что в AIX закончились сегменты разделяемой памяти.

AIX имеет в общей сложности 16 сегментов совместно используемой памяти, из которых 7 доступны для базы данных. Сумма, фактически используемая вашей базой данных, может быть рассчитана по формуле, слишком сложной для меня, чтобы ее можно было запомнить, не просматривая ее в руководстве по устранению неполадок.

Но существует реальная возможность того, что база данных будет использовать 6 сегментов, оставляя только один. Я видел ситуации, когда это происходит, когда запрос ввода-вывода с отображением в памяти происходит одновременно с хранимой процедурой.

Оба этих сегмента требуют разделяемой памяти, и, если ввод-вывод начинается первым, хранимая процедура не будет работать, как вы видите.

Чтобы исправить это, нужно освободить сегменты, выполнив одно или несколько из следующих действий:

  • отключение ввода-вывода с отображением в памяти.
  • уменьшает использование сегмента базой данных: эта формула понадобится вам, но я думаю, что она включает в себя пулы буферов, размеры кучи и списки блокировок.
  • выключите intra_parallel, если он не нужен.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...