1.被MDL写锁 block了,比如某个变更加字段 《metadata lock》
查找造成阻塞的pid select blocking_pid from sys.schema_table_lock_waits
2.等待flush
查找被等待flush表的sql select * from information_schema.processlist where id=1;
show processlist
3.等待行锁(读锁等待写锁)
查询谁持有写锁 select * from t sys.innodb_lock_waits where locked_table='`db`.`table_name`'
4.longSQL(不多说了)
5.一致性读
查1是一致性读,需要找到最之前的记录,需要疯狂的执行undo log。读到的值是1
<所有读操作都是从当前最新版本,然后回溯自己可见的事务ID>
查2是当前读lock in share mode,直接取最新值 读到的结果是100万1
<select加锁和update都是当前读>