首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL服务器负载很高

MySQL服务器负载很高
EN

Stack Overflow用户
提问于 2016-07-10 15:06:13
回答 2查看 5.1K关注 0票数 3

我经营的网站有~500实时访问者~50k日访问者~13.3亿总用户。我将我的服务器托管在AWS上,在那里我使用了几个不同类型的实例。当我开始这个网站的时候,不同的例子的代价是相同的。当网站开始吸引用户使用RDS实例(MySQL DB) CPU时,我不得不多次升级它,现在它已经开始承担性能和每月成本的主要部分(约为每月2,8k美元)的95%。我目前使用的数据库服务器的16 16vCPU和64 RAM的RAM,我还使用多AZ部署,以防止故障。,我想知道数据库这么昂贵是正常的,还是我做错了什么?

数据库信息

目前,我的数据库有40个表,其中大多数有100 K行,有些有200万行,还有1张有3000万行。我有一个系统,档案行比不再需要的21天更旧的档案行。

网站信息

该网站主要使用PHP,也有一些NodeJS和python。

该网站的大部分功能如下:

  1. 启动事务
  2. 插入行
  3. 最后插入id (lastrowid)
  4. 做一些计算
  5. 更新插入的行
  6. 更新用户
  7. 提交事务

我还以10-30秒的间隔从数据库运行了大约100个机器人轮询,它们有时还会插入/更新数据库。

额外

为了降低数据库的负载,我做了几件事。例如启用数据库缓存,对一些查询使用redis缓存,尝试删除非常慢的查询,尝试将存储类型升级到“供应的IOPS SSD”。但似乎什么也帮不上忙。

这是我对设置参数所做的更改:

我曾经考虑过创建一个包含几个较小实例的MySQL集群,但我不知道这是否有帮助,我也不知道这是否适合于事务处理。

如果您需要更多的信息,请询问,在这个问题上的任何帮助都是非常有用的!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-10 15:43:08

根据我的经验,一旦你问到“我怎样才能提高绩效?”你知道你已经超过了RDS (编辑:我承认我的经验可能已经过时了)。

听起来您的查询负载非常重。大量的插入和更新。如果可以的话,您应该在您的RDS版本上增加innodb_log_file_size。否则,您可能不得不放弃RDS,转而使用EC2实例,在那里您可以更容易地优化MySQL。

我还将禁用MySQL查询缓存。对于每个insert/update,MySQL必须扫描查询缓存,以查看是否有任何需要清除的缓存结果。如果你的工作量很重,这是在浪费时间。将查询缓存增加到2.56GB会使情况更糟!将缓存大小设置为0,缓存类型设置为0。

我不知道您运行了哪些查询,或者您对它们进行了多好的优化。MySQL的优化器是有限的,因此通常情况下,您可以通过重新设计SQL查询获得巨大的好处。也就是说,更改查询语法,并添加正确的索引。

您应该执行查询审核,以找出哪些查询是导致您的高负载的原因。一个很好的免费工具是https://www.percona.com/doc/percona-toolkit/2.2/pt-query-digest.html,它可以根据缓慢的查询日志为您提供报告。使用http://docs.aws.amazon.com/cli/latest/reference/rds/download-db-log-file-portion.html CLI命令下载RDS慢速查询日志。

设置您的long_query_time=0,让它运行一段时间来收集信息,然后将long_query_time更改为您通常使用的值。收集这个日志中的所有查询是很重要的,因为您可能会发现75%的负载来自2秒以下的查询,但是它们的运行频率太高了,这对服务器来说是一个负担。

在您知道哪些查询计算了负载之后,您可以制定一些关于如何解决这些查询的明智策略:

  • 查询优化或重新设计
  • 应用程序中的更多缓存
  • 扩展到更多的实例
票数 6
EN

Stack Overflow用户

发布于 2016-07-10 20:06:20

我认为答案是“你做错了什么”。这是非常不可能的,你已经达到了一个RDS的限制,虽然你可能是在它的某些部分的极限。

首先启用详细的监视。这将给您一些操作系统级别的信息,这将有助于确定您的限制因素是什么。看看您缓慢的查询日志和数据库统计数据--您可能有一些导致问题的查询。

一旦您理解了问题--这可能是糟糕的查询、I/O限制或其他问题--那么您就可以解决它们了。RDS允许您创建多个读取副本,因此您可以将部分读取负载转移到从服务器上。

您还可以迁移到Aurora,这将给您提供更好的I/O性能。或者使用PIOPS (或分配更多磁盘,这将提高性能)。你用的是SSD存储器,对吧?

另一个建议--如果您的计算(上面的步骤4)花费了大量的时间,您可能需要考虑将其分解为两个或多个事务。

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

https://stackoverflow.com/questions/38293292

复制
相关文章

相似问题

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