mysq超时 invalid connection 无效链接总结

tech2022-09-28  69

交互式连接 就是mysql 客户端 和服务器的连接时常 非交互式。 可以理解为就是 代码程序连接

空闲连接 最大时常

wait_timeout

默认 8小时

查看

show variables like "wait_timeout%";

交互式最大连接时常

interactive_timeout针对交互式连接,wait_timeout针对非交互式连接。所谓的交互式连接,即在mysql_real_connect()函数中使用了CLIENT_INTERACTIVE选项。 说得直白一点,通过mysql客户端连接数据库是交互式连接,通过jdbc连接数据库是非交互式连接。 interactive_timeout:交互式连接超时时间(mysql工具、mysqldump等)

查看

show variables like "interactive_timeout%";

数据读取超时时间

net_read_timeout :数据读取超时时间。在终止读之前,从一个连接获得数据而等待的时间秒数;当服务正在从客户端读取数据时,net_read_timeout控制何时超时。即客户端执行数据读取,等待多少秒仍未执行成功时自动断开连接。

数据可写超时时间

net_write_timeout:数据库写超时时间。和net_read_timeout意义类似,在终止写之前,等待多少秒把block写到连接;当服务正在写数据到客户端时,net_write_timeout控制何时超时。

从库延迟时间

slave-net-timeout:从库延后同步的时间,当slave认为连接master的连接有问题时,就等待N秒,然后断开连接,重新连接masterslave-net-timeout在主从同步时从库上起作用;

connect_timeout:在获取连接阶段起作用;interactive_timeout和wait_timeout:在连接空闲阶段起作用;net_read_timeout和net_write_timeout:则是在连接执行时起作用。

golang 设置 mysql 连接超时时间

关于sql.DB,在建立和使用数据库连接方面有几个参数我们可以根据实际场景来进行优化一下,配置得当的话可以有效提高性能和降低系统资源消耗。

SetMaxOpenConns 用于设置最大打开的连接数,默认值为0,表示不限制。 SetMaxIdleConns 用于设置闲置的连接数,默认值为2; SetConnMaxLifetime 可以限制一个连接使用的最大时长,默认值为0,表示不限制。 SetMaxOpenConns 默认情况下,连接池的最大数量是没有限制的。一般来说,连接数越多,访问数据库的性能越高。但是系统资源不是无限的,数据库的并发能力也不是无限的。因此为了减少系统和数据库崩溃的风险,可以给并发连接数设置一个上限,这个数值一般不超过进程的最大文件句柄打开数,不超过数据库服务自身支持的并发连接数,比如1000。

SetMaxIdleConns 理论上maxIdleConns连接的上限越高,也即允许在连接池中的空闲连接最大值越大,可以有效减少连接创建和销毁的次数,提高程序的性能。但是连接对象也是占用内存资源的,而且如果空闲连接越多,存在于连接池内的时间可能越长。连接在经过一段时间后有可能会变得不可用,而这时连接还在连接池内没有回收的话,后续被征用的时候就会出问题。一般建议maxIdleConns的值为MaxOpenConns的1/2,仅供参考。

SetConnMaxLifetime 设置一个连接被使用的最长时间,即过了一段时间后会被强制回收,理论上这可以有效减少不可用连接出现的概率。当数据库方面也设置了连接的超时时间时,这个值应当不超过数据库的超时参数值。

仅供参考,应当按实际测试效果为准

db.SetMaxOpenConns(1000) db.SetMaxIdleConns(500) db.SetConnMaxLifetime(10*time.Minute)

原生的 1.5 会做无效链接的重试 https://blog.csdn.net/lanyang123456/article/details/106315869

最新回复(0)