none
使用微软查询通知后数据库还原特别慢的BUG RRS feed

  • 问题

  • 此BUG微软官方说明:http://support.microsoft.com/kb/975089/zh-cn

    其中造成此类问题的要点是:

    在还原数据库时,SQL Server 尝试恢复查询通知的所有事务,为数据库启动的一部分。但是,如果没有它们不再侦听的应用程序,则可能会失败查询通知的处理。这将导致 SQL 服务器到每个查询通知消息传递失败的错误日志文件中记录错误消息。如果有多个查询通知邮件传递失败,SQL Server 将需要很长的时间,该错误日志文件中记录所有错误消息。这导致了瓶颈,并会导致数据库要花很长时间的恢复。

    可能我英语不好,SQL Server 尝试恢复查询通知的所有事务,为数据库启动的一部分。这句话我没有理解。

    我个人想的处理手段是,如何让我在备份之前查询一下相关的视图,让我知道在还原的时候要恢复那些事务。这样我在备份之前可以提前删除掉此类东西。

    目前我知道的是
    sys.dm_qn_subscriptions 视图。是不是删除它就可以了?
    KILL QUERY NOTIFICATION SUBSCRIPTION ALL

    实际上我观察错误日志,大概记录了20万个错误。

    但是我sys.dm_qn_subscriptions 视图里面只有1万个记录。而且和那20万记录的主键都不一样。也就是说还原的时候并不是从sys.dm_qn_subscriptions 视图中提取。

    那是从哪里提取的数据?通过什么视图可以知道?

    2013年10月19日 13:58

全部回复

  • What kind of error do you have in sql log? Keep in mind that you can't delete any system object. What's your sql version by the way?
    2013年10月19日 16:10
  • 还原的时候错误日志记录大量的

    Query notification delivery could not send message on dialog '{F52E0749-0503-E311-94B4-00155D0A2505}.'. Delivery failed for notification '?<qn:QueryNotification xmlns:qn="http://schemas.microsoft.com/SQL/Notifications/QueryNotification" id="68227" type="change" source="database" info="restart" database_id="7" sid="0x01"><qn:Message>8d3d1d33-540f-459b-965f-bc7bd51a3f2f;fce60b9e-36d0-48a0-8afd-d6542755373a</qn:Message></qn:QueryNotification>' because of the following error in service broker: '找不到会话句柄 "F52E0749-0503-E311-94B4-00155D0A2505"。'.

    我不是要删除系统视图,我是通过系统视图找到相关数据。

    数据库版本为2008R2SP1 ,还是慢。我试验了2012不会有这个问题,他忽略了这些错误,所以快。但是问题的本质还没有找到。那20多万的数据是从哪里来的,我想在备份之前找到它,并处理掉他。而不是忽略它。


    • 已编辑 MyLucifer 2013年10月20日 11:21
    2013年10月20日 11:20