ITPub博客

首页 > 架构设计 > 数据架构 > SQL Server如何配置cdc进行ETL

SQL Server如何配置cdc进行ETL

原创 数据架构 作者:宅慕思_ 时间:2019-10-23 10:07:58 1 删除 编辑

企业核心业务系统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



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69950462/viewspace-2661068/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-10-10

  • 博文量
    18
  • 访问量
    16022