Медленная скорость соединения cx_ Oracle - PullRequest
2 голосов
/ 25 февраля 2020

я использую cx_ oracle с python 3.7 для подключения к oracle базе данных и выполнения хранимых процедур, хранящихся в базе oracle.

, сейчас я подключаюсь к базе данных следующим образом

dbconstr = "username/password@databaseip/sid"
db_connection = cx_Oracle.connect(dbconstr)
cursor = db_connection.cursor()

#calling sp here

cursor.close()
db_connection.close()

, но в этом коде время соединения для cx_ Oracle .connect (dbconstr) составляет около 250 мс , и весь код будет работать примерно за 500 мс я хочу сократить время соединения на 250 мс .

Я использую flask rest-api в python, и для этого используется код, 250 мс для соединения слишком долго, когда полное время отклика составляет 500 мс.

Я также пытался поддерживать соединение a на весь срок службы приложения, объявив глобальную переменную для объекта подключения и создав и закрыв только курсоры, как показано ниже, что даст результат в 250 мс

dbconstr = "username/password@databaseip/sid"
db_connection = cx_Oracle.connect(dbconstr)

def api_response():
    cursor = db_connection.cursor()
    #calling sp here
    cursor.close()
    return result

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

, поэтому мне нужна помощь в создании стабильного кода с хорошим временем отклика.

1 Ответ

0 голосов
/ 25 февраля 2020

Создание соединения требует много работы на сервере базы данных: запуск процесса, выделение памяти, аутентификация и т. Д. c.

Ваше решение - или использование пула соединений - способы сокращения времени соединения в приложениях Oracle. Пул с приобретением и выпуском около точки использования в приложении имеет преимущества для планового и внепланового обслуживания БД. Это связано с внутренней реализацией пула.

Какая нагрузка на ваш сервис? Вы, вероятно, хотите установить пул и соединения aquire / release, см. Как использовать cx_ Oracle пул сессий с Flask изящно? и неотвечающие запросы - понимание узкого места (Flask + Oracle + Gunicorn) и другие. Совет от профессионала: сделайте пул небольшим и сделайте размер минимальный и максимальный одинаковым.

Есть ли проблема с открытыми соединениями? Что это влияет? Существуют некоторые решения, такие как Shared Servers или DRCP, но обычно их не нужно использовать, если серверу баз данных не хватает памяти.

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