none
请问函数fn_repl32bitstringhash什么用途? RRS feed

  • 问题

  • 数据库快照复制,前天调整为仅仅在晚上进行一次,但是今天早上发现数据库服务器爆慢,因为我昨天下班前开了一个跟踪,正好看到无尽的循环进程,调用对象是fn_repl32bitstringhash,查了半天也没发现这个函数是干嘛的,为什么变成了无尽的循环。
    另一个症状就是复制的目标数据库表对象数据正在不断地被清空、填充。后续的其他复制作业都报告成功,事实上却没有成功订阅。

    禁用作业后停止,收工执行一切正常。

    跟踪到的具体脚本如下,不断循环:

    select @binary_string = convert(varbinary(8000), @string),            @binary_string_len = datalength(@binary_string),            @hash_value = 0,            @hash_value_byte1 = 31,            @hash_value_byte2 = 41,            @hash_value_byte3 = 59,            @hash_value_byte4 = 26,            @hash_randomizer_byte1 = 53,            @hash_randomizer_byte2 = 58,            @hash_randomizer_byte3 = 97,            @hash_randomizer_byte4 = 93,            @hash_randomizer_byte5 = 23,            @hash_randomizer_byte6 = 84,            @hash_randomizer_byte7 = 62,            @curr_byte_pos = 1,            @curr_hash_value_pos = 1,            @curr_hash_randomizer_pos = 1         
    while @curr_byte_pos <= @binary_string_len             
    select @curr_byte = convert(tinyint, substring(@binary_string,@curr_byte_pos,1))                   
    if @curr_byte = 0         
    select @curr_hash_value_byte =              case @curr_hash_value_pos                  when 1 then @hash_value_byte1                  when 2 then @hash_value_byte2                  when 3 then @hash_value_byte3                  when 4 then @hash_value_byte4              end           
    select @curr_hash_randomizer_byte =              case @curr_hash_randomizer_pos                  when 1 then @hash_randomizer_byte1                          when 2 then @hash_randomizer_byte2                          when 3 then @hash_randomizer_byte3                          when 4 then @hash_randomizer_byte4                          when 5 then @hash_randomizer_byte5                          when 6 then @hash_randomizer_byte6                          when 7 then @hash_randomizer_byte7                        end               
    select @curr_hash_value_byte =              @curr_hash_value_byte ^ @curr_hash_randomizer_byte ^ @curr_byte           
    select @curr_hash_value_pos = (@curr_hash_value_byte % 4) + 1         
    select @curr_hash_randomizer_pos = (@curr_hash_value_byte % 7) + 1           
    if @curr_hash_value_pos = 1             
    select @hash_value_byte1 =                  @hash_value_byte1 ^ @curr_hash_value_byte         
    select @curr_byte_pos = @curr_byte_pos + 1     
    while @curr_byte_pos <= @binary_string_len             
    select @curr_byte = convert(tinyint, substring(@binary_string,@curr_byte_pos,1))                   
    if @curr_byte = 0         
    select @curr_byte_pos = @curr_byte_pos + 1             
    continue         
    while @curr_byte_pos <= @binary_string_len             
    select @curr_byte = convert(tinyint, substring(@binary_string,@curr_byte_pos,1))                   
    if @curr_byte = 0         

    在数据库系统函数中没有找到,联机丛书中没看到。

    MSDN上只查到object type=20038,翻译为标量SQL函数。

    没有找到fn_repl32bitstringhash 的描述。


    遇到到过的达人指点下,多谢。
    2009年12月21日 2:44

答案

  • Double check snapshot replication schedule, the function is internal one for replication.
    2009年12月21日 3:12
  • 快照复制的处理方式就是删除订阅端, 然后重新从发布端同步.

    不断的清空/填充, 可能的原因是:
    1. schedule 设置错, 导致分发代理连续运行
    2. 发布出错, 导致分发代理不断重试.

    建议你打开 replication monitor (复制监视器), 看看replication 的工作情况.
    2009年12月21日 4:04

全部回复

  • Double check snapshot replication schedule, the function is internal one for replication.
    2009年12月21日 3:12
  • Double check snapshot replication schedule, the function is internal one for replication.

    谢谢回复。

    能不能帮忙解答以下问题?
    1、什么原因导致这个过程被反复执行?症状就是订阅的数据库中对象被不断的清空,然后又被填充。
    2、当这个过程陷入死循环时,另外一个发布作业从作业日志中看是按时完成,但是事实上目标数据库并没有成功订阅。是因为这个影响的吗?
    2009年12月21日 3:39
  • 1. what's why I let you double check schedule.
    2. looks like caused by 1.
    2009年12月21日 3:43
  • 快照复制的处理方式就是删除订阅端, 然后重新从发布端同步.

    不断的清空/填充, 可能的原因是:
    1. schedule 设置错, 导致分发代理连续运行
    2. 发布出错, 导致分发代理不断重试.

    建议你打开 replication monitor (复制监视器), 看看replication 的工作情况.
    2009年12月21日 4:04
  • 是不是 复制频率高了造成的
    2009年12月21日 4:36
  • 您设置的频率是多少?
    2009年12月21日 7:42