背后的原因是,在更新过程中线程需要锁定缓存。通常设置为 200-300 MB应该足够了。如果你的网站比较小的,你可以尝试给 64M 并在以后及时去增加。
在你的 MySQL 配置文件中添加以下设置:
query_cache_type =1
query_cache_limit =256K
query_cache_min_res_unit =2k
query_cache_size =80M
9. 配置临时表容量和内存表最大容量tmp_table_size 和 max_heap_table_size 这两个变量的大小应该相同,它们可以让你避免磁盘写入。tmp_table_size 是内置内存表的最大空间。如果表的大小超出限值将会被转换为磁盘上的 MyISAM 表。
这会影响数据库的性能。管理员通常建议在服务器上设置这两个值为每 GB 内存给 64M。
[mysqld]
tmp_table_size=64M
max_heap_table_size=64M
10. 启用 MySQL 慢查询日志记录慢查询可以帮助你定位数据库中的问题并帮助你调试。这可以通过在你的 MySQL 配置文件中添加以下值来启用:
slow-query-log =1
slow-query-log-file =/var/lib/mysql/mysql-slow.log
long_query_time =1
第一个变量启用慢查询日志,第二个告诉 MySQL 实际的日志文件存储位置。使用 long_query_time 来定义完成 MySQL 查询多少用时算长。
11. 检查 MySQL 的空闲连接空闲连接会消耗资源,可以的话应该被终止或者刷新。空闲连接是指处于 “sleep” 状态并且保持了很长一段时间的连接。你可以通过运行以下命令查看空闲连接:
# mysqladmin processlist -u root -p | grep “Sleep”
这会显示处于睡眠状态的进程列表。当代码使用持久连接到数据库时会出现这种情况。使用 PHP 调用 mysql_pconnect 可以打开这个连接,执行完查询之后,删除认证信息并保持连接为打开状态。这会导致每个线程的缓冲都被保存在内存中,直到该线程结束。
首先你要做的就是检查代码问题并修复它。如果你不能访问正在运行的代码,你可以修改 wait_timeout 变量。默认值是 28800 秒,而你可以安全地将其降低到 60 :
wait_timeout=60
12. 为 MySQL 选择正确的文件系统选择正确的文件系统对数据库至关重要。在这里你需要考虑的最重要的事情是 - 数据的完整性,性能和易管理性。
按照 MariaDB 的建议,最好的文件系统是XFS、ext4 和 Btrfs。它们都是可以使用超大文件和大容量存储卷的企业级日志型文件系统。
下面你可以找到一些关于这三个文件系统的有用信息:
文件系统XFSExt4Btrfs文件系统最大容量 8EB 1EB 16EB
最大文件大小 8EB 16TB 16EB
我们的这篇文章详细介绍了 Linux 文件系统的利与弊: Linux 文件系统解析。
13. 设置 MySQL 允许的最大数据包MySQL 把数据拆分成包。通常一个包就是发送到客户端的一行数据。max_allowed_packet 变量定义了可以被发送的最大的包。
此值设置得过低可能会导致查询速度变得非常慢,然后你会在 MySQL 的错误日志看到一个错误。建议将该值设置为最大包的大小。
14. 测试 MySQL 的性能优化你应该定期检查 MySQL/MariaDB 的性能。这将帮助你了解资源的使用情况是否发生了改变或需要进行改进。
有大量的测试工具可用,但我推荐你一个简单易用的。该工具被称为 mysqltuner。
使用下面的命令下载并运行它:
# wget https://github.com/major/MySQLTuner-perl/tarball/master
# tar xf master
# cd major-MySQLTuner-perl-993bc18/
# ./mysqltuner.pl
你将收到有关 MySQL 使用的详细报告和推荐提示。下面是默认 MariaDB 安装的输出样例:
MySQL 性能优化
15. 优化和修复 MySQL 数据库