加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

降低MySQL的耐用性以提高性能

发布时间:2020-12-11 23:51:11 所属栏目:MySql教程 来源:网络整理
导读:我的网站偶尔会有相当可预测的流量突发,吞吐量比平常增加100倍.例如,我们将在电视节目中亮相,我预计在演出后的一小时内,我将获得比正常情况多100倍的流量. 我的理解是MySQL(InnoDB)通常将我的数据保存在一堆不同的地方: RAM缓冲区 commitlog 二进制日志 实

我的网站偶尔会有相当可预测的流量突发,吞吐量比平常增加100倍.例如,我们将在电视节目中亮相,我预计在演出后的一小时内,我将获得比正常情况多100倍的流量.

我的理解是MySQL(InnoDB)通常将我的数据保存在一堆不同的地方:

> RAM缓冲区
> commitlog
>二进制日志
>实际表格
>我的DB奴隶上面的所有地方

考虑到我在EC2节点上并且大多数东西都经过相同的网络管道(文件系统是网络连接的),这太“耐用”了.此外,驱动器速度很慢.数据价值不高,我宁愿少花几分钟的数据丢失,而不是在人群到来时很可能发生中断.

在这些流量突发期间,我希望只有在我负担得起的情况下才能完成所有这些I / O.我想尽可能多地保留在RAM中(与一小时内触摸的数据大小相比,我有相当大的RAM空间).如果缓冲区变得稀缺,或者I / O通道没有过载,那么我确定,我希望将事务转到commitlog或二进制日志以发送给slave.如果且仅当I / O通道没有过载时,我想回写实际的表.

换句话说,我希望MySQL / InnoDB使用“回写”缓存算法而不是“直写”缓存算法.我可以说服它这样做吗?

如果这是不可能的,我对一般的MySQL写性能优化技巧感兴趣.大多数文档都是关于优化读取性能的,但是当我收到大量用户时,我正在为所有用户创建帐户,因此这是一个繁重的工作量.

最佳答案 在很大程度上,InnoDB已经做到了这一点.

提交数据时,会将其写入日志文件以进行恢复,但对表空间(数据)的修改仅在以后作为后台进程(“检查点”)进行.

您可以在较新的InnoDB版本(innodb_io_capacity)中指定要为该后台进程投入多少IOPS(http://en.wikipedia.org/wiki/IOPS),并且假设您将innodb_log_file_size设置得足够大,InnoDB将暂时搁置一段时间并稍后再回升.

如果InnoDB在后台工作方面落后太多,那么当你到达日志文件的末尾时,它可以在性能上产生急剧的下降,并且必须循环回来.请参阅这些基准测试中的“无”行:
http://www.mysqlperformanceblog.com/2009/09/15/which-adaptive-should-we-use/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读