[转]SQLSERVER 18056 错误

摘要:
此错误可能是由以前的操作失败引起的。IIS将释放无法处理的会话。当数据库从IIS接收到查询要返回给IIS的数据的会话请求时,它会查找相应请求的SPID。发现请求的SPID已不存在,但数据库的TCP连接不会立即丢弃数据,因为SPID不存在。此时,网卡的流量将增加!

From:http://blog.csdn.net/yangzhawen/article/details/8209167

18056 
 

客户端无法重新使用 SPID 为 %d 的会话,该会话已被重置用于连接池。失败 ID 为 %d。

此错误可能是由于先前的操作失败引起的。

请查看错误日志,找出在显示此错误消息之前刚发生的失败操作。






2011-11-19 16:33:53.91 spid5495    The client was unable to reuse a session with SPID 5495, which had been 
reset for connection pooling. The failure ID is 1. This error may have been caused by an earlier operation
failing. Check the error logs for failed operations immediately before this error message.
2011-11-19 16:33:53.93 spid2991    错误: 18056,严重性: 20,状态: 1。




案例说明:


当SQLSERVER的errorlog文件中不停的报错10856的时候,CPU同时会很低,此时SQL客户端登陆
数据库查询操作正常;IIS连接数暴涨,网站无法操作数据库(如登录、基本查询)






分析前提:
该问题很常见,官方解释没有很明确的答案,都是说要么需要打补丁要么需要设置IIS的连接池.
这里分析前提是数据库已经打了最新的补丁、IIS连接数据库的字符串正常、用户名和密码正常.




分析过程:
如IIS的连接池设置1500M,IIS连接数据正常1500个,那么每个session分到的连接池大小平均1MB,
数据库网络数据包默认是4096;

如果这个时候有个请求需要返回20M数据,那么这个session从数据库返回的数据包大小就要超过session
获得的连接池大小,数据包是4096,比正常的请求(请求1M的回话)就需要多的数据包传递,这个session对应的
回话保持时间就需要比平均水平长些,正常情况下,这些独大的请求不会有太大问题.
如果同一时刻,IIS的请求数达到3000,每个SESSION分到的连接池大小平均值就会0.5MB,如果同样返回20MB数据,
那么SESSION的时间就会更长!
如果这个时候客户端请求返回100个30M数据,那么此时的请求,当数据库返回给IIS时,IIS会发现连接池没有足够的内存空间
分配这个SESSION,此时IIS的连接池大小不会随着客户端请求的增加而自动增加或IIS服务器没有更多的物理内存,此时IIS就会
因为没有足够的连接池空间分配来缓存对应的SESSION,但是后续的客户端回话还是不停的向IIS申请,这个时候问题就来啦!
IIS会释放掉(或IIS进程down掉或IIS自动重启)没法处理的SESSION,当数据库收到IIS端SESSION请求查询出数据准备返回给
IIS的SESSION时,去寻找对应请求的SPID,发现该请求的SPID已经不存在,但是数据库的TCP连接不会因为SPID的不存在立即抛弃这些
数据,此时网卡的流量会增加!同时数据库ERRORLOG里全是这种错误.

解决办法:
0.首先排除DB是否有死锁
1.最直接的办法就是增加IIS连接池大小
2.就是找出程序中大的会话请求,修改代码
3.限制IIS进程数上限,根据日常运行情况设置连接池大小(不推荐,迫不得已)
4.数据库端限制sql回话时常:SQL防火墙或数据库限制长连接(不推荐,迫不得已,没办法的办法)

免责声明:文章转载自《[转]SQLSERVER 18056 错误》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【HDOJ】4261 Estimation【转】 Windows控制台上的UTF8支持下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

node chat源码解读(三)程序即server

node chat源码解读(三) - CNode node chat源码解读(三) 再优雅的代码本身也只是表象。表象之后,nodejs最核心的地方在哪里呢?我认为,可以从以下几个方面来概括:程序即server 传统的web服务通常是把提供HTTP协议支持的前端server与背后承担业务逻辑的程序分开的。比如用PHP写成的wordpress只是程序,它的前段...

windows用navict for mongo 把mongo 数据库中的数据全部导入另一个数据库

mongodb 在导出数据的可以使用命令,也可以使用navicat 这种可视化软件,我就选择的使用navicat 转移数据。 具体的业务场景是,线上的数据,导入到测试环境一份,供前端调试。 使用navicat for mongo 要安装navict 还要,安装mongodb-database-tools-windows-x86_64-100.5.1.ms...

Oracle基础知识点——Oracle常用权限理解:SYSDBA、SYSOPER、Normal、dba、connect、resource

权限介绍 系统权限 含义:系统规定用户使用数据库的权限,系统权限是针对用户对数据库的操作而言(登录数据库;读取数据表、视图;删除数据库)。它只是概念上的role,只是一种登录认证时的身份标识而已。 SYSDBA 拥有全部特权,是系统最高权限,系统默认登陆用户是 SYS。 SYSOPER 主要用来启动、关闭数据库, 系统默认登陆用户是 PUBLIC...

nginx负载均衡基于ip_hash的session粘帖

nginx负载均衡基于ip_hash的session粘帖 nginx可以根据客户端IP进行负载均衡,在upstream里设置ip_hash,就可以针对同一个C类地址段中的客户端选择同一个后端服务器,除非那个后端服务器宕了才会换一个。 nginx的upstream目前支持的5种方式的分配 1、轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端...

Weblogic 连接池的建立程序应用

连接池的建立 public class mypooltest { public static void main(String[] args) { Statement stmt = null; Connection conn = null; ResultSet res = null; try { Hashtable env = new Hashtable(...

模式窗口window.open造成Session丢失的解决方法

从 HTML 模式或无模式对话框可能没有打开同一进程中 InternetExplorer 窗口中打开,因此模式窗口中调用 window.open()方法打开具体页面,可能造成session 丢失.例如:主窗体a.aspx,点击按钮时采用window.showModalDialog,打开弹出窗体b.aspx,b.aspx为模式窗体,然后在b.aspx窗体中再用...