作者:markjiang7m2 原文地址:https://www.cnblogs.com/markjiang7m2/p/10980191.html
背景
在上星期,公司负责support的同事接到反馈说某个项目生产环境上的某个页面加载很慢,一般遇到这种问题,我们的support同事都会先上数据库抓一下profiler,然后再让我们开发的找原因。但是,当我尝试打开这个profiler文件的时候,却弹出了错误提示:
找不到跟踪定义文件Microsoft SQL Server TraceDefinition 13.0.0.xml(用于打开的跟踪文件x.trc)。请连接到Microsoft SQL Server 13.0.0服务器并将文件Microsoft SQL Server TraceDefinition 13.0.0.xml复制到您的C:Program Files (x86)Microsoft SQL Server110ToolsProfilerTraceDefinitions目录,或者将事件探查器连接到该服务器以自动生成文件。然后重新打开该跟踪文件。
然后点击确认,又弹出第二个提示框
无法打开文件。文件可能已损坏,也可能是数据格式不正确。
好吧,我承认我的第一反应是这个文件损坏了,而不是觉得是sql server版本的问题。
然后我做了一个测试,在本地远程连接到测试服务器进行抓取profiler,并保存文件,一切都正常。但是当我重新打开这个文件的时候,我又得到了之前的错误提示,我才考虑可能是因为版本的问题。
解决方案
support的同事跟我说,这个文件是要在SQL Server 2016上面才能打开的,因为生成环境用的是2016。当然,他没有说错,是可以这么操作的,只是这样,好像比较麻烦,而且感觉这操作还有点笨。。 好吧,其实SQL Server在第一个提示中已经给了解决方案了,只是被我习惯性地忽略了。
我本地安装的实例是SQL Server 2012,然后服务器上面数据库实例是SQL Server 2016,所以我本地就缺少了2016的跟踪定义文件,只要把这个文件复制到我本地,就可以正常打开2016的profiler文件了。
- 2016 profiler的跟踪定义文件路径
C:Program Files (x86)Microsoft SQL Server130ToolsProfilerTraceDefinitionsMicrosoft SQL Server TraceDefinition 13.0.0.xml
- 本地路径
C:Program Files (x86)Microsoft SQL Server110ToolsProfilerTraceDefinitions
这个解决方案也同样用于SQL Server 2008。
延伸
其实还可以注意到,如果我们直接在SQL Server 2012中连接2016抓取profiler时,没有任何的模板可以选择,这就需要我们每次都重新设置跟踪的选项,很是麻烦。
这个问题跟上面的问题有点类似,是因为SQL Server 2012 profiler中缺少了2016 profiler的模板文件,所以只要将2016 profiler上的模板文件复制到本地就可以了。
这次是需要将整个文件夹一起复制下来
- 2016 profiler的跟踪定义文件路径
C:Program Files (x86)Microsoft SQL Server140ToolsProfilerTemplatesMicrosoft SQL Server130
- 本地路径
C:Program Files (x86)Microsoft SQL Server110ToolsProfilerTemplatesMicrosoft SQL Server
重新打开profiler就可以看到2016的模板了。
再延伸一下。经常使用profiler的朋友应该都会遇到这样的情况,SQL Server提供的模板跟自己想要的不太一样,这个时候,我们就可以新建属于自己的模板了。
- 在 “文件” 菜单上,单击 “模板”,再单击 “新建模板”
- 选择服务器类型,不同版本服务器之间的模板是不通用的
- 还可以基于现有的模板进行改造
建立好的profiler模板还可以导出成 .trc
文件,再导入到其它机器上面使用
总结
今天分享给大家的文章不是什么干货,只是记录一下在我工作中遇到的问题和解决方案,希望对各位有用。也算是一点小技巧吧,对于经常使用profiler的朋友来说确实是能省下不少功夫的。今天就先跟大家介绍到这里,希望大家能持续关注我们。