1. Kill 命令的作用
用户在集群执行一条 SQL 语句,如果不需要继续等待或是用户发现语句有
错误需要中止该语句执行。
集群可以通过两种方式中止一条 SQL 语句的执行:
1. 执行 kill query 或者 kill connection
2. 使用 ctrl+C
以上两种方法会导致对应的 session 状态设置为 KILL_QUERY 或是
KILL_CONNECTION。
当集群在某个 session 中检测到状态为上述两种的任意一种时,就认为
session当前执行的SQL已经被中止,集群需要将中止操作传递给这条语句影响
的所有 node 节点,在所有 node 节点上执行 kill 命令。只有在所有 node 节点
上该语句的执行都中止了,集群才会真正停止 SQl 语句的执行。
2.异步连接中 l kill 机制的实现
集群使用异步连接执行一条命令时,会启动一个事件循环来监听所有和
node 节点通讯的 socket,当有事件发生时,从 socket 读数据或是通过 socket
发送数据,完成和 node 的通讯。
为了检测集群是否已经对 SQL 语句执行了 kill 或是 ctrl+C,异步连接池
在语句开始执行时,会在事件循环中添加一个永久性的定时事件,以固定间隔
检查当前session 的状态,如果发现状态为 KILL_QUERY 或是KILL_CONNECTION,
就逐个连接当前语句影响的 node 节点,向节点发送 kill connection 命令,中
止节点上语句的执行。