分类: 数据库开发技术
2008-09-11 19:46:57
客户端可能会突然切断与服务器的连接,因而客户端进程无法告知网络正确关闭连接。这可能由于许多原因而发生,包括客户端的电源故障。Microsoft® SQL Server™ 2000 并不事先探测客户端连接的状态。而是依赖 Microsoft Windows NT® 在某连接需要终止或关闭时通知它。Windows NT 在 TCP/IP 的 KeepAliveTime 或 NetBios 的 SessionKeepAlive 持续时间内,监视连接并持续向 SQL Server 报告连接为活动的,该操作将影响命名管道客户端。SQL Server 继续令客户端拥有的锁保持活动,直到取消这些锁,或 Windows NT 终止或关闭该连接。
当客户端在终止时无法释放自己控制的网络连接时发生孤立会话。
当客户端干净地终止时,Windows NT 关闭连接并通知 SQL Server。如果 SQL Server 正在处理客户端命令,它将在结束该会话时检测已关闭的连接。崩溃的或终止自己的进程(例如从任务管理器)的客户端应用程序立即由 Windows NT 清除,很少会导致孤立会话。
当客户端计算机意外断电或在未执行正常关机的情况下关闭时,是出现孤立会话的一个常见起因。孤立会话还会由于挂起的应用程序而发生,此应用程序从未完全终止,从而导致死连接。Windows NT 不知道该连接已死并继续向 SQL Server 报告其操作为活动的。而 SQL Server 则保持会话打开并继续等待来自客户端的命令。
打开的会话占据一个 SQL Server 网络连接。连接的最大数目由服务器客户端访问许可证 (CAL) 的数量限制,因此孤立会话可能阻止其它客户端的连接。
通常,更重要的问题是打开的会话使用服务器资源,并可能拥有打开的游标、临时表或锁。这些锁可能阻塞其它连接执行有用的工作,有时会导致锁的大量"堆积"。在严重的情况下,可能出现 SQL Server 停止工作的现象。
(出自:)