问题描述
我正在尝试使用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