如何计算sql digest

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:
【 TiDB 使用环境】

【概述】 场景 + 问题概述
各位好,我们已经在生产环境使用TIDB很久了,TIDB提供了很方便的后台查找慢sql,这十分的便捷和清晰。但是我们在实际告知业务方整改慢SQL时,遇到一个业务问题:我们只能提供慢SQL给业务方,但是业务方逻辑较为复杂,实际业务场景下很难知道SQL是根据什么条件拼接而成,为此我们做了一个agent,在业务方应用端采集慢SQL以及对应的接口,方法,参数。
因为agent采集的sql在后续清洗入库时,会将参数去掉(敏感信息等),所以当遇到慢sql时,还是很难将tidb后台的sql和业务端采集的sql关联起来,可能是因为去掉了参数,也可能是因为sql太长做了截取。这时我希望在业务方采集的慢sql清洗入库前,同时也计算出sql 指纹。这样就可以将两边的sql对应起来,从而通过慢sql可以精确定位触发位置和条件。
为此,我希望有tidb计算出sql的指纹的算法。我在github和这个社区搜过,似乎没有类似的问题。
请问能大致介绍一下计算指纹的思路,或者是遵循了什么规范计算的,或者是具体的代码所在位置不?谢谢
【应用框架及开发适配业务逻辑】

【背景】 做过哪些操作

【现象】 业务和数据库现象

【问题】 当前遇到的问题

【业务影响】

【TiDB 版本】

【附件】 相关日志及监控(https://metricstool.pingcap.com/)


若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

指纹计算 在 tidb-parser 里
https://github.com/pingcap/parser/blob/a9d82a55820622ba0d3c1dde238b582387b607cb/digester.go

注意有两种 一种是normalized 后的 就是把你的实参去掉, 还有一种是 根据实参计算的

多谢多谢

:call_me_hand::call_me_hand: