大型 Magento 的 MySql 配置

标签 mysql magento database-administration mysqltuner

下面是 mysqltuner 的报告,最后我写了服务器统计信息和实际问题。

性能指标

[--] 持续时间:2d 14h 28m 52s (59M q [266.240 qps], 96K conn, TX: 114G, RX: 16G)

[--] 读取/写入:18%/82%

[--] 二进制日志被禁用

[--] 物理内存:125.9G

[--] MySQL 最大内存:381.5G

[--] 其他进程内存:308.9M

[--] 总缓冲区:59.2G 全局 + 66.0M 每个线程(最大 5000 个线程)

[--] P_S 最大内存使用量:72B

[--] Galera GCache 最大内存使用量:0B

[OK] 达到的最大内存使用量:61.3G(已安装 RAM 的 48.69%)

[!!] 最大可能的内存使用量:381.5G(已安装 RAM 的 302.98%)

[!!] 其他进程的总体内存使用量超出内存

[OK] 慢查询:0% (171/59M)

[OK] 可用连接的最高使用率:0% (32/5000)

[OK] 中止的连接:0.00% (1/96766)

[!!] 由于互斥量争用,查询缓存可能默认被禁用。

[OK]查询缓存效率:88.5%(34M缓存/39M选择)

[OK] 每天查询缓存修剪次数:0

[OK] 需要临时表的排序:0%(264 临时排序/276K 排序)

[!!] 不使用索引执行的连接:13649

[OK] 在磁盘上创建的临时表:3%(磁盘上 23K/总共 641K)

[OK] 线程缓存命中率:99%(32 创建/96K 连接)

[OK] 表缓存命中率:70%(7K 打开/10K 打开)

[OK] 使用的打开文件限制:0% (124/1M)

[OK] 立即获取表锁:100%(1K 立即/1K 锁)
MyISAM 指标

[!!] 使用的 key 缓冲区:18.1%(已使用 27M/150M 缓存)

[!!] key 缓冲区大小/MyISAM 索引总数:144.0M/147.8M

[!!] 读取键缓冲区命中率:86.8%(38 次缓存/5 次读取)

InnoDB 指标

[--] InnoDB 已启用。

[--] InnoDB 线程并发:16

[OK] 每个表的 InnoDB 文件被激活

[OK] InnoDB 缓冲池/数据大小:56.0G/8.5G

[!!] 比率 InnoDB 日志文件大小/InnoDB 缓冲池大小 (2.67857142857143 %): 768.0M * 2/56.0G 应该等于 25%

[!!] InnoDB 缓冲池实例:32

[--] InnoDB 缓冲池 block 的数量:448 个,用于 32 个缓冲池实例

[OK] Innodb_buffer_pool_size 与 Innodb_buffer_pool_chunk_size & Innodb_buffer_pool_instances 对齐

[OK] InnoDB 读取缓冲区效率:100.00%(13238376177 hits/13238716229 total)

[OK] InnoDB 写日志效率:99.46%(175848562 hits/176798170 total)

[OK] InnoDB 日志等待:0.00%(0 次等待/949608 次写入)

General recommendations:
Control warning line(s) into /my/path/to/log/mysql-error.log file
Control error line(s) into /my/path/to/log/mysql-error.log file
Reduce your overall MySQL memory footprint for system stability
Dedicate this server to your database for highest performance.
Adjust your join queries to always utilize indexes

要调整的变量:

MySQL 的最大内存使用量非常高

在增加 MySQL 缓冲区变量之前添加 RAM

query_cache_size (=0)

query_cache_type (=0)

join_buffer_size (> 16.0M, 或者总是使用带连接的索引)

key_buffer_size (> 147.8M)

innodb_log_file_size * 如果可能的话,innodb_log_files_in_group 应该等于缓冲池大小的 1/4 (=28G)。

innodb_buffer_pool_instances(=56)

系统配置
  • Ubuntu 16.04.5 LTS
  • mysql版本:5.7.22

  • 我正在使用带有一个网站、3 家商店和 100k 种产品的 magento 1.9.3.4,大约有 1700 个类别。

    除了上面的 MySQL 建议之外,我注意到的另一件事是,当我在浏览器中加载类别时,mysql 消耗了 40-50% 的 CPU 使用率。

    如果有人可以根据我的 RAM 配置最合适的 mysql 配置,那将不胜感激。

    另外请记住,由于我们有 100k+ 产品,速度是主要问题,因此 mysql 配置的任何更改都不应消耗速度,相反,如果它有助于提高速度,那将是前进的好方法。

    谢谢。

    最佳答案

    对您的 my.cnf [mysqld] 部分的建议

    thread_cache_size=64  # from 32 to expand capacity
    innodb_lru_scan_depth=100  # from 1024 to conserve 90% of CPU cycles used for function every second
    

    免责声明:我是我的个人资料中提到的网站的内容作者,网络个人资料我们有可下载的免费实用程序脚本来协助性能调整和联系信息。

    关于大型 Magento 的 MySql 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51555441/

    相关文章:

    MySQL:具有自定义分层功能的 GROUP BY

    database - 删除跟踪文件的影响?

    mysql - 修改密码后无法登录mysql 5.7.9

    sql - ORA-00942 : table or view does not exist ( on another schema on same DB )

    css - Magento 中的下拉菜单悬挂得太低并在嘴巴移动时消失

    c# - Azure - ASP.NET MVC 连接到 mysql 数据库

    mysql - 根据MySQL中的多列获取最大行

    mysql - 程序MySql

    magento - magento如何调用这个注释方法

    magento - Magento将运输税添加到税收明细和总计中