当前位置:七道奇文章资讯数据防范MySQL防范
日期:2011-05-02 15:51:00  来源:本站整理

MYSQL调度与锁定问题[MySQL防范]

赞助商链接



  本文“MYSQL调度与锁定问题[MySQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
 

MySQL还答应影响语句的调度特点,这样会使来自几个客户机的查询更好地合作,从而单个客户机不会被锁定太长的时间.更改调度特点还能保证特定的查询处理得更快.我们先来看一下MySQL的缺省调度战略,然后来看看为改变这个战略可以利用什么样的选项.出于谈论的目的,假定履行检索( SELECT)的客户机程序为读取程序.履行改正表操作( DELETE,INSERT,REPLACE 或UP DATE)的另一个客户机程序为写入程序.

MySQL的基本调度战略可总结以下:

写入恳求应按其到达的次序举行处理.

写入具有比读取更高的优先权.

在表锁的帮忙下实现调度战略.客户机程序无论什么时刻要拜候表,都必须首先得到该表的锁.可以直接用LOCK TABLES 来完成这项工作,但普通服务器的锁管理器会在需求时自动得到锁.在客户机完毕对表的处理时,可释放表上的锁.直接得到的锁可用UNLOCK TABLES 释放,但服务器也会自动释放它所得到的锁.

履行写操作的客户机必须对表具有独占拜候的锁.在写操作举行中,由于正在对表举行数据记录的删除、增添或更改,所以该表处于不一致状况,并且该表上的索引也大概需求作呼应的更新.假如表处于不断改变中,此时答应其他客户机拜候该表会出问题.让两个客户机同时写同一个表明显不好,因为这样会很快使该表不可用.答应客户机读不断改变的表也不是件功德,因为大概在读该表的那一刻恰好正在对它举行更改,后来果是不精确的.履行读取操作的客户机必须有一把避免其他客户机写该表的锁,以保证读表的历程中表不呈现改变.不过,该锁无需对读取操作供应独占拜候.此锁还答应其他客户机同时对表举行读取.读取不会更改表,全部没必要禁止别的客户机对该表举行读取.

MySQL答应借助几个查询限修饰符对其调度战略施加影响.此中之一是DELETE、INSERT、LOAD DATA、REPLACE 和UP DATE 语句的LOW_PRIORITY 关键字.另一个是SELECT 语句的HIGH_PRIORITY 关键字.第三个是INSERT 和REPLACE 语句的DELAYED 关键字.

LOW_PRIORITY 关键字按以下影响调度.普通情形下,假如某个表的写入操作在表正被读取时到达,写入程序被阻塞,直到读取程序完成,因为一旦某个查询开始,就不能中止.假如另一读取恳求在写入程序等候时到达,此读取程序也被阻塞,因为缺省的调度战略为写入程序具有比读取程序高的优先级.在第一个读取程序完毕时,写入程序持续,在此写入程序完毕时,第二个读取程序开始.

假如写入恳求为LOW_PRIORITY 的恳求,则不将该写入操作视为具有比读取操作优先级高的操作.在此情形下,假如第二个读取恳求在写入程序等候时到达,则让第二个读取操作排在等候的写入操作之前.仅当没有其他读取恳求时,才答应写入程序履行.这种调度的更改从理论上说,其含义为LOW_PRIORITY 写入大概会永久被阻塞.当正在处理前面的读取恳求时,只要另一个读取恳求到达,这个新的恳求答应排在LOW_PRIORITY 写入之前.

SELECT 查询的HIGH_PRIORITY 关键字作用近似.它使SELECT 插在正在等候的写入操作之前,即便该写入操作具有正常的优先级.INSERT 的DELAYED 修饰符作用以下,在表的一个INSERT DELAYED 恳求到达时,服务器将呼应的行放入一个行列,并当即返回一个状况到客户机程序,以便该客户机程序可以持续履行,即便这些行还没有插入表中.假如读取程序正在对表举行读取,那么行列中的行挂起.在没有读取时,服务器开始开始插入耽误行行列中的行.服务器不时地停下来看看能否有新的读取恳求到达,并举行等候.假如是这样,耽误行行列将挂起,并答应读取程序持续.在没有其他的读取操作时,服务器再次开始插入耽误行.这个历程一向举行到耽误行行列空为止.

此调度修饰符并非呈目前全部MySQL版本中.下面的表列出了这些修饰符和支持这些修饰符的MySQL版本.可操纵此表来判断所利用的MySQL版本具有什么样的功效:

INSERT DELAYED 在客户机方的作用

假如其他客户机大概履行冗长的SELECT 语句,并且您不但愿等候插入完成,此时INSERT DELAYED 很有效.公布INSERT DELAYED 的客户机可以更快地持续履行,因为服务器只是简单地将要插入的行插入.不过应当对正常的INSERT 和INSERT DELAYED 性能之间的差别有所熟习.假如INSERT DELAYED 存在语法错误,则向客户机发出一个错误,假如正常,便不发出信息.比方,在此语句返回时,不能相信所获得的AUTO_INCREMENT 值.也得不到惟一索引上的反复数目的计数.之所以这样是因为此插入操作在实际的插入完成前返回了一个状况.其他还表示,假如INSERT DELAYED 语句的行在等候插入中被列队,并且服务器崩溃或被终止(用kill -9),那么这些行将丧失.正常的TERM 终止不会这样,服务器会在退出前将这些行插入.

  以上是“MYSQL调度与锁定问题[MySQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • Windows 搭配 IIS7 PHP MySQL 环境
  • mysql Out of memory (Needed 16777224 bytes)的错误办理
  • mysql提醒[Warning] Invalid (old?) table or database name问题的办理办法
  • mysql启用skip-name-resolve情势时呈现Warning的处理办法
  • mysql启用skip-name-resolve情势时呈现Warning的处理办法
  • MySQL Order By语法介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • mysql数据库插入速度和读取速度的调整记录
  • MySQL Order By索引优化办法
  • MySQL Order By用法分享
  • mysql #1062 –Duplicate entry ''1'' for key ''PRIMARY''
  • MySQL Order By Rand()效率解析
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .