只读节点增加流程
- 优势:新增只读节点,对比Shared-Nothing架构,GaussDB(for MySQL)架构下不需要进行数据的均衡,增加只读节点的时间不依赖数据量;
- 元数据初始化包括:Redo Log同步位点,活跃事务状态信息等,数据量很少;
- 数据库根据元数据信息进行初始化;
- 初始化过程中会读取系统表页面,不会初始化写数据模块;
- 读取Redo数据,更新备机页面失效状态,以确保读取到最新数据;
- 备机运行时,持续同步元数据信息;
只读性能线性扩展原理
- 只读节点只与主节点交互元数据信息,数据量小,不会影响主机性能;
- 只读节点都是独立的CPU和内存,每个节点都可以提供相同的读扩展性能;
- 只读节点间没有交互,扩展新的只读节点,不会影响已有只读节点的性能,最大可以扩展到15个只读节点;
存储空间扩展原理
- 数据分布式存储,一个数据库Instance的数据会存储在不同的存储服务器中,可以利用整个存储池的资源进行扩展;
- 分片数据库是一块固定大小的数据空间,保存于一块SSD盘中,一个存储服务器可以管理多块分片数据;
- 当前已有分片数据空间使用完后,计算层可以实时申请1块或多块分片数据,过程由计算层内核完成,对业务层透明,耗费时间仅为毫秒级别;
- 计算层对已使用分片数据空间进行实时计算,提前申请新的分片数据空间,业务对数据扩展完全无感知;
删除数据,如何减少存储空间
- 数据库使用时,明明删除了数据,为什么存储空间不会减少?
- Delete和Truncate的区别
- Delete是在每一行记录上标记为“删除”,并不真正删除数据,因此不会减少使用空间;
- Truncate会重建一个一模一样的空表,再把原来的表删除,是真正的物理删除,会减少使用空间;
| Delete | Truncate | |
|---|---|---|
| 条件删除 | 是 | 否 |
| 删除速度 | 慢 | 快 |
| 是否会减少使用空间 | 否 | 是 |
| 是否重置自增计数器 | 否 | 是 |
CPU内存扩展原理
- 传统的虚拟机/容器的CPU/内存扩展原理
- 由于CPU/内存的修改,往往需要把虚拟机/容器迁移到另外一台服务器上,因此修改过程中,需要停止虚拟机/容器,完成规格变更后再开机;
- 业务的停止时间就比较久,一般都是分钟级的中断时间;
- GaussDB(for MySQL)扩展节点不需要还原数据,可基于些原理来修改规格。
- 规格升降级,5分钟生效。通过直接创建新规格节点来替换原有规格的节点,由于新节点创建过程中,老节点仍然可以服务,整个过程中只需要进行一次切换,因此业务的中断时间只有秒级;
典型扩展场景
- 扩展原则:优先扩容CPU/内存,其次扩容只读节点;
- 写入较多的场景下,如果CPU使用率已经达到100%,扩容CPU/内存。如果CPU没有达到100%,没有必要扩容;
- 读较多的场景下,优先扩容CPU/内存,如果在最大规格下,使用率达到100%,则可以新增只读节点,进一步提升读性能;
| CPU负载高的常见原因 | 是否需要扩容 | 优化建议 |
|---|---|---|
| 业务压力大 | 是 | 参考扩展原则 |
| 存在慢SQL | 否 | 优先优化慢SQL,扩展并不能解决慢SQL带来的风险 |
| 连接数过多 | 是 | 如果是读较多的业务,可以通过扩展只读节点扩展解决 |
| 网络时延大 | 否 | 特征是:达到一定并发数后,再增加并发数,CPU升高,但是性能不提高。可以从应用端ping数据库,时延超过200微秒时,建议改善网络条件。 |
- 是否CPU达到100%就一定要扩容呢?答案是:否。数据库的CPU达到100%的原因有很多,需要具体分析后才能决定是否需要扩容,表格中是常见的导致CPU负载高的场景,以及提供的优化建议。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




