专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »数据库 » mysql数据库:有关MySQL数据库基本调度策略的介绍 »正文

mysql数据库:有关MySQL数据库基本调度策略的介绍

来源: 发布时间:星期日, 2009年8月16日 浏览:0次 评论:0
  MySQL允许影响语句调度特性这样会使来自几个客户机查询更好地协作从而单个客户机不会被锁定太长时间更改调度特性还能保证特定查询处理得更快我们先来看下MySQL缺省调度策略然后来看看为改变这个策略可使用什么样选项出于讨论假设执行检索( SELECT)客户机为读取执行修改表操作( DELETEINSERTREPLACE 或UP DATE)个客户机为写入

  MySQL基本调度策略可整理总结如下:

  ■ 写入请求应按其到达次序进行处理

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

  在表锁帮助下实现调度策略客户机无论何时要访问表都必须首先获得该表可以直接用LOCK TABLES 来完成这项工作般服务器锁管理器会在需要时自动获得锁在客户机结束对表处理时可释放表上直接获得锁可用UNLOCK TABLES 释放但服务器也会自动释放它所获得

  执行写操作客户机必须对表具有独占访问在写操作进行中由于正在对表进行数据记录删除、增加或更改所以该表处于不致状态而且该表上索引也可能需要作相应更新如果表处于不断变化中此时允许其他客户机访问该表会出问题让两个客户机同时写同个表显然不好这样会很快使该表不可用允许客户机读不断变化表也不是件好事可能在读该表刻正好正在对它进行更改其结果是不正确执行读取操作客户机必须有把防止其他客户机写该表以保证读表过程中表不出现变化不过该锁无需对读取操作提供独占访问此锁还允许其他客户机同时对表进行读取读取不会更改表所有没必要阻止其它客户机对该表进行读取

  MySQL允许借助几个查询限修饰符对其调度策略施加影响其中的是DELETE、INSERT、LOAD DATA、REPLACE 和UP DATE 语句LOW_PRIORITY 关键字个是SELECT 语句HIGH_PRIORITY 关键字第 3个是INSERT 和REPLACE 语句DELAYED 关键字

  LOW_PRIORITY 关键字按如下影响调度般情况下如果某个表写入操作在表正被读取时到达写入被阻塞直到读取完成旦某个查询开始就不能中断如果另读取请求在写入等待时到达此读取也被阻塞缺省调度策略为写入具有比读取优先级在第个读取结束时写入继续在此写入结束时第 2个读取开始

  如果写入请求为LOW_PRIORITY 请求则不将该写入操作视为具有比读取操作优先级高操作在此情形下如果第 2个读取请求在写入等待时到达则让第 2个读取操作排在等待写入操作的前仅当没有其他读取请求时才允许写入执行这种调度更改从理论上说其含义为LOW_PRIORITY 写入可能会永远被阻塞当正在处理前面读取请求时只要另个读取请求到达这个新请求允许排在LOW_PRIORITY 写入的前

  SELECT 查询HIGH_PRIORITY 关键字作用类似它使SELECT 插在正在等待写入操作的前即使该写入操作具有正常优先级INSERT ELAYED 修饰符作用如下在表个INSERT DELAYED 请求到达时服务器将相应行放入个队列并立即返回个状态到客户机以便该客户机可以继续执行即使这些行尚未插入表中如果读取正在对表进行读取那么队列中行挂起在没有读取时服务器开始开始插入延迟行队列中服务器不时地停下来看看是否有新读取请求到达并进行等待如果是这样延迟行队列将挂起并允许读取继续在没有其他读取操作时服务器再次开始插入延迟行这个过程直进行到延迟行队列空为止

  此调度修饰符并非出现在所有MySQL版本中下面表列出了这些修饰符和支持这些修饰符MySQL版本可利用此表来判断所使用MySQL版本具有什么样功能:
  

  如果其他客户机可能执行冗长SELECT 语句而且您不希望等待插入完成此时INSERT DELAYED 很有用发布INSERT DELAYED 客户机可以更快地继续执行服务器只是简单地将要插入行插入不过应该对正常INSERT 和INSERT DELAYED 性能的间差异有所认识如果INSERT DELAYED 存在语法则向客户机发出如果正常便不发出信息例如在此语句返回时不能相信所取得AUTO_INCREMENT 值也得不到惟索引上重复数目计数的所以这样是此插入操作在实际插入完成前返回了个状态其他还表示如果INSERT DELAYED 语句行在等待插入中被排队并且服务器崩溃或被终止(用kill -9)那么这些行将丢失正常TERM 终止不会这样服务器会在退出前将这些行插入

0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: