Pymssql: ошибка «DBPROCESS мертв или не включен» каждый раз, когда я запускаю шестой запрос, независимо от того, сколькоPython

Программы на Python
Anonymous
Pymssql: ошибка «DBPROCESS мертв или не включен» каждый раз, когда я запускаю шестой запрос, независимо от того, сколько

Сообщение Anonymous »

Проблема
У меня есть задание AWS Glue, в котором используется стандартный набор аналитических библиотек с Python Shell. Особо следует отметить, что для подключения к нашему Microsoft SQL Server он использует SQLAlchemy. Для этого мы также прилагаем все усилия, чтобы импортировать pymssql 2.3.1. В этом задании Glue мы последовательно запускаем несколько копий одной и той же хранимой процедуры шесть раз. Кажется, случайным образом шестая (и, следовательно, последняя) хранимая процедура завершится с точки зрения SQL Server, но завершится с ошибкой внутри вызова pandas.read_sql. Сообщение об ошибке, которое, насколько я могу судить, исходит от FreeTDS:

Operational Error("pymssql.Exceptions.OperationalError) (20047, b'DB) Сообщение об ошибке -lib 20047, уровень серьезности 9:
DBPROCESS не работает или не включен
')

Его тип — sqlalchemy.exc .OperationalError.
Данные в нашем поле SQL меняются только один раз в день, но вот что странно: Когда я получаю эту ошибку, я получаю ее для оставшуюся часть дня. Не имеет значения, сколько раз я запускаю задание Glue.
Как это отладить?
Что я пробовал или исключил
Извините за длину, но я пробовал многое:
  • Я уверен, что с окном SQL проблем нет. С его точки зрения, окончательный запрос выполняется до завершения. Ни расширенные события, sp_WhoIsActive, ни журнал ошибок SQL Server не показывают ничего интересного. Они знают, когда Python закрывает. соединение, но это нормально.
  • Изменение версии pymssql, как предложено здесь, ничего не дало. Мы попробовали версии 2.3.0 и 2.3.1.
  • Проблем с разрешениями AWS нет. Это прекрасно работает в большинстве дней в году.
  • Добавлениеstream_results к моим параметрам подключения не имеет никакого эффекта, независимо от того, True или False. В документации неясно, поддерживает ли его вообще Microsoft SQL Server.
  • Я добавил echo="debug", echo_pool="debug" в параметры своего движка. Дополнительная регистрация, которую они добавляют, не имеет никакой ценности. Я даже не буду этим делиться здесь. Все работает отлично, пока мы не получим ту же ошибку, о которой я говорил выше.
  • Код: Выделить всё

    pool_pre_ping = True
    , безусловно, является наиболее рекомендуемым решением. Это не решает проблему. Я вижу предварительный пинг в дополнительных журналах, обсуждавшихся выше, но задание по-прежнему завершается с ошибкой. pymssql 2.3.0 и 2.3.1 здесь ведут себя одинаково.
  • Отключение пула соединений (

    Код: Выделить всё

    poolclass=NullPool
    ) не устранил проблему, как и Pool_reset_on_return.
  • Учитывая вышеизложенное, я считаю, что проблема объединения в пул исключена. Но мне действительно интересно, что количество пулов по умолчанию равно 5, а запрос 6 не работает.
  • Я очень тщательно искал в Google эту ошибку. Я прочитал каждую страницу результатов Google на предмет «Сообщение об ошибке 20047 db-lib, dbprocess мертв». Сюда входят элементы, выходящие за рамки Python (кажется, Ruby разделяет эту проблему). Ничего не помогло.
  • Это не проблема, если данных слишком много. У нас есть еще одно задание Glue, которое собирает расширенный набор этих данных, и сегодня оно работало нормально. Во всех аспектах, за исключением изменения имени хранимой процедуры, код другого задания полностью идентичен.
  • Я не вижу ничего, что указывало бы на то, что это проблема с тайм-аутом.
  • Искра — не вариант. Это просто не так. Я бы хотел попробовать pyobdc, но мне так и не удалось заставить его работать с Windows EC2, которую мы разрабатываем.
Добавление еще большего количества вызовов к хранимой процедуре решает проблему (например, я могу охватить весь 2024 год либо за один прогон, либо выполнив одну половину 2024 года, а затем другую половину), но я не хочу этого делать из-за производительности затраты. Это также похоже на обман, а не на поиск основной причины.


Подробнее здесь: https://stackoverflow.com/questions/790 ... sixth-quer

Вернуться в «Python»