PYODBC连接将进入休眠模式

人气:648 发布:2022-10-16 标签: python-3.x azure-databricks azure-sql-database pyodbc azure-sql-server

问题描述

我正在尝试使用PYODBC连接从数据块执行存储过程,在所有事务发生后,状态将进入休眠模式。在这一点上请帮助我, 我尝试了自动提交和连接超时等所有可能性,但都不起作用。

import pyodbc
import datetime
username = "usrname"
password = "password"
server = "server"
database_name = "dbname"
port = "1433"
conn=pyodbc.connect('Driver={ODBC Driver 17 for SQL server};SERVER=tcp:'+server+','+port+';DATABASE='+ database_name +';UID='+ username +';PWD='+ password)
#conn.timeout = 600
cursor=conn.cursor()
# conn.autocommit = True

sql = "set nocount on; exec proc_name"
print("Connection Started at "+str(datetime.datetime.now()))
cursor.execute(sql)
print("Connection closed at "+str(datetime.datetime.now()))
conn.commit()
cursor.close()
conn.close()

print(datetime.datetime.now())

笔记本仍在运行中,请查看下图

一旦所有事务完成(数据插入、删除、更新)状态更新为休眠模式,SPID初始状态的数据库状态即可运行

由于此睡眠状态数据砖笔记本未完成,它将继续运行。请帮我解决这个问题。提前谢谢。

推荐答案

由具有未提交事务的休眠spid引起的阻塞:

此类阻塞通常可以由正在休眠或等待命令,但其事务嵌套级别(@@TRANCOUNT, open_transaction_count from sys.dm_exec_requests)大于零的SPID标识。

如果应用程序遇到查询超时,或者在没有发出所需数量的ROLLBACK和/或COMMIT语句的情况下发出取消,就会发生这种情况。当SPID收到查询超时或取消时,它将终止当前查询和批处理,但不会自动回滚或提交事务。

应用程序应对此负责,因为SQL Server不能假定由于单个查询被取消而必须回滚整个事务。查询超时或取消将在扩展事件会话中显示为SPID的注意信号事件。

参考-https://docs.microsoft.com/en-us/troubleshoot/sql/performance/understand-resolve-blocking#detailed-blocking-scenarios

169