业务背景
随着公司业务的飞速发展,我们面临着一个前所未有的挑战:订单数据量的急剧上升。
以往,我们通过定期清理历史数据来维护数据库性能,能够满足日常性能需要。
但现在由于客户需求的变化,他们要求我们能够长期保留订单数据。这一新需求使得原有的数据管理方案不再适用,我们必须寻找新的解决办法。
问题分析
业务高峰期间,大量的查询和写操作需要同时执行,这对数据库性能造成了严重的影响。我们分析SQL
后发现,一些大型查询操作对数据库性能消耗巨大——在高并发场景下,读操作和写操作争夺资源导致了数据库响应时间的增加,进而影响了用户体验。
解决方案:读写分离
为了解决这个问题,我们决定引入读写分离技术,将耗时的大查询操作转移到备份数据库上执行,从而减轻主数据库的压力,确保写操作的稳定性。
技术选型
ADG
介绍
ADG
是Oracle11g
企业版的新特性,需要单独的License
.可以打开Physical standby
至read only
模式,standby
可以用来做报表系统、查询、排序或Web
站点。实时读写分离,以此来分担primary DB
的压力。
ADG
特性
- 实时查询:可以打开
Physical standby
值read only
模式并实时应用redo data
。 - 启用
RMAN block-change tracking
:用户利用RMAN
在primary
的增量备份恢复到standby
,性能最高可提升20倍。 Database
只读模式-
- 允许操作
●SELECT
操作,包括需要大量临时段的查询
●ALTER SESSION
,ALTER SYSTEM
●SET ROLE
● 调用Procedure
● 使用DBLINK
写数据到远程数据库
● 通过DBLINK
调用远程数据库的Procedure
● 在事务级别读一致性使用SET TRANSACTION READ ONLY
● 执行复杂的查询,如:GROUPING SET
,WITH
查询语句等
- 允许操作
-
- 不支持的操作
● 任何DML
或DDL
操作
● 访问本地序列的查询
● 对本地临时表的DML
操作
- 不支持的操作
ADG
启用
- 查询是否启用
ADG
select database_role ,open_mode from v$database
- 启用
ADG
alter database open read only;
recover managed standby database disconnect using current logfile;
ADG
延迟原因
● CPU
处理能力不足
● 网络延迟
● 带宽限制
技术实践
实施前的准备
1.环境评估:
审核当前的硬件环境,确保备库服务器的配置能够支撑预期的读操作负载。分析网络带宽和延迟,以确保数据同步的实时性和可靠性。
2.软件和许可:
确保拥有`Oracle 11g`的合适版本以支持`ADG`,同时检查`Oracle`许可证以确认`ADG`功能的可用性。
3.数据一致性检查:
在主库上执行数据一致性检查,确保在开始同步之前数据无误。
4.备份与恢复策略:
制定并测试备份与恢复策略,以防在实施过程中出现数据丢失或其他故障。
查询逻辑代码的修改
1.增加线程参数
增加一个线程参数来标志是否标记是否是查询备库
2.修改查询逻辑
备库查询前设置线程参数,查询结束后去除线程参数
3.修改获取数据库链接逻辑
根据线程参数是否为备库查询来获取不同的数据库链接
实施步骤
1.安装和配置ADG
:
在备库上安装`Oracle`软件,并配置为`ADG`模式。设置数据文件、归档日志文件和参数文件的传输。
2.数据同步:
从主库同步数据到备库,确保数据的一致性和完整性。
3.角色转换测试:
进行主备库的角色转换测试,以验证故障转移和数据一致性。
4.读写分离策略:
在应用程序层实施读写分离逻辑,确保读操作被重定向到备库。
5.性能调优:
监控系统性能,根据需要调整`ADG`配置和服务器资源分配。
注意事项
1.监控与维护:
持续监控`ADG`的状态和性能,确保同步延迟在可接受范围内。定期检查和维护索引,以优化查询性能。
2.故障处理:
制定详细的故障恢复流程,确保在出现问题时可以迅速响应。
3.安全性:
确保适当的安全措施到位,保护数据在传输过程中的安全。
技术实践的成果
1.性能提升:
.通过将读操作重定向到备库,主库的负载显著减少,写操作的性能得到了改善。
2.高可用性:
`ADG`的引入增强了数据库的高可用性,故障转移过程更加平滑,业务连续性得到保障。
3.业务支撑:
随着订单数据量的增长,系统能够更好地支撑业务需求,用户体验显著提升。
4.维护便利性:
数据库的维护和升级变得更加方便,因为可以在不影响读服务的情况下对主库进行维护。
5.成本效益:
尽管引入`ADG`需要一定的前期投资,但从长远来看,由于系统性能的提升和维护成本的降低,整体拥有成本效益。
通过以上技术实践,我们成功地实现了Oracle 11g
的Active Data Guard
来做到读写分离,极大地提升了数据库系统的性能和稳定性。这一变更不仅解决了当前的业务痛点,也为未来的扩展提供了坚实的基础。
都看到这里了 不妨点个赞吧!!!
如果有其他看法,欢迎在评论区交流!!!