none
请教:QueryHash和QueryPlanHash是如何计算出的呢? RRS feed

  • 问题

  • QueryHash和QueryPlanHash是如何计算出的呢?有没有简单的办法计算某一T-SQL的这两个值呢?求各位牛人指导啊。
    2014年3月14日 13:43

全部回复

  • Checked this link http://technet.microsoft.com/en-us/library/cc645887(v=sql.105).aspx?
    2014年3月14日 13:48
  • 感谢rmiao的回复。

    我想问一下,如果不去执行这句T-SQL,有没有通过某些函数或者方法来得到这些值呢?毕竟如果要批量获取一定量的T-SQL的QueryHash和QueryPlanHash值,用这个方法还是比较低效的。


    2014年3月15日 13:43
  • 你可以查看执行计划, (ssms中的 Ctrl + L), 或者是类似下面这样, 中间的 SELECT * 是你要计算 hash 的 SQL, 这个只会生成 xml 执行计划, 不会实际执行, 在 xml 中有 QueryHash 和 QueryPlanHash 这两个属性结点

    SET SHOWPLAN_XML ON
    GO

    SELECT * FROM sys.tables
    GO
    SET SHOWPLAN_XML OFF;

    2014年3月17日 2:13
  • 你想要实现什么功能?查找当前Cache中的QueryHash值?那么旧用文章提到的DMV。如果是想知道微软的算法就比较难了。

    Please Mark As Answer if it is helpful.


    2014年3月17日 3:06
  • TO zjcxc.邹建:

    在实践中,这个方法看上去更靠谱些,但是这种方法仍然有2个弊端:

    1 这条T-SQL一定能在该环境下执行。(包含必要的数据对象)

    2 面对千万级的数据分析来说,效率仍然是个很大的问题。

    有没有基于算法的好办法呢?用于对T-SQL做参数化分类。

    2014年3月17日 3:29
  • LZ的意思是想修改sqlserver生成QueryHash的算法??
    2014年3月17日 5:43
  • 呵呵, 我也想知道有没有直接的算法

    不过有一点, QueryPlanHash这个应该是要根据环境才能生成的了, 这个涉及执行计划, 不同的环境执行计划不一定一样的

    QueryHash  可能是不依赖环境的

    2014年3月17日 6:13
  • 参考化, 你可以使用这个存储过程, 这个是不依赖环境的

    sp_get_query_template

    http://technet.microsoft.com/zh-cn/library/ms186908.aspx

    不过, 这个东东只能用于单个查询, 而我们业务稍微复杂一点的话, 一个批处理中多个查询还是很觉的

    2014年3月17日 6:17
  • 感谢回复,看样子也只能利用这些方法去实践了。
    2014年3月17日 6:31
  • 感谢rmiao的回复。

    我想问一下,如果不去执行这句T-SQL,有没有通过某些函数或者方法来得到这些值呢?毕竟如果要批量获取一定量的T-SQL的QueryHash和QueryPlanHash值,用这个方法还是比较低效的。


    That's what query optimizer does, but don't think MS will tell us how.
    2014年3月19日 3:39