作者回复: 这个理解非常到位👍
额外的一个不同就是show processlist的时候,kill connection会显示“killed”
这两句加起来可以用来替换我们文中的描述👍
作者回复: 不同的知识点不太一样哈,
有些可以看文档;
有些可以自己验证;
还有就是看其他人文章,加验证;(就是我们这个专栏的方法^_^)
作者回复: 如果是因为这个原因的,应该是设置innodb_thread_concurrency=0就会退出的。。
你这个情况可能卡在别的地方了,下次如果再出现,要重启之前,用pstack保留个现场哦
作者回复: 有考虑到对其他线程的影响,这个👍
其实这种时候往往是要先考虑切换(当然重启也是切换的)
如果只看恢复时间的话,等待会更快
作者回复: 执行kill的时候没进InnoDB,不受这个参数限制的
作者回复: 删除中间列,就没办法用切换的那个方案。
MySQL的备库比主库多一个字段或少一个字段,这时候日志还是可以应用成功的(但如果少的是中间一个字段,字段就会对应错了)
作者回复: 就是回滚的影响,没有其他的了
作者回复: 对,进行回滚
取决于做到什么程度了,总之效果就是中间生成的数据全部清理掉,恢复到未执行ddl之前的状态
作者回复: 堵住了不就变慢了😆
作者回复: 对,其实只有 改索引、 加最后一列、删最后一列
其他的大多数不行,比如删除中间一列这种
作者回复: 后面会有文章会提到这个问题哈:)
作者回复: “我暂时是强制查主库” 从这就看你是因为读是读的备库,才出现这个问题的是吧。
发条橙子的问题是,他都是操作主库。
其实如果索引有唯一键,就直接上insert。
然后碰到违反唯一键约束就报错,这个应该就是唯一键约束正常的用法吧😆
作者回复: 1. 是的,如果普通索引上的数据页这时候没有在内存中,就会使用change buffer
2. “那普通数据呢,是不是跟着主键一块写入内存了?” 你说的是无索引的字段是吧,这些数据就在主键索引上,其实改的就是主键索引。
作者回复: 1. 一般你执行kill就是要停止正在执行的语句,所以问题不大😋
2. 不应该呀, KILL QUERY 是大写哦,你再grep一下日志;
3. 多提供一种方法嘛。kill query是指你只是想停止这个语句,但是事务不会回滚。一般kill query是发生在客户端执行ctrl+c的时候啦。平时紧急处理确实直接用kill + thread_id。 好问题
4. 对,另外,在kill query无效的时候,其实kill connection也是无效的
作者回复: 只会锁左右。
作者回复: 这个事务执行过程中新生成的数据吗? 会回滚的
作者回复: 代码实现上,事务生成trxid后,trxid的分配器会+1,以这个加1以后的数作为高水位,所以“等于”是不算的。
其实有没有包含是一样的,实现上没有包含。