开发的话不可信

今天开发告诉我说表损坏不能查也不能删,当然开发的话不能信。


自己测试下

mysql> select * from order_lines_field_b limit 1;

一直是卡死状态

一直在想为啥不报错的,如果损坏了要报错。

于是百度看下,说看锁,我就晕了,又忘记了,mysql的select可能造成阻塞。第一感觉是有备份吗?但是是测试环境。没备份,到底问题出在哪里。那只能查了。

DDL语句被阻塞通常因为存在获取资源后未及时提交释放的长事务。因此,查找kill掉事务运行时间大于DDL运行时间的会话即可使DDL语句顺利下发,SQL语句如下:

查找事务运行时间 >= DDL等待时间的线程

SELECT trx_mysql_thread_id AS PROCESSLIST_ID,        NOW(),        TRX_STARTED,        TO_SECONDS(now())-TO_SECONDS(trx_started) AS TRX_LAST_TIME ,        USER,        HOST,        DB,        TRX_QUERY FROM INFORMATION_SCHEMA.INNODB_TRX trx JOIN INFORMATION_SCHEMA.processlist pcl ON trx.trx_mysql_thread_id=pcl.id WHERE trx_mysql_thread_id != connection_id()   AND TO_SECONDS(now())-TO_SECONDS(trx_started) >=     (SELECT MAX(Time)      FROM INFORMATION_SCHEMA.processlist      WHERE STATE='Waiting for table metadata lock'        AND INFO LIKE 'alter%table%' OR INFO LIKE 'truncate%table%') ;