如何对MySQL服务器进行调优

  如今,开发人员不断地开发和部署使用LAMP(Linux?、Apache、MySQL 和 PHP/Perl)架构的应用程序。但是,服务器管理员常常对应用程序本身没有什么控制能力,因为应用程序是别人编写的。本文重点讨论为实现最高效率而对数据库层进行的调优。

  有3种方法可以加快MySQL服务器的运行速度,效率从低到高依次为:

  替换有问题的硬件。对MySQL进程的设置进行调优。对查询进行优化。

  替换有问题的硬件通常是我们的第一考虑,主要原因是数据库会占用大量资源。不过这种解决方案也就仅限于此了。实际上,您通常可以让中央处理器(CPU)或磁盘速度加倍,也可以让内存增大4到8倍。

  第二种方法是对MySQL服务器(也称为mysqld)进行调优。对这个进程进行调优意味着适当地分配内存,并让 mysqld 了解将会承受何种类型的负载。加快磁盘运行速度不如减少所需的磁盘访问次数。类似地,确保 MySQL 进程正确操作就意味着它花费在服务查询上的时间要多于花费在处理后台任务(如处理临时磁盘表或打开和关闭文件)上的时间。对mysqld进行调优是本文的重点。

  最好的方法是确保查询已经进行了优化。这意味着对表应用了适当的索引,查询是按照可以充分利用MySQL功能的方式来编写的。尽管本文并没有包含查询调优方面的内容(很多着作中已经针对这个主题进行了探讨),不过它会配置mysqld来报告可能需要进行调优的查询。

  虽然已经为这些任务指派了次序,但是仍然要注意硬件和mysqld的设置以利于适当地调优查询。机器速度慢也就罢了,我曾经见过速度很快的机器在运行设计良好的查询时由于负载过重而失败,因为mysqld被大量繁忙的工作所占用而不能服务查询。

  记录慢速查询

  在一个SQL服务器中,数据表都是保存在磁盘上的。索引为服务器提供了一种在表中查找特定数据行的方法,而不用搜索整个表。当必须要搜索整个表时,就称为表扫描。通常来说,您可能只希望获得表中数据的一个子集,因此全表扫描会浪费大量的磁盘I/O,因此也就会浪费大量时间。当必须对数据进行连接时,这个问题就更加复杂了,因为必须要对连接两端的多行数据进行比较。

  当然,表扫描并不总是会带来问题;有时读取整个表反而会比从中挑选出一部分数据更加有效(服务器进程中查询规划器用来作出这些决定)。如果索引的使 用效率很低,或者根本就不能使用索引,则会减慢查询速度,而且随着服务器上的负载和表大小的增加,这个问题会变得更加显着。执行时间超过给定时间范围的查询就称为慢速查询。

  您可以配置 mysqld 将这些慢速查询记录到适当命名的慢速查询日志中。管理员然后会查看这个日志来帮助他们确定应用程序中有哪些部分需要进一步调查。清单1给出了要启用慢速查询日志需要在my.cnf中所做的配置。

  清单1.启用MySQL慢速查询日志

  [mysqld]; enable the slow query log, default 10 secondslog-slow-queries; log queries taking longer than 5 secondslong_query_time = 5; log queries that don’t use indexes even if they take less than long_query_time; MySQL 4.1 and newer onlylog-queries-not-using-indexes

  这三个设置一起使用,可以记录执行时间超过5秒和没有使用索引的查询。请注意有关 log-queries-not-using-indexes 的警告:您必须使用 MySQL 4.1 或更高版本。慢速查询日志都保存在 MySQL 数据目录中,名为 hostname-slow.log。如果希望使用一个不同的名字或路径,可以在my.cnf中使用log-slow-queries = /new/path/to/file 实现此目的。

  阅读慢速查询日志最好是通过mysqldumpslow命令进行。指定日志文件的路径,就可以看到一个慢速查询的排序后的列表,并且还显示了它们在日志文件中出现的次数。一个非常有用的特性是mysqldumpslow在比较结果之前,会删除任何用户指定的数据,因此对同一个查询的不同调用被计为一次;这可以帮助找出需要工作量最多的查询

时间: 2025-01-21 10:32:17

如何对MySQL服务器进行调优的相关文章

Nginx下载服务生产服务器的调优

一.内存调优 内核关于内存的选项都在/proc/sys/vm目录下. 1.pdflush,用于回写内存中的脏数据到硬盘.可以通过 /proc/sys/vm/vm.dirty_background_ratio调整. 首先查看这个值默认应该是10. [root@esf ~]# cat /proc/sys/vm/dirty_background_ratio 10 这个值是一个阀值,说明如果内存中的脏数据达到系统总内存的10%时,那么pdflush进程就会启动,将内存中的脏数据写回硬盘.这个值可适当调高

5项优化4种高可用方案,MySQL常用架构调优这样做!

选择Percona Server.MariaDB还是MYSQL   1.Mysql三种存储引擎   MySQL提供了两种存储引擎:MyISAM和 InnoDB,MySQL4和5使用默认的MyISAM存储引擎.从MYSQL5.5开始,MySQL已将默认存储引擎从MyISAM更改为InnoDB.   MyISAM没有提供事务支持,而InnoDB提供了事务支持.   XtraDB是InnoDB存储引擎的增强版本,被设计用来更好的使用更新计算机硬件系统的性能,同时还包含有一些在高性能环境下的新特性.  

通用linux接口服务器参数调优

1. 如果需要支撑百万级同时在线数,需要对linux默认内核参数进行调整,我们的典型配置是在 /etc/sysctl.conf增加以下内容: net.ipv4.tcp_max_orphans = 262144 net.ipv4.tcp_no_metrics_save=1 net.ipv4.tcp_window_scaling = 0 net.ipv4.tcp_max_syn_backlog = 120000     net.core.netdev_max_backlog = 120000    

mysql服务器的几个调优技巧,让 MySQL 服务器飞速运行

关于 MySQL 调优 有 3 种方法可以加快 MySQL 服务器的运行速度,效率从低到高依次为: 替换有问题的硬件. 对 MySQL 进程的设置进行调优. 对查询进行优化. 替换有问题的硬件通常是我们的第一考虑,主要原因是数据库会占用大量资源.不过这种解决方案也就仅限于此了.实际上,您通常可以让中央处理器(CPU)或磁盘速度加倍,也可以让内存增大 4 到 8 倍. 第二种方法是对 MySQL 服务器(也称为 mysqld) 进行调优.对这个进程进行调优意味着适当地分配内存,并让 mysqld

Windows Server 2016进行性能调优?

微软已发布了官方Windows Server 2016性能调优指南.这是一个全面的指南,提供了一系列技术文章,其中包含对IT专业人员的指导,提供对负责部署,操作和调优Windows Server 2016最常见的服务器工作负载的指导. ▲ Windows Server 2016性能调优 Windows Server性能调优指南是微软提供的关键文档,以确保现场工程师(PFE,CSS等)具有调整和优化操作系统所需的规范信息. Windows Server 2016性能调优提示 通过考虑硬件,功率预算

linux io/系统/内存性能调优整理

 为什么要性能调优? 大部分的linux发行版是为了完全兼容市场中大部分计算机而设计的.这是一个相当混杂的硬件集合(硬盘,显卡,网卡,等等).所以Red Hat, Suse,Mandriva和其他的一些发行版厂商选择了一些保守的设置来确保安装成功. 简单地说:你的发行版运行的很好,但是它可以运行地更好! 比如,可能有一个具体一些特殊特性的高级硬盘,而这些特性在标准配置的情况下可能就没被启用. 磁盘子系统的调优 对于Linux的Ext3/4来说,几乎在所有情况下都有所帮助的一个参数是关闭文件系统访

数据库的优化与调优:从理论到实践

数据库的优化与调优:从理论到实践 网易杭研  何登成 –理论篇   从串行到并行   从畅通无阻到排队   必须了解的硬件知识 –实践篇   MySQL各版本的优化   MySQL使用中的调优 数据库的优化与调优:从理论到实践

LAMP系统性能调优之MySQL服务器调优

如今,开发人员不断地开发和部署使用LAMP(Linux.Apache.MySQL 和 PHP/Perl)架构的应用程序.但是,服务器管理员常常对应用程序本身没有什么控制能力,因为应用程序是别人编写的.本文重点讨论为实现最高效率而对数据库层进行的调优. 关于 MySQL 调优 有3 种方法可以加快 MySQL服务器的运行速度,效率从低到高依次为: 替换有问题的硬件. 对MySQL进程的设置进行调优. 对查询进行优化. 替换有问题的硬件通常是我们的第一考虑,主要原因是数据库会占用大量资源.不过这种解

调优-10万并发的服务器应该怎么构建?

问题描述 10万并发的服务器应该怎么构建? 求大神帮忙,公司老大说要我构建一个10万并发的服务器,小弟我是一窍不通阿,是不是应该从"应用服务器,应用程序,带宽,和数据库"来考虑?应用服务器怎么选以及调优,带宽要用多大(为什么),应用程序需要注意那些,数据库(mysql)调优注意那些东西?不知道我这样问对不对? 解决方案 首先要确认你的10w并发服务器,是长连接型的,如即时通讯:还是短连接型的,如网站? 如果是短连接型,首推仍然是线程池:因为这种情况下连接会很多.切换很快,所以没必要去维