SQL数据库连接超时时间已到的问题
作者:笨蛋girl 发布时间:2024-01-20 15:05:53
SQL数据库连接超时时间已到
问题
1:System.InvalidOperationException: 超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。
2:在向服务器发送请求时发生传输级错误。 (provider: TCP Provider, error: 0 - 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作。)
3:已成功与服务器建立连接,但是在登录前的握手期间发生错误。 (provider: SSL Provider, error: 0 - 等待的操作过时。) ---> System.ComponentModel.Win32Exception (0x80004005): 等待的操作过时。
4:在从服务器接收结果时发生传输级错误。 (provider: TCP Provider, error: 0 - 指定的网络名不再可用。) ---> System.ComponentModel.Win32Exception (0x80004005): 指定的网络名不再可用。
5:连接超时时间已到。在登录后阶段超过了此超时时间。连接可能在等待服务器完成登录过程并响应时超时;或者在尝试创建多个活动连接时超时。 尝试连接到此服务器时花费的持续时间是 - [Pre-Login] initialization=2;handshake=5;[Login] initialization=0;authentication=0;[Post-Login] complete=14025; ---> System.ComponentModel.Win32Exception (0x80004005): 等待的操作过时。
解决方法
设置最大超时时间
server=192.168.0.1;User ID=sa;Password=123;database=;Min Pool Size=0;Max Pool Size=30000;Pooling=true;
一般这种出现于高并发请求的情况,以下代码可以查看SQL的连接数,这个可以作为监测的一种手段。
SELECT [program_name] ,[spid],* FROM [sys].[sysprocesses] WHERE [spid]>50 ?and [program_name]='.Net SqlClient Data Provider' and dbid= db_id('')?
数据库访问超时时间配置总结
1.背景
访问数据库超时间太长,访问数据量大或者扫描的数据量太大,导致数据库长时间无响应。链接被占用无法释放,会导致线程池被占满。
因此,为了能够及时释放占用链接,其他业务对数据库访问不受影响,所以要合理设置数据库访问超时时间。
2.配置说明
2.1connectionTimeout配置大小
Jdbc的connectTimeout配置是指等待与数据库建立socket链接的超时时间。如果未设置,默认为0,代表永不超时。
代码中checkoutTimeout的配置设置为1000s,表示连接池中连接获取链接超时时间,设置过大会导致接口响应变慢。
参考收单侧的经验值,connectTimeout设置为1000ms。
2.2socketTimeout配置大小
socketTimeout的配置是指客户端与数据库建立socket后,读写socket时的等待的超时时间。如果未设置,默认为0,代表永不超时。zebra默认的socketTimeout设置为60s。
根据对服务数据库访问统计发现最长为1-2s,socketTimeout可设置为3s
3.方案
3.1数据库SDK配置修改
连接池连接超时等设定需要设置到extraJdbcUrlParams参数中如下:
<property name="extraJdbcUrlParams" value="connectTimeout=1000&socketTimeout=3000&useSSL=false"/>
jdbcdriver 5.1.36及以上版本需要在jdbcurl设置 "useSSL=false" 参数, 可以通过此方式设置
3.2 默认SDK配置修改
修改jdbcRef配置
3.3最终方案
优点 | 不足 | 结果 | |
---|---|---|---|
Db-client-SDK | 服务代码中,可自由配置 比配置jdbcRef优先级高,dba也推荐 | 需要发布服务 | |
RDS-Zebra | 不需要发布服务 | rd没有权限,需要dba给配置 |
来源:https://blog.csdn.net/u011791378/article/details/83413841


猜你喜欢
- 一段简单的pygame代码,只在pygame界面背景绘制了一个背景图片# -*- coding=utf-8 -*-import sysimp
- 随着移动端的用户越来越多,传统的web系统架构无法兼容很多移动终端的正常使用。在工作中也会发现,现在很多的客户都有在手机、平板等移动终端上使
- 一、模型参数的保存和加载 torch.save(module.state_dict(), path):使用module.state
- 正在看的ORACLE教程是:Oracle 数据表分区的策略。本文描述通过统计分析出医院信息系统需分区的表,对需分区的表选择分区键,即找出包括
- 在使用Django2.0 并配置了mysql作为数据库时,启动报错:报错1:找不到mysqlclientdjango.core.except
- 报错代码粉丝群一个小伙伴想pandas创建DataFrame对象,但是发生了报错(当时他心里瞬间凉了一大截,跑来找我求助,然后顺利帮助他解决
- 本文实例讲述了Python使用Pickle库实现读写序列操作。分享给大家供大家参考,具体如下:简介pickle模块实现了用于对Python对
- 一、简介Locust 是一个易于使用,分布式,用户负载测试工具。它用于负载测试 web 站点(或其他系统),并计算出一个系统可以处理多少并发
- 如果我们在标识列中插入值,例如: insert member(id,username) values(10,'a
- 声明本文章为个人拙见,仅仅提供参考,不一定正确,各位大佬可以发表自己的意见。题目描述考虑到在虚拟机部署中资源提供商通常希望自己的收益最大化,
- 1、git merge冲突了,根据提示找到冲突的文件,解决冲突如果文件有冲突,那么会有类似的标记2、修改完之后,执行git add 冲突文件
- 词云图from pyecharts.charts import WordClouddef word1(): words= [ &
- 由于javascript是一种无类型语言,所以一个数组的元素可以具有任意的数据类型,同一个数组的不同元素可以具有不同的类型,数组的元素设置可
- 了解blockchain的概念很简单(区块链,交易链块):它是分布式的(即不是放置在同一台机器上,不同的网络设备上的)数据库支持主办记录日益
- 问题你需要将数字格式化后输出,并控制数字的位数、对齐、千位分隔符和其他的细节。解决方案格式化输出单个数字的时候,可以使用内置的 format
- Selenium的介绍、配置和调用Selenium(浏览器自动化测试框架) 是一个用于Web应用程序测试的工具。Selenium测
- python实现两个文本合并employee文件中记录了工号和姓名cat employee.txt:100 Jason Smith200 J
- 一个封装好的链接Oracle数据库的工具类,可以方便的获取Connection对象关闭Statement、ResultSet、Statmen
- 今天,跟大家聊聊gin框架中是如何实现分片输出的。主要分以下4点:分片输出的效果图gin实现分片传输代码http分片传输的基础:transf
- 1.数组和切片有什么区别Go语言中数组是固定长度的,不能动态扩容,在编译期就会确定大小,声明方式如下:var buffer [255]int