SQLSERVER中的sp_reset_connection存儲過程的作用
經常有人在論壇提問為什麽在使用SQL Trace的時候會看到大量的sp_reset_connection存儲過程的執行
究竟sp_reset_connection存儲過程有什么用?
網上的資料很少
下面說一下這個存儲過程是干嘛的
在介紹之前先說一下連接池和事務和阻塞,因為這個存儲過程跟連接池、事務和阻塞有關
一般SQL應用都會使用連接池來得到良好的性能。如果有一個連接忘記把事務關閉就退出連接那么這個連接會被交還給連接池
但是這時候,事務不會被清理。客戶端驅動程序會在這個連接下一次被重用的時候(又有新的用戶要建立連接)
發一句sp_reset_connection命令(這是一個存儲過程)來清理當前連接上次遺留下來的所有對象
包括:回滾未提交的事務。
如果連接交還給連接池以后很久都沒有被重用,那他的事務就會持續很長時間,引起阻塞。
比如有些JAVA程序使用的JDBC驅動程序提供連接池功能,但是不提供連接重用時的事務清理功能。
這樣的連接池對應用開發質量要求很高,比較容易發生阻塞
現在知道sp_reset_connection存儲過程的作用了吧?