SQL数据库连接超时时间已到的问题

 更新时间:2023年04月12日 10:10:35   作者:笨蛋girl  
这篇文章主要介绍了SQL数据库连接超时时间已到的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

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&amp;socketTimeout=3000&amp;useSSL=false"/>

jdbcdriver 5.1.36及以上版本需要在jdbcurl设置 "useSSL=false" 参数, 可以通过此方式设置

3.2 默认SDK配置修改

修改jdbcRef配置

3.3最终方案

优点

不足

结果

Db-client-SDK

服务代码中,可自由配置

比配置jdbcRef优先级高,dba也推荐

需要发布服务

RDS-Zebra

不需要发布服务

rd没有权限,需要dba给配置

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SQL Server中的事务介绍

    SQL Server中的事务介绍

    这篇文章介绍了SQL Server中的事务用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • 安装sql server2008后再安装sql 2005找不到本地服务器的解决方法

    安装sql server2008后再安装sql 2005找不到本地服务器的解决方法

    这篇文章主要介绍了安装sql server2008后再安装sql 2005找不到本地服务器的解决方法,需要的朋友可以参考下
    2015-01-01
  • PL/SQL DEVELOPER 使用的一些技巧

    PL/SQL DEVELOPER 使用的一些技巧

    了解一点编程的常识的人都知道,编码风格很重要。在阅读代码方面,保持一致的编码风格,阅读起来比较容易;大家都应该养成一种自己的编码习惯,并保持下去。
    2013-04-04
  • SQL Substring提取部分字符串

    SQL Substring提取部分字符串

    SQL 中的 substring 函数是用来抓出一个栏位资料中的其中一部分。这个函数的名称在不同的资料库中不完全一样
    2009-11-11
  • 教你如何看懂SQL Server查询计划

    教你如何看懂SQL Server查询计划

    本文只谈优化查询时如何看懂SQL Server查询计划。毕竟我对SQL Server的认识有限,如有错误,也恳请您在发现后及时批评指正。 当然如果能对大家有所帮助,也不枉我写这么多文字了
    2014-08-08
  • SQLite数据库管理相关命令的使用介绍

    SQLite数据库管理相关命令的使用介绍

    本篇文章小编为大家介绍,SQLite数据库管理相关命令的使用说明。需要的朋友参考下
    2013-04-04
  • SQL SERVER性能优化综述(很好的总结,不要错过哦)

    SQL SERVER性能优化综述(很好的总结,不要错过哦)

    一个系统的性能的提高,不单单是试运行或者维护阶段的性能调优的任务,也不单单是开发阶段的事情,而是在整个软件生命周期都需要注意,进行有效工作才能达到的。所以我希望按照软件生命周期的不同阶段来总结数据库性能优化相关的注意事项。
    2008-09-09
  • SQL Server数据库自动备份的实现步骤

    SQL Server数据库自动备份的实现步骤

    要编写一个自动备份 SQL Server 数据库的脚本,可以使用 SQL Server Management Studio (SSMS) 或者 Transact-SQL (T-SQL) 脚本,本文给大家介绍了一个一个简单的 T-SQL 脚本示例,需要的朋友可以参考下
    2023-11-11
  • SQL多列合并成一列的实现示例

    SQL多列合并成一列的实现示例

    在SQL中,拼接多个列数据成为一列数据是很常见的问题,本文主要介绍了SQL多列合并成一列的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • 利用ROW_NUMBER() OVER函数给SQL数据库中每一条记录分配行号的方法

    利用ROW_NUMBER() OVER函数给SQL数据库中每一条记录分配行号的方法

    这篇文章主要介绍了利用ROW_NUMBER() OVER函数给SQL数据库中每一条记录分配行号的方法,需要的朋友可以参考下
    2015-10-10

最新评论