MySQL 服务器进行调优的“窍门” |
本文标签:MySQL 服务器 以下的文章主要介绍的是对MySQL 服务器进行调优的实际操作步骤,以下就是MySQL 服务器进行调优的实际操作步骤解决方案,希望会给你带来一些帮助在此方面 。以下就是文章的具体内容描述 。 如今,开发人员不断地开发和部署使用 LAMP(Linux®、apache(Unix平台最流行的WEB服务器平台)、MySQL(和PHP搭配之最佳组合) 和 PHP/Perl)架构的应用程序 。但是,服务器管理员常常对应用程序本身没有什么控制能力,因为应用程序是别人编写的 。这份 共三部分的系列文章 将讨论许多MySQL 服务器配置问题,这些配置会影响应用程序的性能 。 本文是本系列文章的第三部分,也是最后一部分,将重点讨论为实现最高效率而对数据库层进行的调 优 。
关于 MySQL(和PHP搭配之最佳组合) 调优
有 3 种方法可以加快 MySQL(和PHP搭配之最佳组合) 服务器的运行速度,效率从低到高依次为: 替换有问题的硬件 。 对 MySQL(和PHP搭配之最佳组合) 进程的设置进行调优 。 对查询进行优化 。 替换有问题的硬件通常是我们的第一考虑,主要原因是数据库会占用大量资源 。不过这种解决方案也就仅限于此了 。实际上,您通常可以让中央处理器(CPU)或磁盘速度加倍,也可以让内存增大 4 到 8 倍 。
第二种方法是对 MySQL(和PHP搭配之最佳组合) 服务器(也称为 MySQL(和PHP搭配之最佳组合)d)进行调优 。对这个进程进行调优意味着适当地分配内存,并让 MySQL(和PHP搭配之最佳组合)d 了解将会承受何种类型的负载 。加快磁盘运行速度不如减少所需的磁盘访问次数 。类似地,确保 MySQL(和PHP搭配之最佳组合) 进程正确操作就意味着它花费在服务查询上的时间要多于花费在处理后台任务(如处理临时磁盘表或打开和关闭文件)上的时间 。对 MySQL(和PHP搭配之最佳组合)d 进行调优是本文的重点 。 最好的方法是确保查询已经进行了优化 。这意味着对表应用了适当的索引,查询是按照可以充分利用 MySQL(和PHP搭配之最佳组合) 功能的方式来编写的 。尽管本文并没有包含查询调优方面的内容(很多着作中已经针对这个主题进行了探讨),不过它会配置 MySQL(和PHP搭配之最佳组合)d 来报告可能需要进行调优的查询 。 虽然已经为这些任务指派了次序,但是仍然要注意硬件和 MySQL(和PHP搭配之最佳组合)d 的设置以利于适当地调优查询 。机器速度慢也就罢了,我曾经见过速度很快的机器在运行设计良好的查询时由于负载过重而失败,因为 MySQL(和PHP搭配之最佳组合)d 被大量繁忙的工作所占用而不能服务查询 。 记录慢速查询 在一个 SQL 服务器中,数据表都是保存在磁盘上的 。索引为服务器提供了一种在表中查找特定数据行的方法,而不用搜索整个表 。当必须要搜索整个表时,就称为表扫描 。通常来说,您可能只希望获得表中数据的一个子集,因此全表扫描会浪费大量的磁盘 I/O,因此也就会浪费大量时间 。当必须对数据进行连接时,这个问题就更加复杂了,因为必须要对连接两端的多行数据进行比较 。 当然,表扫描并不总是会带来问题;有时读取整个表反而会比从中挑选出一部分数据更加有效(MySQL 服务器进程中查询规划器用来作出这些决定) 。如果索引的使 用效率很低,或者根本就不能使用索引,则会减慢查询速度,而且随着服务器上的负载和表大小的增加,这个问题会变得更加显着 。执行时间超过给定时间范围的查 询就称为慢速查询 。 您可以配置 MySQL(和PHP搭配之最佳组合)d 将这些慢速查询记录到适当命名的慢速查询日志中 。管理员然后会查看这个日志来帮助他们确定应用程序中有哪些部分需要进一步调查 。清单 1 给出了要启用慢速查询日志需要在 my.cnf 中所做的配置 。 清单 1. 启用 MySQL(和PHP搭配之最佳组合) 慢速查询日志
这三个设置一起使用,可以记录执行时间超过 5 秒和没有使用索引的查询 。请注意有关 log-queries-not-using-indexes 的警告:您必须使用 MySQL(和PHP搭配之最佳组合) 4.1 或更高版本 。慢速查询日志都保存在 MySQL(和PHP搭配之最佳组合) 数据目录中,名为 hostname-slow.log 。如果希望使用一个不同的名字或路径,可以在 my.cnf 中使用 log-slow-queries = /new/path/to/file 实现此目的 。
阅读慢速查询日志最好是通过 MySQL(和PHP搭配之最佳组合)dumpslow 命令进行 。指定日志文件的路径,就可以看到一个慢速查询的排序后的列表,并且还显示了它们在日志文件中出现的次数 。一个非常有用的特性是 MySQL(和PHP搭配之最佳组合)dumpslow 在比较结果之前,会删除任何用户指定的数据,因此对同一个查询的不同调用被计为一次;这可以帮助找出需要工作量最多的查询 。
以上的相关内容就是对MySQL 服务器进行调优的部分内容介绍,望你能有所收获 。 |