MySQL服务器负载非常高
我经营的网站拥有~500名实时访问者,~50000名每日访问者,以及~1300万总用户。我将服务器托管在AWS上,在那里我使用了几种不同类型的实例。当我创建网站时,不同的实例的成本几乎相同。当该网站开始吸引用户时,RDS实例(MySQL DB)的CPU不断地达到顶峰,我不得不对其进行多次升级,现在它已经开始占据性能和月成本的主要部分(约95%(2,8k$/月))。我目前使用的数据库服务器具有16vCPU和64GiB的RAM,我还使用多AZ部署来防止故障我想知道数据库这么贵是正常的,还是我做错了什么? 数据库信息 目前,我的数据库有40个表,其中大多数表有10万行,有些表有约200万行,1个表有3000万行。 我有一个系统,用来记录那些超过21天的行,而这些行已经不再需要了 网站信息 该网站主要使用PHP,但也有一些NodeJ和python 网站的大部分功能如下:MySQL服务器负载非常高,mysql,database,performance,amazon-web-services,aws-rds,Mysql,Database,Performance,Amazon Web Services,Aws Rds,我经营的网站拥有~500名实时访问者,~50000名每日访问者,以及~1300万总用户。我将服务器托管在AWS上,在那里我使用了几种不同类型的实例。当我创建网站时,不同的实例的成本几乎相同。当该网站开始吸引用户时,RDS实例(MySQL DB)的CPU不断地达到顶峰,我不得不对其进行多次升级,现在它已经开始占据性能和月成本的主要部分(约95%(2,8k$/月))。我目前使用的数据库服务器具有16vCPU和64GiB的RAM,我还使用多AZ部署来防止故障我想知道数据库这么贵是正常的,还是我做错了什
如果您需要任何更多信息,请询问,在此问题上的任何帮助都将不胜感激 根据我的经验,只要你问“我如何提高性能?”这个问题,你就知道你已经超过了RDS(编辑:我承认我的经验导致我的观点可能已经过时) 听起来您的查询负载相当重。大量的插入和更新。如果可以,您应该在您的RDS版本上增加innodb_日志_文件大小。否则,您可能不得不放弃RDS,转而使用EC2实例,以便更轻松地调优MySQL 我还将禁用MySQL查询缓存。在每次插入/更新时,MySQL都必须扫描查询缓存,以查看是否有需要清除的缓存结果。如果您有一个写繁重的工作负载,这是浪费时间。将查询缓存增加到2.56GB会使情况更糟!将缓存大小设置为0,将缓存类型设置为0 我不知道您运行的是什么查询,也不知道您对它们的优化程度如何。MySQL的优化器是有限的,因此经常可以从重新设计SQL查询中获得巨大的好处。也就是说,更改查询语法,以及添加正确的索引 您应该进行查询审核,以找出哪些查询是导致高负载的原因。一个很好的免费工具是,它可以根据缓慢的查询日志生成报告。使用CLI命令下载RDS慢速查询日志 将long_query_time设置为0,让它运行一段时间以收集信息,然后将long_query_time更改回您通常使用的值。收集此日志中的所有查询非常重要,因为您可能会发现75%的负载来自不到2秒的查询,但这些查询的运行频率太高,这对服务器造成了负担 在知道哪些查询是负载的原因后,您可以制定一些关于如何解决这些问题的明智策略:
- 查询优化或重新设计
- 应用程序中的更多缓存
- 扩展到更多实例
- 我认为答案是“你做错了什么”。您不太可能达到RDS限制,尽管您可能在某些方面达到了限制
从启用详细监视开始。这将为您提供一些操作系统级别的信息,这些信息将有助于确定您的限制因素到底是什么。查看您缓慢的查询日志和数据库统计数据-您可能有一些导致问题的查询
一旦您理解了问题——可能是错误的查询、I/O限制或其他问题——那么您就可以解决它们了。RDS允许您创建多个读取副本,因此您可以将部分读取负载移动到从属服务器
您还可以迁移到Aurora,它将为您提供更好的I/O性能。或者使用PIOPS(或者分配更多磁盘,这将提高性能)。您正在使用SSD存储,对吗
另一个建议-如果您的计算(上面的步骤4)花费大量时间,您可能需要考虑将其分为两个或多个事务。查询缓存大小超过50M是个坏消息。你经常写东西——每一张桌子每秒写很多次?这意味着QC需要每秒扫描多次以清除更改表的条目。当质量控制为2.5GB时,这对系统来说是一个很大的负载
query\u cache\u type
应该是DEMAND
,如果您可以证明它是打开的。在这种情况下,使用SQL\u CACHE
和SQL\u NO\u CACHE
选择
既然您已经打开了slowlog,请使用pt query digest查看输出。前两个问题是什么
由于您的典型操作涉及到编写,因此我不认为使用只读从机有什么好处
机器人在兰德运行吗