欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【Mysql教程 对MySQL中的锁机制的总结】,下面是详细的分享!
Mysql教程 对MySQL中的锁机制的总结
今天来简单总结一下MySQL的锁机制,不妥的欢迎拍砖!
1、对于MySQL来说,有三种锁的级别:页级、表级、行级。
页级的典型代表引擎为BDB。
表级的典型代表引擎为MyISAM,MEMORY以及很久以前的ISAM。
行级的典型代表引擎为INNODB。
2、我们实际应用中用的最多的就是行锁了。
行级锁的优点如下:
1)、当很多连接分别进行不同的查询时减小LOCK状态。
2)、如果出现异常,可以减少数据的丢失。因为一次可以只回滚一行或者几行少量的数据。
行级锁的缺点如下:
1)、比页级锁和表级锁要占用更多的内存。
2)、进行查询时比页级锁和表级锁需要的I/O要多,所以我们经常把行级锁用在写操作而不是读操作。
3)、容易出现死锁。
3、MySQL用写队列和读队列来实现对数据库的写和读操作。
对于写锁定如下:
1)、如果表没有加锁,那么对其加写锁定。
2)、否则,那么把请求放入写锁队列中。
对于读锁定如下:
1)、如果表没有加写锁,那么加一个读锁。
2)、否则,那么把请求放到读锁队列中。
当然我们可以分别用low_priority 以及high_priority在写和读操作上来改变这些行为。
4、下面我来一个简单的例子解释上面的说法
我们来运行一个时间很长的查询
1)客户端1:
mysql>selectcount(*) from content group by content;
...
客户端2:
mysql>updatecontent set content='I love you' where id=444;
Query OK, 1 row affected (30.68 sec)
Rows matched: 1 Changed: 1 Warnings: 0
用了半分钟。
2)我们现在终止客户端1。
此时客户端2:
mysql>updatecontent set content='I hate you' where id=444;
Query OK, 1 row affected (0.02 sec)
Rows matched: 1 Changed: 1 Warnings: 0
仅仅用了20毫秒。
这个例子很好的说明了读写队列的运行。
对于1中的客户端1,此时表没有加锁,当然也没有加写锁了,那么此时客户端1对表加了一个读锁。
对于1中的客户端2,此时因为表有一个读锁,所以把UPDATE请求放到写锁定队列中。
当读锁释放的时候,也就是SHOW PROCESSLIST中STATUS 为COPY TO TMP TABLE的时候,UPDATE操作开始执行。
5、可以在REPLICATION中对MASTER 和SLAVE运用不同的锁定使系统达到最佳的性能。(当然这个前提是SQL语句都是最优的。)
以上所分享的是关于Mysql教程 对MySQL中的锁机制的总结,下面是编辑为你推荐的有价值的用户互动:
相关问题:mysql锁机制 什么用。如何使用。通俗点讲
答:mysql锁机制是在并发操作的时候,避免多人同时操作而发生错误。 先说一下表级锁吧 表级锁 一般引擎都支持,资源消耗校申请锁的时候 整表锁定(分读写锁),其它线程或操作不能进行操作 行级锁 INNODB引擎支持。资源消耗大 锁定的时候 被锁的行只... >>详细
相关问题:谁遇到过这样的锁的问题?
答:2# 昨天晚上又发生了类似的情况。。。看了日志,显示如下:mysqldump: Couldn't execute 'FLUSH TABLES WITH READ LOCK': MySQL server has gone away (2006)现在好像明白了,因为mysql server被中断了,所以定时备份的mysqldump无法执行FLUSH T... >>详细
相关问题:mysql数据库truncate的锁机制是什么?
答:如果你在一束表上运行许多操作,锁定你将要使用的表,这会更快一些。当然有不利的方面,其它线程将不能更新一个 READ 锁的表,并且没有其它线程要以读取一个 WRITE 锁的表。 在 LOCK TABLES 下,某些事运行得更快一些的原因是,MySQL 将不会转储... >>详细
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
