• SQL Server, Timeout expired.all pooled connections were in use and max pool size was reached


    错误信息:

    Server Error in '/xxxxx' Application.

    Timeout expired.  The timeout period elapsed prior to obtaining a connection from the pool.  This may have occurred because all pooled connections were in use and max pool size was reached.

     解决思路:

     (1)在SQL Server管理器窗口执行存储过程 sp_who 查看所有活动连接。

     (2)使用Kill终止进程,Kill的用法如下。

    -- 运行以下脚本可以终止所有连接:

    -- Author: Eman Lee

    -- Date: 11/11/2008

    USE [master]

    GO
    DECLARE @spid sysname, @msg varchar(100), @cmd varchar(1000)
    DECLARE table_cur CURSOR FOR
    SELECT spid FROM master.dbo.sysprocesses WHERE db_name(dbid)='Database Name'
    OPEN table_cur
    FETCH NEXT FROM table_cur INTO @spid
    WHILE @@fetch_status = 0
    BEGIN
    IF @@fetch_status = -2
    CONTINUE
    SELECT @msg ='KILL ' + @spid
    PRINT @msg
    SELECT @cmd = 'KILL ' + @spid
    EXEC (@cmd)
    PRINT ' '
    FETCH NEXT FROM table_cur INTO @spid
    END
    DEALLOCATE table_cur
    GO

    KILL (Transact-SQL)

    终止基于会话 ID(SQL Server 2000 或更早版本中的 SPID)或工作单元 (UOW) 的用户进程。如果指定的会话 ID 或 UOW 有许多工作要撤消,则 KILL 语句可能需要一些时间来完成,特别是在涉及回滚长事务时。

    在 Microsoft SQL Server 2000 和更高版本中,KILL 可用于终止正常连接,这将在内部终止与给定的会话 ID 关联的事务。如果正在使用 Microsoft 分布式事务处理协调器 (MS DTC),该语句还可用于终止所有孤立和有疑问的分布式事务。

    主题链接图标 Transact-SQL 语法约定

     语法
     

    KILL { session ID | UOW } [ WITH STATUSONLY ] 
     参数
    session ID

    要终止的进程的会话 ID。session ID 是在建立连接时为每个用户连接分配的唯一整数 (int)。在连接期间,会话 ID 值与该连接捆绑在一起。连接结束时,则释放该整数值,并且可以将它重新分配给新的连接。

    使用 KILL session ID 可终止与指定的会话 ID 关联的常规非分布式事务和分布式事务。

    UOW

    标识分布式事务的工作单元 ID (UOW)。UOW 是可从 sys.dm_tran_locks 动态管理视图的 request_owner_guid 列中获取的 GUID。也可从错误日志中或通过 MS DTC 监视器获取 UOW。有关监视分布式事务的详细信息,请参阅 MS DTC 文档。

    使用 KILL UOW 可终止孤立的分布式事务。这些事务不与任何真实的会话 ID 相关联,与虚拟的会话 ID = '-2' 相关联。可使标识孤立事务变得更为简单,其方法是查询 sys.dm_tran_lockssys.dm_exec_sessionssys.dm_exec_requests 动态管理视图中的会话 ID 列。

    WITH STATUSONLY

    生成由于更早的 KILL 语句而正在回滚的指定 session IDUOW 的进度报告。KILL WITH STATUSONLY 不终止或回滚 session IDUOW,该命令只显示当前的回滚进度。

     备注

    KILL 命令通常用于终止这样一些进程:它们以锁阻塞了其他重要进程,或者正在执行一个查询,而该查询正在使用必需的系统资源。系统进程和运行扩展存储过程的进程不能被终止。

    应当小心使用 KILL,特别是正在运行重要进程时。用户不能取消自己的进程。其他不能取消的进程包括:

    • AWAITING COMMAND
    • CHECKPOINT SLEEP
    • LAZY WRITER
    • LOCK MONITOR
    • SIGNAL HANDLER

    使用 @@SPID 可显示当前会话的会话 ID 值。

    若要获取活动会话 ID 值的报告,可以查询 sys.dm_tran_lockssys.dm_exec_sessionssys.dm_exec_requests 动态管理视图中的 session_id 列。还可以查看 sp_who 系统存储过程返回的 SPID 列。如果特定 SPID 的回滚正在进行,则该 SPID 的 sp_who 结果集中的 cmd 列将指示 KILLED/ROLLBACK。

    当特定的连接在数据库资源上有锁并阻塞其他连接的进程时,sys.dm_exec_requestsblocking_session_id 列或 sp_who 返回的 blk 列中将显示该阻塞连接的会话 ID。

    KILL 命令可用于解决有疑问的分布式事务。这些事务是未解决的分布式事务,它们是由于无计划地重新启动数据库服务器或 MS DTC 协调器而产生的。有关有疑问事务的详细信息,请参阅使用标记的事务(完整恢复模式)中的“两阶段提交”部分。

    使用 WITH STATUSONLY

    仅当前面的 KILL session ID|UOW 语句导致会话 ID 或 UOW 当前正在回滚时,KILL WITH STATUSONLY 才会生成报告。进度报告指出已完成的回滚量(百分比)和估计的剩余时间(秒),格式如下:

    Spid|UOW <xxx>: Transaction rollback in progress. Estimated rollback completion: <yy>% Estimated time left: <zz> seconds

    如果执行 KILL session ID|UOW WITH STATUSONLY 语句时会话 ID 或 UOW 的回滚已完成,或者没有会话 ID 或 UOW 正在回滚,KILL session ID|UOW WITH STATUSONLY 将返回以下错误:

    “Msg 6120,级别 16,状态 1,第 1 行”

    “无法获取状态报告。进程 ID <会话 ID> 的回滚操作不在进行中。”

    通过重复不带 WITH STATUSONLY 选项的同一 KILL session ID|UOW 语句,可以获得相同的状态报告;但不推荐这样做。如果在运行新的 KILL 语句之前回滚已完成并且已将会话 ID 重新分配给新任务,那么重复 KILL session ID 语句可能会终止新进程。指定 WITH STATUSONLY 将防止这种情况发生。

     权限

    要求具有 sysadminprocessadmin 固定服务器角色的成员身份。

     示例

    A. 使用 KILL 终止会话

    以下示例显示如何终止会话 ID 53

    KILL 53;GO

    B. 使用 KILL 会话 ID WITH STATUSONLY 获取进度报告

    以下示例为特定的会话 ID 生成回滚进程的状态。

    KILL 54;       

    KILL 54 WITH STATUSONLY;

    GO --This is the progress report.

    spid 54: Transaction rollback in progress. Estimated rollback completion: 80% Estimated time left: 10 seconds.

    C. 使用 KILL 终止孤立的分布式事务

    以下示例显示如何终止 UOWD5499C66-E398-45CA-BF7E-DC9C194B48CF 的孤立分布式事务(会话 ID = -2)。

    KILL 'D5499C66-E398-45CA-BF7E-DC9C194B48CF';
  • 相关阅读:
    【Spark学习笔记】第一章 Windows10(64位)主机上搭建基于IntelliJ IDEA的spark+scala开发环境
    【Oracle数据库相关】Oracle数据库在CentOS6.5环境下的安装以及相关操作
    【SNMP】Linux系统下安装net-snmp
    【SNMP】SNMP概述
    【转】 memwatch使用说明书
    [转]GCC参数详解
    【Linux C中文函数手册】 字符串转换函数
    【Linux C中文函数手册】文件内容控制函数
    【Linux C中文函数手册】之 目录操作函数
    [心智历练]---高效、静心、持续
  • 原文地址:https://www.cnblogs.com/emanlee/p/1331170.html
Copyright © 2020-2023  润新知