MYSQL 关于锁的一些事

操作sql超时了,怎么办?

现在的mysql默认的数据引擎都是innodb的,查询操作不会出现锁的问题(使用的快照原理),如果你的mysql的数据引擎用的是MyISAM,查询时会产生锁的,如果系统的并发量较大容易出现超时的情况,极端情况下会使搞挂RDS,让你看着cup直冒冷汗。

遇到问题可以按照以下步骤来一波,问题就能迎刃而解了:

1、查看数据库的隔离级别:

mysql> select @@tx_isolation;

2、去查看先当前库的线程情况:

mysql> show processlist;

       没有看到正在执行的慢SQL记录线程,再去查看innodb的事务表INNODB_TRX,看下里面是否有正在锁定的事务线程,看看ID是否在show full processlist里面的sleep线程中,如果是,就证明这个sleep的线程事务一直没有commit或者rollback而是卡住了,我们需要手动kill掉。

        mysql> SELECT * FROM information_schema.INNODB_TRX;

3、看到有锁的sql,kill掉,执行 "kill (1111)锁的线程id";

然后再去查询INNODB_TRX表,就没有阻塞的事务sleep线程存在了

4、看看autocommit;

mysql> select @@autocommit;

mysql都是autocommit,如果查询的值是0,执行下这个命令,不然后续还会遇到坑。

mysql> set global autocommit=1;

你可能感兴趣的:(数据库)