我正在寻求一些帮助来切换我的 MYSQL 服务器。我在 64 GB 高端处理器服务器上运行 5.7 MYSQL 服务器(上面没有其他任何东西),我无法设置配置以使用所有可用资源。
首先,我知道我应该尽快复制服务器并拥有从属/主 Mysql - 我会在我充分利用我的第一个服务器后立即这样做。我还花了数周时间优化查询和不同的缓存(apache 端)以限制查询量。现在我需要进行一些配置以使其更好。
情况是:我有大量流量和大量查询 - mysql 似乎无法再处理它们。我目前以每秒 700 次选择的速度运行(只有 20 次更新和 30 次插入)(我的网站和 apache 以 3k 个同时连接运行)。我首先想到的是 MaxClients,我将其设置为 250;但是我注意到我从未有过超过 7 个同时的“连接”(MysqlWorkbench 表示)。我尝试理解“性能报告”告诉我的事情,但我没有发现任何奇怪的数字。这就是我需要你的帮助的原因。
这是我为 MYSQL 做的当前配置:
max_connections = 250
query_cache_type=1
key_buffer_size=128M
query_cache_size=64M
back_log=100
query_prealloc_size=32K
sort_buffer_size=16M
read_buffer_size=2M
read_rnd_buffer_size=4M
key_cache_age_threshold=3000
key_cache_division_limit=50
memlock=1
max_connect_errors=999999
max_allowed_packet=1M
我还更改了 Ubuntu 的 somaxcon 配置。有人能帮我将 MYSQL 服务器限制到更高的上限吗?因为目前我的处理器只有 10%,RAM 为 64GB 中的 6GB,MYSQL 正在拖慢我的网站/API(流量太大)。什么是“完美”的配置(我知道它不存在)。
哦,我确信问题出在那台服务器上;如果我切断所有 MYSQL 连接,只使用 Mongo/Redis 连接(每个服务都在不同的服务器上运行),一切都会顺利运行。
请帮忙,我快抓狂了。如果您需要 MysqlWorkbench 的任何屏幕截图,请告诉我。
答案1
我想到两件事:
- 您的活动数据集大小是多少、您的是多少
innodb-buffer-pool-size
以及您磁盘的当前队列深度是多少?
原因就是这个评论Because currently my Processors are only at 10% and my RAM at 6GB out of 64
——你显然有更多的内存可以投入其中,如果你不断地调用磁盘,那将极大地影响性能。
- 不要尝试随机的建议——而是获取数据。
我们使用 Percona 监控和管理,这是一款免费的 OSS 工具,用于深入研究我们的数据库性能并诊断瓶颈。它涵盖查询性能和索引使用情况,以及硬件利用率。还有很多其他工具,但正如您所说,盲目猜测没有灵丹妙药 - 我们只是盲目猜测以试图提供帮助。数据会为您提供灵丹妙药。
答案2
有很多事情可以做来提高数据库性能。我首先讲几件事:
- 您可以尝试增加query_cache_size。
- 在常用表上创建索引
答案3
看这里 https://secure.php.net/manual/en/mysqli.persistconns.php
与 mysql 扩展不同,mysqli 不提供用于打开持久连接的单独函数。要打开持久连接,必须在连接时将 p: 添加到主机名前面。
我很好奇你的基准现在会显示什么。
答案4
针对 my.cnf-ini [mysqld] 部分的建议
以 # 开头来禁用或删除以下内容,以允许默认设置为您工作。
. 排序缓冲区大小 . 读取缓冲区大小 . 读取rnd缓冲区大小
要更改或添加到 my.cnf-ini 的附加行
max_connect_errors=10 # from 999999 to make Hackers/Crackers life miserable
。为什么要给他们超过 10 次猜测密码的机会?
这些会有所帮助。