企业核心业务系统oltp的数据需要通过ETL同步到数据仓库,原始的ETL流程通过定制化从SQL Server中进行数据抽取,经过生产环境的监控,发现ETL过程的query会对生产系统造成额外负载。于是制定了通过cdc进行增量数据同步的方案:

方案选型中比对了SQL server的trigger,CT,CDC, temporary table各种方式,选型对比如下:

 

Trigger

CT

CDC

Temporal table

Sync way

Synchronous

Synchronous

Asynchronous

Synchronous

Internal work

Heavy than index

Same as index

Call sp_replcmds   to collect from tlog no direct workload.

 

Table part in transaction

Yes

Yes

No

Yes

Historical Data retention

Manual control

No

Yes

Yes

通过表格对比可以看到,cdc通过异步非侵入式进行增量数据捕获,使用了sp_replcmds,这个过程和sql server的transactional replication中的log reader agent是相同的,缺点就是会对占用原始database的datafile和logfile,造成数据增长。

在cdc的使用过程中,比较重要的是将cdc数据置于单独的filegroup内,这样,在数据管理恢复和性能上会减少对于原始oltp的影响。具体过程如下:

  1. 在db级别启用cdc时需要先将db的默认filegroup改成cdc,这样cdc对应的元数据信息,例如经常变化的表cdc.lsn_time_mapping可以存放到单独的filegroup中

  2. 对于表的cdc数据使用@fileGroup_Name参数指定filegroup

--enable cdc filegroup

USE DB1

ALTER DATABASE DB1 ADD FILEGROUP CDC

GO

ALTER DATABASE DB1 ADD FILE

(

NAME='CDC',

FILENAME='D:\DATA\DB_CDC1.ndf',

SIZE = 1024MB,

MAXSIZE = unlimited,

FILEGROWTH=256MB

)TO FILEGROUP CDC

GO

USE DB1

GO

ALTER DATABASE DB1 MODIFY FILEGROUP [CDC] DEFAULT

GO

EXEC sys.sp_cdc_enable_db

GO

ALTER DATABASE DB1 MODIFY FILEGROUP [DATA] DEFAULT

go

EXEC sys.sp_cdc_enable_table @source_schema = N'dbo',@source_name = 'T1',@role_name = N'cdc_Admin',@fileGroup_Name = N'CDC'

CDC建立后有capture job和clean job,当cdc的数据增量非常大的时候,需要适当调整job的参数:

EXEC sys.sp_cdc_change_job

@job_type = 'capture'

,@maxtrans = 5000      --每个扫描循环可以处理的最多事务数

,@maxscans = 100       --为了从日志中提取所有行而要执行的最大扫描循环次数

,@continuous = 1       --连续运行最多处理(max_trans * max_scans)个事务

,@pollinginterval = 1

最新文章

  1. Python: open和codecs.open
  2. Hadoop中MR程序的几种提交运行模式
  3. mysql时间属性之时间戳和datetime之间的转换
  4. nginx :413 Request Entity Too Large
  5. HT for Web基于HTML5的图像操作(三)
  6. oracle中Window和Window Group
  7. Android 采用post方式提交数据到服务器
  8. linux下用phpize给PHP动态添加扩展
  9. 【原】xcode5&IOS7及以下版本免证书真机调试记录
  10. 误删ext3的恢复方法
  11. IOS:利用dispatch_once创建单例
  12. PHP+MySQL多语句执行<转自wooyun>
  13. 使用Node.js作为后台进行爬虫
  14. c#自带压缩类实现数据库表导出到CSV压缩文件
  15. ubuntu下python flask环境搭建
  16. laravel会话驱动扩展—连接自定义会话管理系统
  17. 记录参加QCon2017北京站的心得
  18. top 分析
  19. VS2012 VS2015打开项目加载失败
  20. webservice-整理

热门文章

  1. python中魔法方法__str__与__repr__的区别
  2. 04、DAT图像文件
  3. LOCATE()和FIND_IN_SET()
  4. centos 安装配置LAMP平台
  5. python 抓取拉勾网 攻略
  6. css阴影——box-shadow
  7. ajax异步 —— javascript
  8. JS计算两个经纬度的距离
  9. Linux学习--第八天--acl、SetUID、SetGID、chattr、lsattr、sudo
  10. MySQL发生系统错误2 系统无法找到指定文件