none
请教下怎么清空CDC表里的数据 RRS feed

  • 问题

  • 我有个CDC的表,数据量为89万,这是不正常的。我发现可能是由于我调整了CDC的参数导致出的问题:EXECUTE sys.sp_cdc_change_job

    CDC配置信息:

    database_id job_type job_id maxtrans maxscans continuous pollinginterval retention threshold
    8 capture C56A39AA-A0D2-4055-824D-DAC812F11B83 500 10 1 5 0 0
    8 cleanup 25A55E98-933C-4BEC-ACAA-D08B051FD0A9 0 0 0 0 4320 10000

    我一开始是怀疑参数配置里每次的删除的条数过小导致的问题,于是我人工执行EXEC sys.sp_MScdc_cleanup_job,但是并没有删除数据。

    select * from cdc.lsn_time_mapping   里面的数据才3075条,这个应该是对的,3天内的数据量

    请教下这种情况怎么处理



    2021年10月19日 9:35

答案

  • 频繁修改的话,3天39万很正常

    你可以自己查变更数据来确认,通过 fn_cdc_map_lsn_to_time,可以知道LSN对应的时间点,这样可以判断清理是否正常

    SELECT sys.fn_cdc_map_lsn_to_time(sys.fn_cdc_get_min_lsn('cdc实例'));

    也可以用这个函数结合fn_cdc_get_all_changes_xxx 来确定导致大量变更的时间

    2021年10月20日 1:01

全部回复

  • 频繁修改的话,3天39万很正常

    你可以自己查变更数据来确认,通过 fn_cdc_map_lsn_to_time,可以知道LSN对应的时间点,这样可以判断清理是否正常

    SELECT sys.fn_cdc_map_lsn_to_time(sys.fn_cdc_get_min_lsn('cdc实例'));

    也可以用这个函数结合fn_cdc_get_all_changes_xxx 来确定导致大量变更的时间

    2021年10月20日 1:01
  • 频繁修改的话,3天39万很正常

    你可以自己查变更数据来确认,通过 fn_cdc_map_lsn_to_time,可以知道LSN对应的时间点,这样可以判断清理是否正常

    SELECT sys.fn_cdc_map_lsn_to_time(sys.fn_cdc_get_min_lsn('cdc实例'));

    也可以用这个函数结合fn_cdc_get_all_changes_xxx 来确定导致大量变更的时间

      发现问题了,有个人晚上全表定时UPDATE一个数据,请教下我能否在update语句里加上某个hint,让他不产生CDC?

    2021年10月20日 1:52

  •   发现问题了,有个人晚上全表定时UPDATE一个数据,请教下我能否在update语句里加上某个hint,让他不产生CDC?

     如果CDC不捕获这些update, 如果发生故障,那这些update的数据不就会丢失吗?



    2021年10月20日 6:06

  •   发现问题了,有个人晚上全表定时UPDATE一个数据,请教下我能否在update语句里加上某个hint,让他不产生CDC?

     如果CDC不捕获这些update, 如果发生故障,那这些update的数据不就会丢失吗?



         因为这些改动无关紧要,是每天一个定时的全表任务计划,如果有办法针对指定的语句不让产生CDC就好了,不然CDC的量太大了。
    2021年10月20日 6:19