MySQL基本调度方法浅析

[导读]   mysql允许影响语句的调度特性,这样会使来自几个客户机的查询更好地协作,从而单个客户机不会被锁定太长的时间。更改调度特性还能保证特定的查询处理得更快。我们先来看一下mysql的缺省调度策略,然后来看看

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

 

百度GBI 百度GBI

百度GBI-你的大模型商业分析助手

百度GBI 104 查看详情 百度GBI

  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 请求到达时,服务器将相应的行放入一个队列,并立即返回一个状态到客户机程序,以便该客户机程序可以继续执行,即使这些行尚未插入表中。如果读取程序正在对表进行读取,那么队列中的行挂起。在没有读取时,服务器开始开始插入延迟行队列中的行。服务器不时地停下来看看是否有新的读取请求到达,并进行等待。如果是这样,延迟行队列将挂起,并允许读取程序继续。在没有其他的读取操作时,服务器再次开始插入延迟行。这个过程一直进行到延迟行队列空为止。

 

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

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

以上就是MySQL基本调度方法浅析的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/394830.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月6日 17:13:59
下一篇 2025年11月6日 17:18:51

相关推荐

  • 怎么用php写接口_php接口开发的步骤、规范与代码实例

    开发PHP接口需遵循明确步骤与规范,首先确定需求并设计RESTful风格的URL,如/api/v1/users,使用小写和复数形式;接着定义请求方法,优先支持JSON格式传输;通过$_GET或$_POST获取参数,并进行安全过滤;业务逻辑中连接数据库处理数据,如用MySQLi查询用户列表;返回统一J…

    2025年12月12日
    000
  • php数据库如何建立高效连接 php数据库连接的最佳实践与性能优化

    使用持久连接可提升PHP数据库性能,但需谨慎配置避免连接耗尽;推荐PDO+MySQLnd驱动并启用预处理,合理设置超时与自动重连参数,结合连接复用和缓存减少数据库压力,长生命周期服务宜用连接池,FPM场景应控制持久连接数,确保资源及时释放与异常处理,从而实现高效稳定的数据交互。 在PHP应用中,数据…

    2025年12月12日
    000
  • php调用数据库备份功能_php调用mysqldump自动备份

    答案:通过PHP调用mysqldump可实现MySQL自动备份。需确认服务器支持mysqldump命令,编写PHP脚本使用exec等函数执行导出命令,并推荐用my.cnf存储凭证以提升安全性,最后通过crontab设置定时任务,实现每日凌晨自动备份,适用于中小型项目的数据保护。 使用PHP调用mys…

    2025年12月12日
    000
  • CodeIgniter模糊搜索功能实现与调试指南

    本文旨在提供codeigniter框架下实现模糊搜索功能的详细教程,涵盖控制器和模型层的代码构建。特别强调了当搜索功能不按预期工作时,如何利用`$this->db->last_query()`方法有效地打印并检查实际执行的sql语句,从而快速定位和解决问题。通过本指南,开发者将能够构建健…

    2025年12月12日
    000
  • php数据库如何选择合适驱动 php数据库PDO与mysqli的对比分析

    PDO适用于多数据库兼容和可维护性要求高的项目,MySQLi则适合专注MySQL且追求极致性能的场景。 在PHP开发中,数据库操作是核心环节之一。选择合适的数据库驱动直接影响程序的性能、可维护性和扩展性。目前最常用的两种数据库访问方式是 PDO 和 MySQLi。两者都能连接MySQL数据库,但在设…

    2025年12月12日
    000
  • php网站怎么修改页面_php网站页面内容修改方法与注意事项

    修改PHP网站页面内容通常涉及前端展示和后端逻辑两部分。掌握正确的修改方法能避免功能异常或安全风险。以下是常见的修改方式和必须注意的事项。 1. 找到需要修改的页面文件 大多数PHP网站的页面由.php文件构成,文件可能位于项目根目录或子目录中(如/pages、/templates等)。 查看URL…

    2025年12月12日
    000
  • Sylius API 404 错误排查与启用指南

    本文旨在解决 sylius 新安装后 api 接口返回 404 错误的问题。核心解决方案包括两方面:首先,需要明确启用 sylius api 功能,因为其在开发阶段默认可能未激活;其次,必须生成 jwt 认证所需的密钥对,以避免后续因认证失败导致的错误。通过这两个关键步骤,用户可以顺利地激活并使用 …

    2025年12月12日
    000
  • php数据库如何实现数据回调 php数据库异步处理的技术方案

    答案:PHP可通过消息队列、Swoole、计划任务等方案实现数据库异步处理与回调。1. 消息队列(如Redis、RabbitMQ)将任务交给后台Worker执行,完成后再通过HTTP回调或状态更新通知结果;2. Swoole扩展支持协程与异步MySQL,可在高并发下非阻塞执行数据库操作并触发回调;3…

    2025年12月12日
    000
  • PHP中处理Unicode与JSON编码的数据库搜索策略

    本文探讨了在PHP中处理Unicode字符串与数据库中以JSON编码的Unicode转义序列存储的字段进行匹配的问题。当数据库字段存储的是`”uXXXX”`形式的字符串表示时,直接进行UTF-16字节转换是无效的。核心解决方案是利用`json_encode`函数将UTF-8输…

    2025年12月12日
    000
  • php乱码怎么办_PHP乱码问题全面排查与解决

    答案:PHP乱码需统一各环节字符集为UTF-8。1. 页面输出用和header(‘Content-Type: text/html; charset=UTF-8’);;2. PHP文件保存为UTF-8无BOM;3. 数据库使用utf8mb4,连接时设置mysqli_set_ch…

    2025年12月12日
    000
  • PHP框架如何进行数据库索引优化_PHP框架查询优化技巧

    数据库索引优化和查询性能提升是PHP框架开发中不可忽视的关键环节。合理的索引设计与高效的查询写法能显著减少响应时间,降低服务器负载。以下从索引策略和框架层面的查询优化技巧两方面进行说明。 合理创建数据库索引 索引是提升查询速度的核心手段,但并非越多越好。应根据实际查询场景选择字段建立索引: 为经常出…

    2025年12月12日
    000
  • CodeIgniter 搜索功能实现与调试指南

    本文旨在指导开发者如何在CodeIgniter框架中实现一个基础的搜索功能,并重点介绍当搜索结果不符合预期时,如何通过打印SQL查询语句进行高效调试。我们将涵盖控制器和模型层的代码实现,以及常见的调试技巧和注意事项,确保您能快速定位并解决问题。 在Web应用中,搜索功能是提升用户体验的关键组成部分。…

    2025年12月12日
    000
  • php数据库如何修复表损坏 php数据库故障恢复的应急处理

    答案:MySQL表损坏多因异常关机或硬件故障导致,可通过CHECK TABLE确认问题,对MyISAM表使用REPAIR TABLE或myisamchk工具修复,InnoDB表则需设置innodb_force_recovery导出数据并重建,修复前应备份文件,定期备份可降低风险。 当PHP应用连接的…

    2025年12月12日
    000
  • php数据库如何配置连接参数 php数据库连接字符串的详细解析

    答案:PHP连接数据库需配置主机、端口、数据库名、用户名、密码和字符集,常用PDO或MySQLi扩展。PDO通过DSN字符串(如”mysql:host=localhost;dbname=test_db;charset=utf8mb4″)连接,并设置异常模式等选项;MySQLi…

    2025年12月12日
    000
  • phpstorm配置php环境的本地Web服务器搭建

    首先安装本地PHP环境如XAMPP,再在PhpStorm中配置PHP解释器路径;接着设置服务器映射,添加localhost并配置路径映射;然后通过右键文件在浏览器预览,确保URL正确;最后可选PHP内置服务器进行快速测试。关键在于路径映射需与实际URL一致,确保调试正常。 在使用 PhpStorm …

    2025年12月12日
    000
  • php网站怎么测试_PHP网站测试方法与注意事项

    测试PHP网站需从功能、性能、安全和兼容性入手。1. 功能测试:验证表单提交、数据库CRUD操作、页面跳转链接及会话Cookie管理是否正常。2. 安全测试:重点防范SQL注入(使用PDO预处理)、XSS攻击(htmlspecialchars转义)、文件上传风险(限制类型与执行权限)和CSRF攻击(…

    2025年12月12日
    000
  • PHP PDO UPDATE语句常见陷阱:SET子句中AND与,的正确使用

    本文深入探讨了php pdo `update`语句中一个常见的语法错误:在`set`子句中使用`and`而非逗号`,`来分隔多个字段赋值。此错误可能导致`execute()`方法返回`true`但数据库未实际更新的假象。文章将详细解析正确的sql `update`语法、解释pdo为何在这种情况下可能…

    2025年12月12日
    000
  • PHP代码如何连接MySQL数据库_PHP连接MySQL的PDO与mysqli方法

    PHP连接MySQL主要使用PDO和MySQLi两种方式。PDO支持多数据库,语法简洁,便于移植;MySQLi专用于MySQL,功能更丰富,性能略优。两者均支持预处理语句防SQL注入、设置字符集及异常处理,推荐根据是否需数据库兼容性选择:跨数据库选PDO,仅用MySQL可选MySQLi。 PHP连接…

    2025年12月12日
    000
  • PHP实时输出如何避免内存溢出_PHP实时输出内存管理优化

    使用输出缓冲控制、逐行处理数据、限制内存与及时释放变量可有效避免PHP实时输出内存溢出。 PHP 实时输出主要用于处理大量数据或长时间运行的任务时,防止脚本占用过多内存导致崩溃。关键在于及时将内容发送到客户端并释放内存。以下是几种有效避免内存溢出的实时输出优化策略。 使用输出缓冲控制(ob_star…

    2025年12月12日
    000
  • PHP数据备份函数_PHP数据库备份与文件压缩实现步骤

    答案:通过PHP实现数据库备份与压缩需先导出表结构和数据为SQL文件,再用gzip或ZipArchive压缩,最后结合cron定时执行并确保备份文件存储安全、定期验证。 在Web开发中,数据安全至关重要。PHP常用于动态网站和后台系统开发,配合MySQL等数据库使用广泛。定期进行数据库备份并压缩成文…

    2025年12月12日
    000

发表回复

登录后才能评论
关注微信