【问题标题】:MySQL my.cnf performance tuning recommendations [closed]MySQL my.cnf 性能调优建议 [关闭]
【发布时间】:2020-04-03 17:31:29
【问题描述】:

我有点希望有人可以提供一些帮助,为超大容量 mysql 数据库服务器优化 my.cnf 文件。

Our architecture is as follows:

Memory     : 96GB
CPUs       : 12
OS & Mysql : 64-bit
Disk Space : 1.2 TB
DB Engine  : MyISAM

我们的网络应用程序同时被大约 300 个客户使用。我们需要对 my.cnf 进行调整,以便为该基础架构提供最佳性能。

我完全知道索引和优化查询是其中的一个主要因素,但我们希望从一个配置正确的系统开始,然后相应地系统地重新设计我们的查询。

Here is our current my.cnf file content:

[mysqld]
datadir=/home/mysql
socket=/home/mysql/mysql.sock
user=mysql

log-bin=mysql-bin
server-id=1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=1

log-slow-queries = /var/log/mysqld_slow_queries.log
long_query_time = 10

max_connections = 500

key_buffer_size = 32768M
#max_allowed_packet = 2M
#table_open_cache = 128
#sort_buffer_size = 1024K
#net_buffer_length = 64K
#read_buffer_size = 1024K
#read_rnd_buffer_size = 1024K
#myisam_sort_buffer_size = 8M
query_cache_size = 128M
query_cache_limit = 128M

interactive_timeout = 300
wait_timeout = 300

# Added values after load testing
thread_cache_size = 8
#tmp_table_size = 256M
#max_heap_table_size = 256M
#table_cache = 512
#join_buffer_size = 512

log-error=/var/log/mysqld.log

innodb_buffer_pool_size=128M
#innodb_file_per_table
#innodb_log_file_size=250M
##innodb_buffer_pool_size=64M
#innodb_buffer_pool_size=1024M
#innodb_log_buffer_size=4M
##log-bin=mysql-bin

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

#[myisamchk]
#key_buffer = 64M
#sort_buffer = 64M
#read_buffer = 16M
#write_buffer = 16M

有什么建议吗? 谢谢各位。

由 RolandoMySQLDBA 编辑

由于所有数据都是 MyISAM,请运行此查询并显示输出

SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.4999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1))
recommended_key_buffer_size FROM
(SELECT LEAST(POWER(2,32),KBS1) KBS
FROM (SELECT SUM(index_length) KBS1
FROM information_schema.tables
WHERE engine='MyISAM' AND
table_schema NOT IN ('information_schema','mysql')) AA ) A,
(SELECT 3 PowerOf1024) B;

@ Rolando - 谢谢...查询的结果是 4G。

【问题讨论】:

  • 根据您当前的设置,您是否遇到了特定的缓慢?
  • 对于只有 300 个 Web 用户来说,这是一台相当不错的机器,如果这只是一个 DB 服务器更是如此。这是 Windows 还是 Linux?无论哪种方式,我通常建议为 OS/Swap 和数据卷(datadir 所在的位置)使用单独的磁盘/LUN。远离软件突袭等。有一个名为“mk-query-advisor”的工具可以帮助您调整此设置。除非您的“前端”应用程序正在做“正确的事情”(缓存静态数据,仅在需要时查询等),否则调整可能不会为您带来太多收益。
  • 您还可以添加一个维护脚本(当然是在备份之后),每周调用“OPTIMIZE TABLE tbl_name”来帮助保持优化。还研究分区大表等。
  • 我也会检查查询日志。如果您有 300 个同时存在的 Web 用户会导致多种类型的“从 [大型查找表] 中选择 [某些通用数据]”;这是前端 Web 应用程序要做的优化(数据缓存)。只是说';-)
  • 系统是一个 linux 虚拟机。我们似乎正在经历的缓慢部分是由于第三方编写的一些设计非常糟糕的查询。其次,Web 服务器(也是 linux)通过 php 连接与该服务器相关联。今天,我们已经在几个实例上最大化了我们的连接,当使用连接执行查询时,它往往会阻止客户端执行正常的基于 Web 的操作。我们在 Web 服务器上运行这个 mysql 服务器,它是 32 位的。

标签: mysql optimization performance my.cnf


【解决方案1】:

尝试从 Percona 向导开始,并将他们的建议与您当前的设置一一进行比较。不用担心没有您想象的那么多适用的设置。

https://tools.percona.com/wizard

大约 2020 年更新:抱歉,此工具已达到使用寿命:https://www.percona.com/blog/2019/04/22/end-of-life-query-analyzer-and-mysql-configuration-generator/

每个人都首先指向key_buffer_size,这是您已解决的问题。对于 96GB 内存,我会警惕任何微小的默认值(可能只有 96M!)。

【讨论】:

  • 感谢 KCD!我确实去了那里,并会尝试他们推荐的设置。非常感谢!
  • 没问题。这些结果中的任何一个与您的结果有很大不同吗?
  • 是的...相当多的变化。刚刚使用它们重新启动了服务器。我们将不得不等待,看看明天一个完整的生产日会产生什么。使用他的系统充满了 crons 和客户服务代表。
  • 很想知道这是怎么回事。我尝试使用 Percona 推荐的设置调整我们的服务器,但没有发现明显的改进。
  • 该链接现在指向 Percona Toolkit,看来他们已停止使用该向导:percona.com/blog/2019/04/22/…
【解决方案2】:

我试过这个工具,结果很好。

https://github.com/major/MySQLTuner-perl

【讨论】:

    猜你喜欢
    • 2020-06-12
    • 2010-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多