首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何使用MySQLTuner优化MySQL性能

如何使用MySQLTuner优化MySQL性能

原创
作者头像
心语花束
发布2018-08-15 11:31:44
1.7K0
发布2018-08-15 11:31:44
举报

MySQLTuner是一个用Perl编写的脚本,帮助你提高MySQL性能及稳定性。它通过检索当前配置变量和状态数据,提供一些基本性能建议。

数据库调优是一个广泛的主题,本教程仅介绍编辑MySQL配置的基础知识。大型MySQL数据库可能需要大量内存。因此,我们建议使用高内存CVM进行此类设置。

注意 一台已经设置好可以使用sudo命令的非root账号的服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费**的腾讯云开发者实验室进行试验,学会安装后在购买服务器

可以帮助优化MySQL 工具

为了确定您的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

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

更改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

假设你内存不足,更改key_buffer会为MySQL分配更多内存,这可以大大加速你的数据库。在使用MyISAM表的引擎时,key_buffer大小一般应占用的系统内存不超过25%,而InnoDB占用高达70%。如果该值设置得太高,则会浪费资源。

根据MySQL的文档,对于具有256MB(或更多)RAM和多表的服务器,建议设置为64M。具有128MB RAM和更少表的服务器可以设置为默认值16M。资源和表格更少的网站可以将此值设置得更低。

max_allowed_packet

此参数允许您设置可发送数据包的最大大小。数据包是单个SQL状态,单个行发送到客户端,或者是从主服务器发送到从服务器的日志。如果您知道您的MySQL服务器将要处理大数据包,最好将其增加到最大数据包的大小。如果此值设置得太小,您将在错误日志中收到错误。

thread_stack

该值包含每个线程的堆栈大小。MySQL认为thread_stack变量的默认值足以正常使用; 但是,如果thread_stack记录有关的错误,可以增加。

thread_cache_size

如果thread_cache_size“关闭”(设置为0),则所有正在建立的新连接都需要为其创建新线程。当连接断开时,线程被破坏。否则,此值设置要在缓存中存储的未使用线程的数量,直到它们需要用于连接。通常,此设置对性能几乎没有影响,除非您每分钟接收数百个连接,此时应该增加此值,以便可以在缓存的线程上进行大多数连接。

max_connections

此参数设置最大并发连接数。在设置此数字之前,最好考虑过去的最大连接数,因此您将在该较大数字和max_connections值之间有一个缓冲区。请注意,这并不表示您网站上的最大用户数量; 而是显示同时发出请求的最大用户数。

table_cache

该值应保持高于您的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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 可以帮助优化MySQL 工具
    • MySQLTuner
      • key_buffer
      • max_allowed_packet
      • thread_stack
      • thread_cache_size
      • max_connections
      • table_cache
  • 调整MySQL
  • 更多信息
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档