我有一个mysql数据库,其中有多个表“InnoDB”,其中有数百万行。让我们说,大多数与表的交互都是简单的选择/插入语句。但我必须为统计目的制作一些内部关节。
我有两个服务器与主/从复制.主是只写和读从分离的查询手动不使用负载均衡器像ProxySQL...它的工作很好的简单查询.
服务器规格:
CPU : Intel Xeon E5-1630v3 - 4c/8t - 3.7 GHz/3.8 GHz
RAM : 64 GB ECC 2133 MHz
Latency between the two servers is 1ms (measured)
问题是当我运行统计模块时,我得到了99%的CPU使用率,查询需要很多时间。例如:1 INNER JOIN需要2或3秒(带索引),但当我启动很多时,它可能需要长达90秒。
很明显,我必须添加更多的服务器,并围绕负载均衡器构建一个体系结构。但在我深入研究之前,任何人都可以为我的情况建议一个工作解决方案。
先谢谢你了。
2条答案
按热度按时间iezvtpos1#
下面是一些提高你的表现的建议:
JOIN
中使用的列有适当的索引(my.cnf)
,并根据硬件配置和工作负载对其进行调整(参数如“innodb_buffer_pool_size”、“innodb_log_file_size”、“innodb_flush_log_at_trx_commit”、“innodb_thread_concurrency”等)正如您已经确定的,使用负载均衡器进行水平扩展可能是处理不断增加的负载的最佳长期解决方案
eoxn13cs2#
谢谢你的回复@lemonina
我想知道为什么我的问题有一个-1...
我在重新安装之前运行了一个Benchmark,全部使用sysbench:
结果如下:
本测试没有特定配置。
根据你的建议做了一些修改:
以下是我的新配置:
同样的测试结果:
我不确定重新安装100 Go数据库是否会影响所获得的性能或配置。
你觉得呢?