#python #oracle #cx-oracle #aiohttp
#python #Oracle #cx-oracle #aiohttp
Вопрос:
У меня проблема, я использую пакет cx_oracle aiohttp threadpollexecutor для вызова функции в базе данных, которая проверяет параметры и вставляет данные в таблицы Oracle. Я заметил странную особенность: самый первый запрос после полуночи выполняется более 17 секунд, но все последующие запросы выполняются в течение 20 миллисекунд. Пул соединений не нарушается и используется в качестве глобальной переменной через функцию. В чем может быть проблема и почему только первый запрос ведет себя так??
Комментарии:
1. По приблизительному предположению, брандмауэр отключает соединения, и пул соединений должен их воссоздавать. Не могу сказать, может, не зная дополнительной информации.
Ответ №1:
Кристофер Джонс дал вам предложение. Самый простой способ убедиться в этом — установить для переменной среды DPI_DEBUG_LEVEL
значение 4 перед запуском вашего приложения и перенаправлением stderr в файл журнала. Затем вы можете увидеть, какая функция ODPI-C была запущена сразу после полуночи и сколько времени это заняло. Если предложение Криса верно, вероятный вызов будет dpiConn_create()
.
Комментарии:
1. Спасибо, Кристофер, Энтони! Я попробую это сегодня.
2. И небольшой вопрос — есть ли способ справиться с этим? Каков наилучший способ воссоздать пул соединений, чтобы не замедлять работу приложения?
3. @ChristopherJones dpiStmt_execute() так долго (первый вызов функции со вставками после ночи): 8 секунд, это не dpiConn_create()