Стек анализатора заполняется при запросе базы данных Informix с использованием соединения ODBC - PullRequest
2 голосов
/ 14 марта 2012

Я установил соединение ODBC с базой данных Informix.Выполняя нагрузочный тест для базы данных, он выдает ошибку «недостаточно места для стеков анализатора» после ~ 12K запросов на вставку.Поток управления:

  1. SQLConnect
  2. SQLAllocStmt
  3. SQLSetStmtAttr
  4. SQLBindParameter
  5. SQLPrepare
  6. SQLExecute
  7. SQLFreeStmt
  8. Повторите шаги с 2 по 7

Поэтому для каждого запроса назначается новый дескриптор оператора, в то время как все запросы выполняются по одному и тому же соединению.Точная формулировка ошибки:

37000:[Informix][Informix ODBC Driver]General error. Not enough space for parser stacks

Это известная ошибка?Я также не могу обнаружить утечку памяти.Увеличение размера стека может привести к той же самой проблеме после большего числа запросов на вставку.Любое предложение?

1 Ответ

1 голос
/ 15 марта 2012

Загружаете ли вы базу данных с различными ~ 12K различными операторами вставки?

Если нет, то вам не нужно делать все эти вызовы API.Вместо того чтобы повторять шаги 2–8, для того же оператора INSERT вы можете повторить шаги 4, 5 и 6. Таким образом, у вас будет один PreparedStatement для каждой таблицы.Не создавайте PreparedStatament для каждой строки, которую вы собираетесь вставить.Я думаю, что если вы измените свою загрузочную программу таким образом, ошибка может исчезнуть.

Также вы можете показать нам версию вашего ClientSDK и рассказать нам больше о вашей ОС и среде.

...