Исключение при одновременном выполнении нескольких запросов в DB2 - PullRequest
2 голосов
/ 16 января 2009

Мы тестируем конкретный дизайн приложения, где нам нужно показывать прогрессивные значения после одновременного запуска большого количества запросов.

Когда мы запускаем один запрос, мы можем успешно получать результаты асинхронно.

Но когда мы запускаем 3-4 запроса одновременно, через значительное время и после получения нескольких записей для каждого запроса мы получаем исключение, которое заявляет

«com.ibm.db2.jcc.c.SqlException: ошибка SQL DB2: SQLCODE: -1218, SQLSTATE: 57011, SQLERRMC: 4099»

Из-за этого все запущенные запросы не выполняются полностью.

Нет проблем, если эти запросы выполняются один за другим. (query2 начинает выполняться после завершения query1 и т. д.)

После поиска этого SQLCODE в Центре управления мы выяснили подробности, которые


SQL1218N В настоящее время нет доступных страниц в пуле буферов

  "<buffpool-num>".

Объяснение:

Все страницы в пуле буферов в настоящее время используются. Запрос использовать другую страницу не удалось.

Оператор может быть успешным при повторном выполнении. Если эта ошибка происходит часто некоторые или все из следующих действий могут помешать дальнейшему сбои:

  1. увеличить размер пула буферов

  2. уменьшить максимальное количество агентов базы данных и / или соединений

  3. уменьшение максимальной степени параллелизма

  4. уменьшить размер предварительной выборки для табличных пространств, которые находятся в этом

    Буферный

  5. переместить некоторые табличные пространства в другие буферные пулы.

    sqlcode: -1218

    sqlstate: 57011


В нашем экземпляре БД у нас уже был буферный пул размером 32 КБ и даже после создания другого буферного пула из 32K, проблема сохраняется.

Может ли кто-нибудь помочь нам в решении проблемы.

Спасибо и всего наилучшего,

Равиндра Джайн

Ответы [ 3 ]

1 голос
/ 25 мая 2009

Размер страницы пула буферов должен соответствовать размеру страницы табличных пространств, с которыми он связан. Все ли ваши табличные пространства используют страницы по 32 КБ? Вы должны проверить, есть ли другой буферный пул, исчерпывающий страницы. 10000 страниц должно быть более чем достаточно, чтобы избежать ошибки, которую вы видите.

0 голосов
/ 16 января 2009

Мы фиксируем после каждой записи вставляется / обновляется. Таким образом, повтор журнала не является проблемой. (буферный пул никогда не будет переполнен).

32K - размер страницы пула буферов, а буферный пул содержит 10000 страниц. Итак, подходят ли эти конфигурации для пула буферов?

0 голосов
/ 16 января 2009

Наиболее вероятной причиной является то, что ваши транзакции не выдают "коммиты", поэтому в буферных пулах накапливаются незафиксированные данные.

Кроме того, 32 КБ кажется очень маленьким для текущего оборудования (поскольку DB2 может обрабатывать CLOB и BLOB размером в несколько мегабайт), 32 МБ или больше будет более подходящим для размера пула буферов.

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