33. Splitting the replication load into multiple process groups for optimal performance

简单说明:

本篇博文讨论进程负载切分时要考虑的诸多因素,并不涉及具体的配置操作

进程拆分的原因:

当在一个非常繁忙的系统中部署复制时,一个单独的抽取和应用进程不足以保证复制事务的速度
这种情况下,一般应用进程是瓶颈,应用进程从trail文件中读取事务,重构成SQL,然后一条条的在目标端执行
除非是特意配制成这种延迟行的复制,否则该情况就是不合理的

进程拆分所需要关注的地方:

为了切分应用负载到多个进程,关键点是要考虑怎样将表切分到不同应用进程中,要根据环境具体分析:

1,查询动态性能视图,统计出库中更新操作最频繁的20张表:
  select *
    from (SELECT OWNER, OBJECT_NAME, VALUE AS TOTAL_WRITES
            FROM V$SEGMENT_STATISTICS
           WHERE STATISTIC_NAME IN ('PHYSICAL WRITES')
           ORDER BY TOTAL_WRITES DESC)
   where ROWNUM <= 20;

2,如果这些表属于不同的业务用户,则根据用户来切分多个应用进程

3,尽量保持业务上相关联的用户或者表在同一个应用进程里面

4,将某个表相关的DDL和DML的映射配置放在一个相同的应用进程里面

5,包含参照完整性的父子表配置在同一个应用进程里面

6,如果某个表有很高的update负载,可以为它配置一个专用的应用进程

7,如果一个专用的进程不够用,可以使用@RANGE函数切分成多个应用进程
   参见《12. Setting up a GoldenGate replication with multiple process groups》

8,如果要使用BATCHSQL模式,则为行超过25KB的表、包含LONG或LOB的表
   和除主键外还有其他唯一性约束的表创建单独应用进程

9,如果有三个或以上的应用进程从相同的trail文件中读取数据
   设置更多的发送进程,将相同的trail文件发送到同一个目标端的不同trail目录中

10,每个OGG进程需要消耗大约55MB内存,需要考虑进程拆分的内存和CPU使用

11,能够被拆分的进程可以是应用进程也可以是抽取或发送进程,使用@RANGE函数拆分
   参见《12. Setting up a GoldenGate replication with multiple process groups》

[TOC]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要限制包的大小,可以使用以下方法: 1. 使用 `import()` 或 `require.ensure` 进行懒加载 将应用程序拆分为不同的模块,并根据需要动态地加载这些模块。这样可以减少初始加载时需要下载的代码量,从而加快应用程序的启动时间。使用 `import()` 或 `require.ensure` 可以实现这一点。 例如,在 Taro 中,你可以使用以下方式来实现懒加载: ```javascript import Taro from '@tarojs/taro' const lazyComponent = () => import('./path/to/component') Taro.render(<lazyComponent />, document.getElementById('app')) ``` 2. 使用 Tree Shaking 技术 Tree Shaking 技术可以自动从代码中删除未使用的代码,从而减少包的大小。在 Taro 中,你可以通过在 `config/index.js` 中设置 `enableTreeShaking` 选项来启用该功能: ```javascript module.exports = { // ... build: { enableTreeShaking: true, // ... }, // ... } ``` 3. 使用 Code Splitting 技术 Code Splitting 技术可以将代码拆分为多个块,从而减少每个块的大小。在 Taro 中,你可以使用以下方式来实现代码拆分: ```javascript import Taro from '@tarojs/taro' const componentA = () => import('./path/to/componentA') const componentB = () => import('./path/to/componentB') export default function App() { return ( <div> <componentA /> <componentB /> </div> ) } ``` 通过这种方式,componentA 和 componentB 将被拆分为不同的块,并在需要时动态加载。这样可以减少初始加载时需要下载的代码量,从而提高应用程序的性能和加载速度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值