Поскольку вы еще не ответили, какую платформу вы используете, для начала я попробую AIX.
Вам нужно взглянуть на db2diag.log, чтобы узнать конкретную причину, но обычно это происходит из-за того, что в AIX закончились сегменты разделяемой памяти.
AIX имеет в общей сложности 16 сегментов совместно используемой памяти, из которых 7 доступны для базы данных. Сумма, фактически используемая вашей базой данных, может быть рассчитана по формуле, слишком сложной для меня, чтобы ее можно было запомнить, не просматривая ее в руководстве по устранению неполадок.
Но существует реальная возможность того, что база данных будет использовать 6 сегментов, оставляя только один. Я видел ситуации, когда это происходит, когда запрос ввода-вывода с отображением в памяти происходит одновременно с хранимой процедурой.
Оба этих сегмента требуют разделяемой памяти, и, если ввод-вывод начинается первым, хранимая процедура не будет работать, как вы видите.
Чтобы исправить это, нужно освободить сегменты, выполнив одно или несколько из следующих действий:
- отключение ввода-вывода с отображением в памяти.
- уменьшает использование сегмента базой данных: эта формула понадобится вам, но я думаю, что она включает в себя пулы буферов, размеры кучи и списки блокировок.
- выключите intra_parallel, если он не нужен.