MySQLTuner是一个用Perl编写的脚本,帮助你提高MySQL性能及稳定性。它通过检索当前配置变量和状态数据,提供一些基本性能建议。
数据库调优是一个广泛的主题,本教程仅介绍编辑MySQL配置的基础知识。大型MySQL数据库可能需要大量内存。因此,我们建议使用高内存CVM进行此类设置。
注意 一台已经设置好可以使用
sudo
命令的非root账号的服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费**的腾讯云开发者实验室进行试验,学会安装后在购买服务器。
为了确定您的MySQL数据库是否需要重新配置,最好先查看资源的执行情况。这可以使用top命令或腾讯云云监控。至少,您应该熟悉服务器的RAM和CPU使用情况,可以使用以下命令找到它们:
echo [PID] [MEM] [PATH] && ps aux | awk '{print $2, $4, $11}' | sort -k2rn | head -n 20
ps -eo pcpu,pid,user,args | sort -k 1 -r | head -20
MySQLTuner脚本将会评估你的MySQL,然后输出为提高服务器的性能和稳定性的建议。
下载并运行MySQLTuner:
curl -L http://mysqltuner.pl/ | perl
它会输出相关的结果:
>> MySQLTuner 1.4.0 - Major Hayden <major@mhtx.net>
>> Bug reports, feature requests, and downloads at http://mysqltuner.com/
>> Run with '--help' for additional options and output filtering
Please enter your MySQL administrative login: root
Please enter your MySQL administrative password:
[OK] Currently running supported MySQL version 5.5.41-0+wheezy1
[OK] Operating on 64-bit architecture
-------- Storage Engine Statistics -------------------------------------------
[--] Status: +ARCHIVE +BLACKHOLE +CSV -FEDERATED +InnoDB +MRG_MYISAM
[--] Data in InnoDB tables: 1M (Tables: 11)
[--] Data in PERFORMANCE_SCHEMA tables: 0B (Tables: 17)
[!!] Total fragmented tables: 11
-------- Security Recommendations -------------------------------------------
[OK] All database users have passwords assigned
-------- Performance Metrics -------------------------------------------------
[--] Up for: 47s (113 q [2.404 qps], 42 conn, TX: 19K, RX: 7K)
[--] Reads / Writes: 100% / 0%
[--] Total buffers: 192.0M global + 2.7M per thread (151 max threads)
[OK] Maximum possible memory usage: 597.8M (60% of installed RAM)
[OK] Slow queries: 0% (0/113)
[OK] Highest usage of available connections: 0% (1/151)
[OK] Key buffer size / total MyISAM indexes: 16.0M/99.0K
[!!] Query cache efficiency: 0.0% (0 cached / 71 selects)
[OK] Query cache prunes per day: 0
[OK] Temporary tables created on disk: 25% (54 on disk / 213 total)
[OK] Thread cache hit rate: 97% (1 created / 42 connections)
[OK] Table cache hit rate: 24% (52 open / 215 opened)
[OK] Open file limit used: 4% (48/1K)
[OK] Table locks acquired immediately: 100% (62 immediate / 62 locks)
[OK] InnoDB buffer pool / data size: 128.0M/1.2M
[OK] InnoDB log waits: 0
-------- Recommendations -----------------------------------------------------
General recommendations:
Run OPTIMIZE TABLE to defragment tables for better performance
Enable the slow query log to troubleshoot bad queries
Variables to adjust:
query_cache_limit (> 1M, or use smaller result sets)
MySQLTuner会提供有关如何提高数据库性能的建议。如果您对自己更新数据库持谨慎态度,那么遵循MySQLTuner的建议是提高数据库性能的更安全的方法之一。
更改MySQL配置时,请注意更改及其对数据库的影响。即使遵循MySQLTuner等程序的指令,也最好对该过程有一些了解。
您要更改的文件位于/etc/mysql/my.cnf
。
注意 在更新MySQL配置之前,请创建
my.cnf
文件的备份: cp /etc/mysql/my.cnf ~/my.cnf.backup 建议您一次进行一次小的更改,然后在每次更改后监视服务器。您应该在每次更改后重新启动MySQL: 对于systemd的系统: systemctl restart mysqld 对于不使用systemd的发行版: service mysql restart
假设你内存不足,更改key_buffer
会为MySQL分配更多内存,这可以大大加速你的数据库。在使用MyISAM表的引擎时,key_buffer
大小一般应占用的系统内存不超过25%,而InnoDB占用高达70%。如果该值设置得太高,则会浪费资源。
根据MySQL的文档,对于具有256MB(或更多)RAM和多表的服务器,建议设置为64M。具有128MB RAM和更少表的服务器可以设置为默认值16M。资源和表格更少的网站可以将此值设置得更低。
此参数允许您设置可发送数据包的最大大小。数据包是单个SQL状态,单个行发送到客户端,或者是从主服务器发送到从服务器的日志。如果您知道您的MySQL服务器将要处理大数据包,最好将其增加到最大数据包的大小。如果此值设置得太小,您将在错误日志中收到错误。
该值包含每个线程的堆栈大小。MySQL认为thread_stack
变量的默认值足以正常使用; 但是,如果thread_stack
记录有关的错误,可以增加。
如果thread_cache_size
“关闭”(设置为0),则所有正在建立的新连接都需要为其创建新线程。当连接断开时,线程被破坏。否则,此值设置要在缓存中存储的未使用线程的数量,直到它们需要用于连接。通常,此设置对性能几乎没有影响,除非您每分钟接收数百个连接,此时应该增加此值,以便可以在缓存的线程上进行大多数连接。
此参数设置最大并发连接数。在设置此数字之前,最好考虑过去的最大连接数,因此您将在该较大数字和max_connections
值之间有一个缓冲区。请注意,这并不表示您网站上的最大用户数量; 而是显示同时发出请求的最大用户数。
该值应保持高于您的open_tables
值。要确定此值,请使用:
SHOW STATUS LIKE 'open%';
有关此主题的其他信息,您可能需要参考以下资源。虽然提供这些是希望它们有用,但请注意,我们无法保证外部托管材料的准确性或及时性。
自建服务器难免会遇到这样的问题,但是如果您在生产环境使用,我还是建议您直接使用云关系型数据库,云关系型数据库让您在云中轻松部署、管理和扩展的关系型数据库,提供安全可靠、伸缩灵活的按需云数据库服务。腾讯云关系型数据库提供 MySQL、SQL Server、MariaDB、PostgreSQL 数据库引擎,并针对数据库引擎的性能进行了优化。云关系型数据库是一种高度可用的托管服务,提供容灾、备份、恢复、监控、迁移等数据库运维全套解决方案,可将您从耗时的数据库管理任务中解放出来,让您有更多时间专注于您的应用和业务。更多Linux教程请前往腾讯云+社区学习更多知识。
参考文献:《How to Optimize MySQL Performance Using MySQLTuner》
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。