首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据库调优问题

问数据库调优问题
EN

Database Administration用户
提问于 2015-07-10 13:40:31
回答 2查看 7.4K关注 0票数 4

我不是DBA,所以需要一些关于调优MySQL (MyISAM)数据库的建议。我发现,在高峰时段,我们的负载尖峰非常严重,减缓了网络前端的速度。

我还使用JMeter对服务器运行测试,对于20个并发用户,加载峰值达到400%。这看起来不正常。

我运行了MySQL调谐器,并且已经标记了以下内容:

[!!] Query cache prunes per day: 4351 [!!] Joins performed without indexes: 155460 [!!] Table cache hit rate: 0% (1K open / 11M opened)

查询缓存剪枝看起来很直接,我认为我可以安全地将它增加到100 to,而不需要任何负面的可伸缩性。

当我的所有表都被索引时,“没有索引的联接”使我感到困惑。这更可能是使用非索引列查询的问题吗?

表缓存命中率也是我不确定的。Open_tables的数量从未减少到1000以下,这意味着表永远不会关闭。1000是table_open_cache在我的配置中的值。

EN

回答 2

Database Administration用户

发布于 2015-07-10 23:34:03

负载峰值达到400%

这可能意味着您是CPU绑定,而不是I/O绑定。因此,您有大量的RAM,但是查询效率很低。

!!!查询缓存每天修剪: 4351

在大多数生产系统中,写通信量太高,因此应该关闭查询缓存。还有其他指标可以进一步证明这一点。

在没有索引的情况下执行!!!连接: 155460

对于小桌子来说,这并不重要。即使是小桌子,这也可能很重要。

用long_query_time = 1打开慢速日志;等待一天;运行pt-查询摘要。然后向我们展示第一个调皮的查询,以及SHOW CREATE TABLE和EXPLAIN SELECT ...。这很可能包括“非索引联接”最严重的违反者。

!!!表缓存命中率: 0% (1K打开/ 11M打开)

你有1000多张桌子吗?你还在积极使用1000多?这听起来像是糟糕的架构设计。请详细说明为什么有这么多桌子。(同时,将table_open_cache提高到例如2000年,并将table_open_cache_instances设置为16 (假设您正在运行至少5.6.6)。

去query_cache_size的时候不要超过100米。当它变得更大的时候它就变得低效了。

在我看来,log-queries-not-using-indexes是杂乱无章的,而不是好处。

有关修复索引的先头信息,请参见我的食谱。

如果您想要更多的测试(比该工具所做的更多),请向我提供

  • 拉姆尺寸
  • SHOW VARIABLES;
  • SHOW GLOBAL STATUS;

它将包括对QC是否有用的分析。

票数 4
EN

Database Administration用户

发布于 2015-07-10 15:35:56

您的性能问题很可能通过修复第二个问题来解决:没有索引的联接。如果您要对查询中的非索引列进行联接,则必须做更多的工作来确定1)是否有匹配,以及2)哪些匹配。

您可以在MySQL配置(my.cnf)中使用log选项log查询而不是使用索引来记录这些查询。从这里,您可以创建适当的索引来覆盖联接操作,或者修改联接以使用现有的键列/索引。解释可以帮助您理解引擎本身在执行查询时所做的事情。

一旦解决了这个问题,调整缓存应该会提高一些性能,但是修复连接并提高它们的效率将使服务器能够运行更快的速度,即使缓存不是温的。

票数 3
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/106594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档