开发者

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

开发者 https://www.devze.com 2023-04-13 09:22 出处:网络 作者: 笨蛋girl
目录SQL数据库连接超时时间已到问题解决方法数据库访问超时时间配置总结1.背景2.配置说明3.方案总结SQL数据库连接超时时间已到
目录
  • SQL数据库连接超时时间已到
    • 问题
    • 解决方法
  • 数据库访问超时时间配置总结
    • 1.背景
    • 2.配置说明
    • 3.方案
  • 总结

    SQL数据库连接超时时间已到

    问题

    1:System.InvalidOperationException: 超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。

    2:在向服务器发送请求时发生传输级错误。 (provider: TCP Provider, error: 0 - 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作。)

    3:已成功与服务器建立连接,但是在登录前的握手期间发生错误。 (provider: SSL Provider, error: 0 - 等待的操作过时。) ---> System.ComponentModel.Win32Exception (0x800040javascript05): 等待的操作过时。

    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的连接数,这个可以作为监测的一种手段。

    SpythonELECT [program_name] ,[spid],* FROM [sys].[sysprocesses] WHERE [spid]>50 and [program_name]='.Net SqlClient Data Providerpython' and dbid= db_id('')

    数据库访问超时时间配置总结

    1.背景

    访问数据库超时间太长,访问数据量大或者扫描的数据量太大,导致数据库长时间无响应。链接被占用无法释放,会导致线程池被占满。

    因此,为了能够及时释放占用链接,其他业务对数据库访问不受影响,所以要合理设置数据库访问超时时间。

    2.配置说明

    2.1connectionTimeout配置大小

    Jdbc的connectTimeout配置是指等待与数据库建立socket链接的超时时间。如果未设置,默认为0,代表永不超时。android

    代码中checkoutTimeout的配置设置为1000s,表示连接池中连接获取链接超时时间,设置过大会导致接口响应变慢。

    参考收单侧的经验值,connectTimeout设置为1000ms。

    2.2socketTimeout配置大小

    socketTimeout的配置是指客户端与数据库建立socket后,读写socket时的等待的超时时间。如果未设置,默认为0,代表永不超时。zebra默认的socketTimeout设置为60s。

    根据对服务数据库访问统计发现最长为1-2s,socketTimeout可设置为3s

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

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

    3.方案

    开发者_NoSQL

    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配置

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

    3.3最终方案

    优点

    不足

    结果

    Db-client-SDK

    1. 服务代码中,可自由配置

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

    1. 需要发布服务

    RDS-Zebra

    1. 不需要发布服务

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

    总结

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

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消