【问题标题】:When 777ms are still not good enough (MariaDB tuning)当 777ms 仍然不够好时(MariaDB 调优)
【发布时间】:2015-10-30 05:57:55
【问题描述】:

在过去的几个月里,我一直在疯狂优化我正在管理的 Joomla 网站。当我第一次启动时,尽管按照托管公司的建议,我反复升级了我的专用服务器,但主页通常会在 30-40 秒内打开。

通过认真遵循 GT Matrix 和 PingdomTools 之类的所有建议(例如使用 JCH 优化、.htaccess 缓存和压缩设置以及 MaxCDN),我能够将页面速度降低到 800 毫秒左右,但现在我我一直在优化我的 my.cnf 设置,尝试了许多相关文章中建议的各种设置。使用当前设置打开主页的最快速度是刷新后 777 毫秒,这听起来可能还不错,但请查看我的专用服务器的配置:

  • 2 Quads、128GB、2x480GB SSD RAID
  • CloudLinux/Cpanel/WHM
  • Apache/suEXEC/PHP5/FastCGI
  • MariaDB 10.0.17(所有表都转换为 XtraDB/InnoDB)

网站流量适中,每天有 10,000 和 20,000 名访问者,浏览量约为 200,000。

这些是当前的 my.cnf 设置。我的目标是将页面速度降低到 600 毫秒以下,只要调整方式正确,这种硬件应该可以做到这一点。

[mysqld]
local-infile=0
max_connections=10000
max_user_connections=1000
max_connect_errors=20
key_buffer_size=1G
join_buffer_size=1G
bulk_insert_buffer_size=1G
max_allowed_packet=1G
slow_query_log=1
slow_query_log_file="diskar/mysql-slow.log"
long_query_time=40
connect_timeout=120
wait_timeout=20
interfactive_timeout=25
back_log=500
query_cache_type=1
query_cache_size=512M
query_cache_limit=512K
query_cache_min_res_unit=2K
sort_buffer_size=1G
thread_cache_size=16
open_files_limit=10000
tmp_table_size=8G
thread_handling=pool-of-threads
thread_stack=512M
thread_pool_size=12
thread_pool_idle_timeout=500
thread_cache_size=1000
table_open_cache=52428
table_definition_cache=8192
default-storage-engine=InnoDB

[innodb]
memlock
innodb_buffer_pool_size=96G
innodb_buffer_pool_instances=12
innodb_additional_mem_pool_size=4G
innodb_log_bugger_size=1G
innodb_open_files=300
innodb_data_file_path=ibdata1:400M:autoextend
innodb_use_native_aio=1
innodb_doublewrite=0
innodb_user_atomic_writes=1
innodb_flus_log_at_trx_commit=2
innodb_compression_level=6
innodb_compression_algorithm=2
innodb_flus_method=O_DIRECT
innodb_log_file_size=4G
innodb_log_files_in_group=3
innodb_buffer_pool_instances=16
innodb_adaptive_hash_index_partitions=16
innodb_thread_concurrency
innodb_thread_concurrency=24
innodb_write_io_threads=24
innodb_read_io_threads=32
innodb_adaptive_flushing=1
innodb_flush_neighbors=0
innodb_io_capacity=20000
innodb_io_capacity_max=40000
innodb_lru_scan_depth=20000
innodb_purge_threads=1
innodb_randmon_read_ahead=1
innodb_read_io_threads=64
innodb_write_io_threads=64
innodb_use_fallocate=1
innodb_use_atomic_writes=1
inndb_use_trim=1
innodb_mtflush_threads=16
innodb_use_mfflush=1
innodb_file_per_table=1
innodb_file_format=Barracuda
innodb_fast_shutdown=1

我尝试了 Memcached 和 APCU,但没有成功。使用“文件”作为 Joomla 全局配置中的缓存处理程序,该站点的运行速度实际上快了 2-3 倍。是的,我运行了 my-sqltuner,但这无济于事。

就 Linux 而言,我是新手,并怀疑上述设置可以改进。有什么 cmets 和/或建议吗?

【问题讨论】:

  • 你为什么认为这是一个数据库问题?
  • mysql慢日志还报什么吗?是否有任何数据库查询需要很长时间?生成首页(或其他)需要多少查询 您是否针对 PHP 代码运行 Blackfire.io 或 Xhprof 分析器?它是否在 PHP 5.6 上安装了 Opcache?您实际上在数据库中有接近 100GB 的数据吗?
  • opcache 已安装。其余的我现阶段无法回答,所以我会调查,或者答案是否定的。我怀疑我是否可以对 php 代码做很多事情,因为我正在使用带有标准扩展的 Joomla,例如 Jomsocial 和 EasyDiscuss,它们对数据库的要求都很高。在这里发布这个的主要原因是我是my.cnf调优的新手,所以我怀疑我可能做错了什么。
  • Pingdom 工具统计 80 次主页请求,加载时间为 750 毫秒至 1.3 秒。

标签: performance mariadb my.cnf


【解决方案1】:
long_query_time=40

将其设置为 1,以便您了解慢查询是什么。

max_connections=10000

这是不合理的高。如果您靠近它,您将遇到比无法连接更多的问题。假设只有 3000 个。

query_cache_type=1
query_cache_size=512M

查询缓存过大会损害性能。这是因为 any 写入会导致表的 所有 QC 条目被清除。建议不超过50M。如果您的写入量很大,最好将类型更改为 DEMAND 并在您的 SELECTs 中添加 SQL_CACHE(对于相对静态的表)或 SQL_NO_CACHE(对于繁忙的表)。

什么操作系统?

[innodb] 中的条目是否进入系统?我认为这些需要在[mysqld] 中。通过SHOW VARIABLES LIKE 'innodb%'; 进行检查。

啊,臭虫们;拼写错误:

innodb_log_bugger_size=1G
innodb_flus_log_at_trx_commit=2
inndb_use_trim=1

还有更多??

在慢日志中获得一些数据后,运行 pt-query-digest,让我们讨论前几个查询。

【讨论】:

  • 我手动复制了 my.cnf 设置,因此出现了拼写错误。我将尝试进行一些建议的更改并删除 [innodb] 标头。我不知道 innodb 设置必须在 [mysqld] 标题下。我认为这些只是使文件更整洁的注释项。
  • 删除 [innodb] 行有很大的不同。 MySQL 服务(MariaDB)不再想启动,抱怨各种 InnoDB 设置。我最终将它们全部评论出来。我的网站实际上变得更快了,刷新后 756 毫秒,可能是因为我按照 Rick James 的建议进行了其他更改: - max_connections=3000 - query_cache_type=1 - query_cache_size=50M 我现在正在添加其他与 Innodb 相关的语句,一个一个,看看他们是否对速度有任何影响。
  • 可能对速度最重要的是:innodb_buffer_pool_size=96G, innodb_doublewrite=0, innodb_flush_log_at_trx_commit=2。
  • 你不能“调整你的方式来解决性能问题”,所以接下来要做的是查看查询,以及SHOW CREATE TABLE
猜你喜欢
  • 2019-05-03
  • 1970-01-01
  • 2014-05-31
  • 1970-01-01
  • 2013-03-23
  • 1970-01-01
  • 2023-03-27
  • 2021-02-03
  • 2014-10-18
相关资源
最近更新 更多