Mysql 锁。
文章源自陈学虎-https://chenxuehu.com/article/2016/05/5120.html
- /**
- MYSQL锁
- 表级锁
- 开销小,锁定粒度大,发生冲突的概率高,不会出现死锁(myisam、memory)
- 行级锁
- 开销大,锁定粒度小,发生冲突的概率低,会出现死锁(InnoDB)
- 页面锁
- 开销界于表级锁和行级锁之间,会出现死锁(BDB)
- */
- #Table_locks_immediate表示立即释放MySQL表锁数
- #Table_locks_waited表示需要等待的MySQL表锁数
- #如果Table_locks_waited的值比较高,则说明存在着较严重的表级锁争用情况。
- show status like 'table%';
- #获取InnoDB行锁争用情况。重点关注InnoDB_row_lock_waits和InnoDB_row_lock_time_avg
- show status like 'innodb_row_lock%';
- show engine innodb status;
- -- 锁演示
- create table test_lock
- (
- id int(10) UNSIGNED auto_increment,
- name VARCHAR(100) not null,
- PRIMARY KEY (id)
- )ENGINE=MyISAM DEFAULT charset=utf8;
- insert into test_lock(name) VALUE ('test');
- -- 写锁定
- lock TABLE test_lock write;
- -- 当前session对锁定表的查询、更新、插入操作都可以支持
- select * from test_lock;
- insert into test_lock(name) VALUE ('test1111');
- select * from test_lock;
- -- 新建一个查询,然后输入查询,无法查询到结果
- #释放锁
- UNLOCK TABLES;
- -- 然后去新的查询中执行,可以执行
- #5.6版本以上的mysql可以通过my.cnf中配置innodb_print_all_deadlocks=1来吧死锁的信息输出到日志里
- #如果有,关注lock关键字
评论