SQL Server CDC最佳实践
企业核心业务系统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 |
||
|
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的影响。具体过程如下:
在db级别启用cdc时需要先将db的默认filegroup改成cdc,这样cdc对应的元数据信息,例如经常变化的表cdc.lsn_time_mapping可以存放到单独的filegroup中
对于表的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
SQL Server CDC最佳实践的更多相关文章
- SQL Server集成服务最佳实践:语句优化
SQL Server集成服务(SQL Server Integration Services,SSIS)在其前辈DTS(Data Transformation Services,数据转换服务) ...
- SQL Server SA 最佳实践(也许不仅仅是翻译)
老实说,本文主要部分是翻译的,并且由于英语水平的问题,我没有完全翻译,有些我觉得不重要的就跳过了,目前看来应该八九不离十,或者说不会影响最终效果,对于英语水平好的读者,可以自行查看原文.但这一年里面我 ...
- 【译】索引进阶(十七): SQL SERVER索引最佳实践
[译注:此文为翻译,由于本人水平所限,疏漏在所难免,欢迎探讨指正] 原文链接:传送门. 在本章我们给出一些建议:贯穿本系列我们提取出了十四条基本指南,这些基本的指南将会帮助你为你的数据库创建最佳的索引 ...
- 清除系统日志及数据库(sql server)日志最佳实践
在一个项目中遇到的问题:系统日志过大,后来用delete语句删除了(相当的慢),结果数据库日志又变成很大了(差不多10G),所以又得把数据库日志删除. 方法: --备份系统中的部份日志--SELECT ...
- 京东云TiDB SQL优化的最佳实践
京东云TiDB SQL层的背景介绍 从总体上概括 TiDB 和 MySQL 兼容策略,如下表: SQL层的架构 用户的 SQL 请求会直接或者通过 Load Balancer 发送到 京东云TiDB ...
- SQL Server链接MySQL实践
最近在访问多数据库的时候进行了SQLServer链接MySQL数据的实践,现总结如下: 一. 安装mysql-connector-odbc驱动: 1. 在SQL Server服务器的机器上安装mys ...
- SQL Server CDC配合Kafka Connect监听数据变化
写在前面 好久没更新Blog了,从CRUD Boy转型大数据开发,拉宽了不少的知识面,从今年年初开始筹备.组建.招兵买马,到现在稳定开搞中,期间踏过无数的火坑,也许除了这篇还很写上三四篇. 进入主题, ...
- 实时数据引擎系列(五): 关于 SQL Server 与 SQL Server CDC
摘要:在企业客户里, SQL Server 在传统的制造业依然散发着持久的生命力,SQL Server 的 CDC 复杂度相比 Oracle 较低, 因此标准的官方派做法就是直接使用这个 CDC ...
- SQL Server 2005 分区表实践——分区切换
本文演示了 SQL Server 2005 分区表分区切换的三种形式: 1. 切换分区表的一个分区到普通数据表中:Partition to Table: 2. 切换普通表数据到分区表的一个分区中:Ta ...
随机推荐
- github项目多人进行合作开发,填坑记录
1.Fork别人的github项目. Fork项目成功后,再进行把项目克隆到你本地.(我的项目已经克隆到本地了,右边是克隆下来的所有文件,除了 node_modules) git命令: git clo ...
- 34、Scrapy 知识总结
Scrapy 知识总结 1.安装 pip install wheel pip install https://download.lfd.uci.edu/pythonlibs/q5gtlas ...
- 深入Spring Boot:那些注入不了的 Spring 占位符 ( ${} 表达式 )
Spring里的占位符 spring里的占位符通常表现的形式是: 1 2 3 <bean id="dataSource" destroy-method="close ...
- Redis5以上版本伪集群搭建(高可用集群模式)
redis集群需要至少要三个master节点,我们这里搭建三个master节点,并且给每个master再搭建一个slave节点,总共6个redis节点,这里用一台机器(可以多台机器部署,修改一下ip地 ...
- Qualcomm_Mobile_OpenCL.pdf 翻译-4-Adreno OpenCL的程序开发
这章将简要讨论一些开发Adreno OpenCL应用程序的基本要求,下面将会介绍如何调试和统计程序性能. 4.1 安卓平台上开发OpenCL程序 目前,Adreno GPU主要是在安卓操作系统和在部 ...
- [易学易懂系列|rustlang语言|零基础|快速入门|(4)|借用Borrowing]
[易学易懂系列|rustlang语言|零基础|快速入门|(4)] Borrowing 继续讲讲另一个重要的概念:借用(borrowing), 什么是借用? 我们先来看前一文章([易学易懂系列|rust ...
- Java并发编程实战 第8章 线程池的使用
合理的控制线程池的大小: 下面内容来自网络.不过跟作者说的一致.不想自己敲了.留个记录. 要想合理的配置线程池的大小,首先得分析任务的特性,可以从以下几个角度分析: 任务的性质:CPU密集型任务.IO ...
- inoutfy与rsync进行实时同步
更新阿里epel源 安装镜像源 curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo --- 扩展 ...
- vue项目history模式下微信分享相关问题
import wx from '@/utils/wx' import { shareApi } from '@/api' // 微信验证 export function requireConfig() ...
- Puppet利用Nginx多端口实现负载均衡
随着公司应用需求的增加,需要不断的扩展,服务器数量也随之增加,当服务器数量不断增加,我们会发现一台puppetmaster压力大,解析缓慢,而且时不时出现"time out"之类的 ...