We have CDC enabled on SQL Server 2008 with retention re-configured to a number other than the default 3 days (or something similar).
When we first configured it (with default options), it worked fine. But since the day we changed the retention period from default to something like 25 days, it stopped working correctly. It would run for many hours (15 to 20 hours). So, after a few days we disabled the job (not good, but we had other priorities to deal with than the data retention).
Now after 7 months, the disk is close to getting full. So we need to re-configure it and start purging data. A few days ago, just to test how it works, I ran a test run. I checked the timestamp of the oldest LSN and added a month to it and changed the retention period to something like 8 months. So when the clean up job runs, it should come back with success immediately, as there is no data older than 7 months. But it does not. Its still runs for many hours.
Now I am starting to wonder if the retention period (column) in msdb.dbo.cdc_jobs table works or not. Aaron Bertrand mentioned in his blog that he did not have perfect success with this setting. Maybe this setting is not used by the Clean up job.
Before I run some intensive tests on a Development machine, I wanted to check with you guys.
Best Answer
I answered this question in my blog at Sqltimes.wordpress.com As far as I know, the only way to configure retention period is by updating the retention column in the
msdb.dbo.cdc_jobs
table. You want to update the retention column of the record with'cleanup'
injob_type
column. It could be done in two ways:EXECUTE sys.sp_cdc_change_job @job_type = N'cleanup', @retention = 349082;
UPDATE msdb.dbo.cdc_jobs SET retention = '666000' WHERE job_type = 'cleanup'
If you have more than one CDC running, then using the appropriate
CDC instance
name.A Little more info:
When the
CDC cleanup job
runs, it purges all data in theCDC
tables up to this date. You can stop theCDC cleanup job
any time while it is running. When you start it, it will pick up from where it left off. So if you stopped the job while it is running today and start to run it tomorrow it will start from where it left off yesterday and perform purge until the retention period mentioned in themsdn.dbo.cdc_jobs
table.CDC is pretty robust technology.
Hope it help, _UB