利用Oracle ADG 实现读写分离

业务背景

项目随着业务量的不断增加,订单数据量愈来愈大
原有解决方案是定时清理历史数据。但目前客户要求长时间订单数据保留。
导致的问题是,业务高峰时,大量订单查询业务与写业务并发,严重影响写性能
分析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.增加线程参数

增加一个线程参数来标志是否查备库

3.修改查询逻辑

备库查询前设置线程参数,查询结束后去除线程参数

4.修改获取数据库链接逻辑

根据线程参数是否为备库查询来获取不同的数据库链接

综上 就可以利用ADG来实现简单的读写分离。

都看到这里了 不妨点个赞吧!!!
如果有其他看法,欢迎在评论区交流!!!

猜你喜欢

转载自blog.csdn.net/qq_34577234/article/details/125214941