MySQL维护 – 如何清除缓冲区?

我们有一个服务器运行我们的基于PHP / MySQL的Web应用程序,这是慢的。

我的前任说:

我们用来做数据库维护,用来清除缓冲区,caching和不需要的variables。

我想知道他说的是什么意思呢? 他是指一个简单的表优化? 还是查询caching? 我了解MySQL,但不知道他在描述什么。

我将不胜感激任何指针。

如果他们的维护操作是在正在运行的服务器上执行的,我只能想到一个“flush table”(从MySQL手册:closures所有打开的表,强制所有正在使用的表被closures,并刷新查询caching,FLUSH TABLES也会删除来自查询caching的所有查询结果)。

但也许他们只是重新启动服务器…

对于“慢”部分,假设你正在运行一个unix系统,你可以尝试使用mysql-tuning-primer或者mysqltuner.pl来获得一些关于你在服务器configuration中可以改变的线索

这是另外一个要考虑的事情:

如果大多数表是InnoDB,那么可以考虑在/etc/my.cnf中设置以下内容:

[mysqld] innodb_max_dirty_pages_pct=0; 

在MySQL 5.1和后面,默认是90;
在MySQL 5.5中,默认值是75;

将innodb_max_dirty_pages_pct设置为零(0)可将InnoDB数据页面从innodb缓冲池中最大程度地刷新到磁盘(最高达99.1%)。

如果不进行任何其他的调整,这也可以在存在InnoDB数据的情况下更快地closuresmysqld,因为mysqld在closures时刷新innodb缓冲池。

你可以实际设置它,而不需要重新启动mysql:

 mysql> SET GLOBAL innodb_max_dirty_pages_pct=0; 

我对这种涉及清除缓冲区的数据库维护的想法感到畏缩,以提高速度。 如果你的系统正在抓取,这是答案,我怀疑事情做得很好。

正确的方法是找出你的瓶颈是什么。 通常是磁盘(通常是内存分配不足的扩展)或CPU。

什么是你的数据库负载? 如果你不是,你应该使用InnoDB表吗? 查询是否有效写入?

“如何在负载下设置MySQL服务器”是一本很大的信息书。 首先假设一切都是错误的,并考虑让外人花一两个钟头看你。