mysql-锁机制

分类: MySQL

是什么?

计算机是一套多个进程或县城并发访问某一资源的机制。

表锁(偏读)

偏向MyISAM存储引擎,开销小,加锁快;无死锁,锁定粒度大,发生锁冲突的概率最高,并发度最低。

lock table 表名 read,表名 write;

【查看哪些表被锁了】1表示锁定

show open tables;

【释放表锁】

unlock tables;

【看看哪些表被锁了】

show open tables;

【如何分析表锁定】
可以通过检查table_locks_waitd和table_locksimmediate状态变量来分析系统上的表所定。

show status like 'table%';

table_locks_immediate:产生表级锁定的次数,表示可以立即获取锁的查询次数,没立即获取锁值加1;
table_locks_waited:出现表级锁定争用而发生等待的次数(不能立即获取锁的次数,没等待一次锁值增加1),此值高则说明存在着较严重的表级锁争用情况;
myisam的读写锁调度是写优先,这也是mysiam不适合做主表的引擎。因为写锁后,其他线程不能做任何操作,大量的更新会使查询很难得到锁,从而造成永远阻塞。

获得表的READ锁定,当前session可以查询该表记录,当前session不能查询其他没有锁定的表;
其他session也可以查询该表,其他session可以查询或者更新未锁定的表,但是不能更新锁定的表,会造成阻塞,释放锁后才会执行操作。

锁定后,当前session不能查询其他表,其他session查询该表的时候会阻塞。

行锁(偏写)

偏向InnoDB存储引擎,开销大,加锁;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也是最高。

InnoDB与MyISAM的最大不同有两点:一是支持事务;二是采用了行级锁

结论,看图
读锁会阻塞写,但是不会阻塞读;而写锁则会把写和读都阻塞。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注


Warning: error_log(/www/wwwroot/codegulu.cn/wp-content/plugins/spider-analyser/#log/log-1013.txt): Failed to open stream: Permission denied in /www/wwwroot/codegulu.cn/wp-content/plugins/spider-analyser/spider.class.php on line 2969