了解MYSQL数据库调度与锁定的问题
日期:2007年7月8日 作者: 查看:[大字体 中字体 小字体]-
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 的ELAYED 修饰符作用如下,在表的一个INSERT DELAYED 请求到达时,服务器将相应的行放入一个队列,并立即返回一个状态到客户机程序,以便该客户机程序可以继续执行,即使这些行尚未插入表中。如果读取程序正在对表进行读取,那么队列中的行挂起。在没有读取时,服务器开始开始插入延迟行队列中的行。服务器不时地停下来看看是否有新的读取请求到达,并进行等待。如果是这样,延迟行队列将挂起,并允许读取程序继续。在没有其他的读取操作时,服务器再次开始插入延迟行。这个过程一直进行到延迟行队列空为止。
- [1] [2] 下一页
-
- 了解MYSQL数据库调度与锁定的问题 相关文章:
- ·了解MYSQL数据库调度与锁定的问题
- 了解MYSQL数据库调度与锁定的问题 相关软件
- 特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作
- 者.文章版权归文章原始作者所有.对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转
- 载的文章有版权问题请联系编辑人员,我们尽快予以更正. 转载请注明来源:http://www.hackhome.com
精品推荐
热点TOP10
- ·MySQL数据库学习手册之从MySQL得到最大的性能
- ·mysql中的mysql_real_connect连接参数设置
- ·详细介绍优化mysql性能的十个参数
- ·讲解Ubuntu下MySQL数据库安装后初步设置
- ·修改MYSQL数据库,数据表,字段的编码(解决JSP乱码)
- ·怎样测试 MySQL安装是否成功?
- ·MySQL中LOAD DATA LOCAL安全问题
- ·Mysql的distinct语句和group by,order by
- ·一个简单的MySQL备份恢复数据指令
- ·SQL中HAVING从句的用法
- ·让Windows在IIS支持PHP和MySQL
- ·快速掌握 MySQL数据库中触发器的应用
- ·数据从MySQL迁移到 Oracle的注意事项
- ·MySQL管理工具SQLyog最新6.1下载
- ·mysql导入数据库文件最大限制的修改方法
- ·SQL Server 2008 几项新特性概述
- ·MySQL安装的故障诊断与排除(Windows环境)
- ·快速掌握 SQL Server 的任务调度
- ·PHP5对Mysql5的任意数据库表的管理代码示例
- ·怎样从Windows命令行启动MySQL?
特别推荐
- ·修改MySQL的默认密码
- ·初学MYSQL应知道:Mysql参数优化
- ·数据库安全应用 使用MySQL的23个注意事项
- ·入门:MYSQL基础
- ·轻松描述Windows上安装多个Mysql的步骤
- ·安装与卸载MySQL数据库系统服务的常见问题
- ·Mysql 安全注意事项
- ·初学MySql5 所应了解的知识和常见问题
- ·MySQL数据库学习手册之安装MySQL
- ·无法远程登入MySQL数据库的三种解决办法
- ·讲解Ubuntu下MySQL数据库安装后初步设置
- ·MySQL数据库管理员迅速回答常见问题汇总
- ·详细介绍优化mysql性能的十个参数
- ·MySQL中执行SQL语句时的两个注意点
- ·帮助你如何迅速优化你MySQL数据库性能
- ·PHP+MYSQL建设网站程序需要注意两点
- ·资深专家手把手教你安装MYSQL数据库
- ·实战经验:PHP+MySQL数据库论坛简易通
- ·MySQL的启动方法(windows 平台)
- ·修改MYSQL数据库,数据表,字段的编码(解决JSP乱码)
