Код Python приводит к экспоненциальному увеличению журнала транзакций SQL-сервера

У меня есть сценарий python для выполнения хранимой процедуры для очистки таблиц в базе данных. Далее этот SP вызывает другой SP, у которого есть операторы удаления для каждой таблицы в базе данных. Что-то вроде ниже -

Вызовы Python - хранимая процедура Purge_DB

Вызовы Purge_DB - Хранимая процедура Purge_Table

Purge_Table имеет определение для удаления данных из каждой таблицы.

Когда я запускаю этот скрипт python, журналы транзакций увеличиваются экспоненциально, и при запуске этого скрипта 2-3 раза я получаю полную ошибку журнала транзакций. Обратите внимание, что удаление происходит в транзакции.

НАЧАТЬ ТРАНС

        EXEC (@DEL_SQL) 


    COMMIT TRAN

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

Есть ли другой способ, который Python использует для создания журнала транзакций? Почему размер журнала в Python намного больше, чем в сценарии VB?


person garima arora    schedule 05.04.2018    source источник


Ответы (1)


Сейчас это решено.

Python запускает транзакцию, когда вызывается метод execute, и эта транзакция остается открытой до тех пор, пока мы явно не вызовем метод commit (). Поскольку этот SP очистки был вызван для более чем 100 таблиц, журнал транзакций заполнялся до тех пор, пока транзакция не была закрыта в коде Python, и, следовательно, он заполнялся из-за этого задания.

Я установил для свойства autocommit pyodbc значение true, которое теперь будет автоматически фиксировать каждый оператор SQL, когда он выполняется как часть этого соединения. Пожалуйста, обратитесь к документации здесь -

https://github.com/mkleehammer/pyodbc/wiki/Database-Transaction-Management

person garima arora    schedule 09.04.2018