立即注册找回密码

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

手机动态码快速登录

手机号快速注册登录

搜索

图文播报

查看: 1946|回复: 5

[讨论] 读写分离为什么能够提升性能?

[复制链接]
发表于 2024-10-10 17:11 | 显示全部楼层 |阅读模式
回复

使用道具 举报

发表于 2024-10-10 17:12 | 显示全部楼层
恰好今天面试,遇到一个面试者,说自己参与了上家公司的系统优化,提高了50%的数据库效率,提到使用过的方法就是读写分离和分库分表。
那么读写分离是否可以提高所有的场景下的性能?或者说什么情况下适合,什么情况下不适合使用读写分离呢?聊聊个人的理解。
读写分离不是万金油,不见得所有的场景都合适。在读远远大于写,且对数据的实时性要求不是那么敏感的情况下,读写分离可以 提高程序的性能。其他情况甚至有相反的效果。
正例

首先,读写分离增加了物力服务器,主库负责写入,然后再同步到从库。负责写入的库不考虑读出,负责读出的不考虑写入,一定程度上减少了锁的争用。
其次,读写分离不仅仅可以分离出来一个只读库,你可以一个写库,然后拖多个只读库,把流量分布到多个读的库上面去。当然就大幅度的降低了每个数据库的负载。
反例


  • 如果你读写分离用在了写大于读的情况下,每次写入数据库,都需要花费一些性能 同步到只读库。而只读库对分摊负载没有什么帮助。
  • 如果你的系统对数据非常敏感,写入主库后异步发布到从库,从库一定有一定时间的差异。这个要考虑。
回复 支持 反对

使用道具 举报

发表于 2024-10-10 17:12 | 显示全部楼层
读写分离是指程序上把读操作和写操作分别对应不同的服务器
误解:

  • 主服务器不执行读操作,主服务器要根据情况执行读操作的,不然会有延迟问题
  • 从服务器不执行写操作,虽然你的程序没有直接写,但是复制数据的过程还是一样要写,不写数据哪来的,只是写的方式是延迟批量写
  • 只要配置了读写分离性能就一定会提升,只有两台服务器的情况,由于从服务器实际上是承担了所有的读写,所以并没有提升,所以要使用主从读写分离,从服务器要两个以上,两个只能达到备份目的
说提升实际上是不够准确的说法,准确的说是可以使大量并发的读操作不会使单条语句执行速度降低或者降低较少,也就是说没有并发场景是不会有效果的
提升的意思是指不降低
另外 Galera Cluster 通常是更好的方案
回复 支持 反对

使用道具 举报

发表于 2024-10-10 17:13 | 显示全部楼层
读写分离主要业务场景为了读,写是次要的,并且允许时间上的延迟。
回复 支持 反对

使用道具 举报

发表于 2024-10-10 17:13 | 显示全部楼层
可以看下我写的这篇文章:
MySQL 读写分离,里面在参考别人写的东西的同时有自己的见解。
文章片段引用如下:
三 读写分离提高性能之原因1.物理服务器增加,负荷增加
2.主从只负责各自的写和读,极大程度的缓解X锁和S锁争用
3.从库可配置myisam引擎,提升查询性能以及节约系统开销
4.从库同步主库的数据和主库直接写还是有区别的,通过主库发送来的binlog恢复数据,但是,最重要区别在于主库向从库发送binlog是异步的,从库恢复数据也是异步的
5.读写分离适用与读远大于写的场景,如果只有一台服务器,当select很多时,update和delete会被这些select访问中的数据堵塞,等待select结束,并发性能不高。 对于写和读比例相近的应用,应该部署双主相互复制
6.可以在从库启动是增加一些参数来提高其读的性能,例如--skip-innodb、--skip-bdb、--low-priority-updates以及--delay-key-write=ALL。当然这些设置也是需要根据具体业务需求来定得,不一定能用上
7.分摊读取。假如我们有1主3从,不考虑上述1中提到的从库单方面设置,假设现在1分钟内有10条写入,150条读取。那么,1主3从相当于共计40条写入,而读取总数没变,因此平均下来每台服务器承担了10条写入和50条读取(主库不承担读取操作)。因此,虽然写入没变,但是读取大大分摊了,提高了系统性能。另外,当读取被分摊后,又间接提高了写入的性能。所以,总体性能提高了,说白了就是拿机器和带宽换性能。MySQL官方文档中有相关演算公式:官方文档 见6.9FAQ之“MySQL复制能够何时和多大程度提高系统性能”
8.MySQL复制另外一大功能是增加冗余,提高可用性,当一台数据库服务器宕机后能通过调整另外一台从库来以最快的速度恢复服务,因此不能光看性能,也就是说1主1从也是可以的。
回复 支持 反对

使用道具 举报

发表于 2024-10-10 17:13 | 显示全部楼层
这不很正常吗?读操作分离到slaves上,这样master数据库需要承受的请求大幅减少了啊
回复 支持 反对

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册 微信登录 手机动态码快速登录

本版积分规则

关闭

官方推荐 上一条 /3 下一条

快速回复 返回列表 客服中心 搜索 官方QQ群 洽谈合作
快速回复返回顶部 返回列表