最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

MySQL锁表了怎么办?

运维笔记admin3浏览0评论

发生表锁的一些原因

1、锁表发生在insert  update 、delete 中   
2、锁表的原理是 数据库使用独占式封锁机制,当执行上面的语句时,对表进行锁住,直到发生commite 或者 回滚 或者退出数据库用户 
3、锁表的原因 
  第一、 A程序执行了对 tableA 的 insert ,并还未 commite时,B程序也对tableA 进行insert 则此时会发生资源正忙的异常 就是锁表
  第二、锁表常发生于并发而不是并行(并行时,一个线程操作数据库时,另一个线程是不能操作数据库的,cpu 和i/o 分配原则)
4、减少锁表的概率,
(1)减少insert 、update 、delete 语句执行 到 commite 之间的时间。具体点批量执行改为单个执行、优化sql自身的非执行速度
(2)如果异常对事物进行回滚
 

1、查看是那些表被锁定了

show OPEN TABLES where In_use > 0;

2、查看表的状态

show status like 'table%';

Table_locks_immediate 指的是能够立即获得表级锁的次数
Table_locks_waited 指的是不能立即获取表级锁而需要等待的次数,值比较高,则说明存在着较严重的表级锁争用情况。

3、查看行级锁 

show status like 'innodb_row_lock%';

 如果发现锁争用比较严重,如InnoDB_row_lock_waits和InnoDB_row_lock_time_avg的值比较高

4.、查看进程id 

show processlist;

 5、干掉锁表的进程id

kill 10866;

发布评论

评论列表(0)

  1. 暂无评论