当前位置:网站首页 > SQL数据库编程 > 正文

mysql查询锁表吗(mysql查询是否锁表)



为了给高并发情况下的mysql进行更好的优化,有必要了解一下mysql查询更新时的锁表机制。

一、概述

MySQL这3种锁的特性可大致归纳如下:

二、MyISAM表锁

MyISAM存储引擎只支持表锁,是现在用得最多的存储引擎。

1、查询表级锁争用情况

可以通过检查table_locks_waited和table_locks_immediate状态变量来分析系统上的表锁定争夺:

MySQL的表级锁有两种模式:表共享读锁(Table Read Lock)和表独占写锁(Table Write Lock)。MyISAM在执行查询语句(SELECT)前,会自动给涉及的所有表加读锁,在执行更新操作(UPDATE、DELETE、INSERT等)前,会自动给涉及的表加写锁。

client2:

说明当数据表有一个读锁时,其它进程的查询操作可以马上执行,但更新操作需等待读锁释放后才会执行。

client2:

client3:

说明当数据表有一个写锁时,其它进程的读写操作都需等待读锁释放后才会执行。

3、并发插入

原则上数据表有一个读锁时,其它进程无法对此表进行更新操作,但在一定条件下,MyISAM表也支持查询和插入操作的并发进行。

4、MyISAM的锁调度

由于MySQL认为写请求一般比读请求要重要,所以如果有读写请求同时进行的话,MYSQL将会优先执行写操作。这样MyISAM表在进行大量的更新操作时(特别是更新的字段中存在索引的情况下),会造成查询操作很难获得读锁,从而导致查询阻塞。

我们可以通过一些设置来调节MyISAM的调度行为:

上面3种方法都是要么更新优先,要么查询优先的方法。这里要说明的就是,不要盲目的给mysql设置为读优先,因为一些需要长时间运行的查询操作,也会使写进程“饿死”。只有根据你的实际情况,来决定设置哪种操作优先。这些方法还是没有从根本上同时解决查询和更新的问题。

在一个有大数据量高并发表的mysql里,我们还可采用另一种策略来进行优化,那就是通过mysql主从(读写)分离来实现负载均衡,这样可避免优先哪一种操作从而可能导致另一种操作的堵塞。下面将用一个篇幅来说明mysql的读写分离技术。

到此这篇mysql查询锁表吗(mysql查询是否锁表)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • .sql文件导入数据库sqlserver2008(sql文件导入到数据库)2026-04-20 14:45:10
  • sql文件转csv文件(sql如何导出csv)2026-04-20 14:45:10
  • sql循环语句的作用是什么(sql循环语句的作用是什么)2026-04-20 14:45:10
  • sql中循环套循环(sql循环嵌套)2026-04-20 14:45:10
  • Oracle查看锁表时间(oracle查看锁表的sql)2026-04-20 14:45:10
  • sqluldr2 字符集(sqlplus 字符集)2026-04-20 14:45:10
  • mysql主键约束语句(mysql主键约束名)2026-04-20 14:45:10
  • sql文件怎么导入数据库(sql文件怎么导入数据库 oracle)2026-04-20 14:45:10
  • sql文件格式(sqlserver文件格式)2026-04-20 14:45:10
  • sql文件怎么导入sqlyog(sql文件怎么导入sql server)2026-04-20 14:45:10
  • 全屏图片