HIGH_PRIORITY和LOW_PRIORITY

Contents

  1. See Also

XtraDB/InnoDB存储引擎使用行级锁来保证数据的完整性。但有些存储引擎(例如MEMORYMyISAMAriaMERGE)使用表级锁将整个表锁住以防止锁冲突。这些使用表锁的存储引擎使用两种独立的队列来记住队列中的语句;一个队列是为读数据SELECTs语句准备,一个队列是为写数据(INSERTDELETEUPDATE)准备。默认情况下,后者比前者优先级更高。也就是说,如果队列中既有读操作,又有写操作,将先执行所有的写操作,执行完后才执行读操作。

如果想让写操作的优先级变低,可以设置系统变量low_priority_updates的值为ON。该变量是全局变量,也是会话变量。可以使用SET语句设置。

如果表上设置了很多写操作的表锁,某些挂起的SELECTs操作可能会被执行。因为系统变量max_write_lock_count控制了允许的写操作表锁的最大数量。该变量是动态变量,可在服务运行过程中随时修改。

如果写语句的优先级更高(默认情况下它的优先级就比读操作优先级高),那么每个写操作的语句(INSERTREPLACEUPDATEDELETE)都可以通过使用关键字LOW_PRIORITY设置它们的优先级低于读操作,同理,SELECT语句可以通过使用关键字HIGH_PRIORITY设置它的优先级高于写操作。此外,LOCK TABLES也支持为WRITE锁设置LOW_PRIORITY

如果读操作的优先级更高,可以为INSERT语句设置HIGH_PRIORITY使其优先级重新高于读操作。但是,除了INSERT,其他写操作无法设置HIGH_PRIORITY来重新提升优先级。

之所以INSERT可以设置HIGH_PRIORITY,是因为要通过它来阻止并发插入行为。

See Also

Comments

Comments loading...
Content reproduced on this site is the property of its respective owners, and this content is not reviewed in advance by MariaDB. The views, information and opinions expressed by this content do not necessarily represent those of MariaDB or any other party.