交互和非交互连接区别
首先说明两个关键词,通过MySQL 客户端连接db的是交互会话,通过jdbc等程序连接db的是非交互会话。
interactive_time
是指如果空余Ns(N就是这个属性的值),那么就会自动关闭mysql的连接。比如打开一个mysql客 户端黑窗口,进入操作之后,又隔了Ns不操作了,之后想继续操作,对不起,mysql会在之前关闭了你的那个连接,mysql会帮你自动重新连接。注意这里是自动重新连接,也就是不需要重新登录。
wait_time
对于通过例如JDBC连接DB的连接,是非交互式连接。如果空余Ns(N就是这个属性的值),那么会自动kill掉这些连接。
利用超时参数值判断
- 交互式连接interactive_timeout == wait_timeout
- 非交互式interactive_timeout 和 wait_timeout没有关系
通过如上的条件,只需要修改interactive_timeout 的值就可以进行判断了。
但是通常修改interactive_timeout 全局值会覆盖掉wait_timeout的值,这里最简单就是修改session级别的interactive_timeout,这样当前会话中wait_timeout和interactive_timeout 就能区分开来。
利用performance_schema.variables_by_thread来观察会话级别的参数
- 如果会话参数中interactive_timeout == wait_timeout且为1800 那么为交互式
- 如果会话参数中interactive_timeout != wait_timeout一个为999一个为1800 则为非交互式
如下语句可以判断
select b.processlist_id,a.VARIABLE_NAME,a.VARIABLE_VALUE,b.name from
performance_schema.variables_by_thread a ,performance_schema.threads b
where a.THREAD_ID=b.THREAD_ID and VARIABLE_NAME in('wait_timeout','interactive_timeout');