设为首页 收藏本站
查看: 1727|回复: 0

[经验分享] 使用SQL Nexus整合----定制SQL Nexus

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-7-18 10:22:24 | 显示全部楼层 |阅读模式
这节介绍如何定制SQL Nexus及RML Utilities,来帮助你进行分析或重做数据分析。包含如下内容:
  • 使用ReadTrace.exe导入SQL Trace文件
  • 为SQL Nexus创建定制报告
  • 使用命令行选项运行SQL Nexus
  • 写自定义T-SQL查询以便更快速地进行数据分析
  • 使用OSTRESS.EXE在SQL Server实例上运行压力测试
使用ReadTrace.exe
SQL Nexus可以把每个SPID的活动分解到单独的.trc文件,但是这些文件仅指向%TEMP%\RML文件夹。你有两个选择:把%TEMP%路径改到不同的磁盘或使用ReadTrace.exe生成.trc文件到所需的路径。第一个选择有点疯狂,因为它会影响用户上下文下运行的所有应用程序。有时,可用磁盘空间不够容纳ReadTrace.exe产生的Trace文件。这就需要使用命令行选项,RML Utilities提供的第三种选择可以在导入数据时添加SPID、Hostname及Application过滤,以减少ReadTrace.exe产生的Trace文件。可以在RML Utilities命令提示下访问ReadTrace.exe。使用ReadTrace导入SQL Trace文件的一些常见必需参数的默认值如下面说明:
  • -o----------在当前路径下生存输出文件,除非另指定
  • -S----------如果-S参数未指定,那么默认选项是连接默认的SQL Server实例
  • -d----------把SQL Trace数据装载进一个叫PerfAnalysis的数据库,除非显式指定数据库名称
  • -E----------连接时使用Windows授权,除非另指定
其中一种情况,即当你分析一个死锁时,你或许需要单独使用ReadTrace.exe来把SQL Trace数据导入SQL Nexus数据库。分析死锁时,死锁图表不能充分确定为何session仍然占用锁,为何session起初需要锁定那个对象。这时,你需要追踪该session执行的语句的顺序。要做到这点,你可以使用如下命令导入涉及死锁的session的数据。这条命令将SQL Trace数据导入到一个名叫dbRMLUtilDemo的数据库,过滤条件是SPID 53和55相关的活动:
readtrace -S. -E -ddbRMLUtilDemo -I"D:\RML\RMLUtil_demo.trc" -A"!SQLCMD" -s53 -s55 -MF -o"D:\RML\output" -f
上面这条命令也可以排除通过SQLCMD实用工具执行的查询所生成的事件,SQLCMD工具是PSSSIAG或SQLDIAG用于执行T-SQL查询收集诊断数据的工具。另外,每个SPID/Session ID的单独的trace文件将会生成到D:\RML\output文件夹中。你也可以使用-H参数添加hostname过滤条件。
注意,你可以通过RML Utilities命令提示使用Readtrace.exe /?来查看可用的参数,或使用RML Utilities Help文档来获取参数列表。
为SQL Nexus创建定制报告
你可以使用SQL Nexus数据库中的表创建定制报告。报告结构本身很简单。它使用共享数据源sqlnuxus.rds,因此,当你使用SQL Nexus工具的下拉菜单改变数据库名称时,可以切换数据库上下文。一旦你建好定制报告,你就可以把它放在%appdata%\SQLNexus\Reports下面。SQL Nexus启动后,会自动获取这些报告。如果你熟悉SSRS设计报表,那么这对于你来说就小菜一碟。你可以使用VS Reporting Serveices项目创建报告。当你创建报告项目时,你需要确认目标Server版本,要设置为SQL Server 2008/R2或以上版本。
使用命令提示运行SQL Nexus
这个选项很少使用,但是在自动化诊断数据分析时却非常有用。在命令提示窗口使用sqlnexus.exe /?会返回该工具所能接受的命令行参数列表。下面的命令会获取C:\temp\sqldiag\output下面的文件,并把把诊断数据导入到sqlnuxus_cmd数据库。把诊断数据导入到数据库后,/X会引起SQL Nexus退出。
Sqlnexus.exe /S. /D"sqlnexus_cmd" /E /I"C:\temp\sqldiag\output" /X
记住,你最后一次在GUI运行SQL Nexus时保存的设置要在指定命令行选项时使用。
在SQL Nexus数据库中创建自定义表
假定你决定收集一个T-SQL脚本的输出,而该脚本不是Pssdiag和Sqldiag Manager自带的默认采集器的一部分。收集诊断数据后,你需要使用喜欢的文本编辑器手动地钻研文本数据,来为你正在解决的问题创建有用的假设。SQL Nexus可以把数据导入到表中,让你能够查询导入的数据并节省你宝贵的时间。
Rowset Importer负责把数据从文本文件导入到SQL Nexus数据库。SQL Nexus通过Edit Custom Rowset选项将这项功能扩展到其他包含诊断数据的文本文件,在工具的主页面的左侧可以看到这个选项。图12-19显示了Manage Custom Rowset对话窗口,点击Edit Custom Rowset链接时可以启动它。
SouthEast.jpg
这里你可以指定需要导入数据的表名(Rowset Name)和identifier。Identifier是最重要的关键字,因为它让Rowset Importer知道如何识别你想导入的数据。这意味着,当你在创建定制行集时,在SELECT查询把诊断数据导入输出文件之前,应该通过PRINT语句提前把你指定的Identifier名字输出。对于图12-19中所示的例子,诊断查询的输出将事先用如下命令完成:
print '—RequestsRowset'
如果你视图导入查询输出,有数据类型长度大于8000的列,导入会失败,在SQL Nexus日志文件中会有如下错误:
SQLNexus Information: 0: RowsetImportEngine Error: An unexpected error has occurred: System.Data.SqlClient.SqlException: The size (8192) given to the column 'query_text' exceeds the maximum allowed for any data type (8000).
SQL Nexus 3.0.0没有提供选项让你能够使用UI添加自定义列数据类型。你在Manage Custom Rowset对话框里定义定制行集会把所有列视为varchar类型。要改变这种行为,可以直接修改C:\Users\<user name>\AppData\Roaming\sqlnexus\TextRowsetsCustom.xml,来添加或修改你想要的数据类型。在使用定制行集时,要记住如下要点:
  • 如果在收集的结果集中有超过varchar(8000)的数据,那么在导入数据之前要确保修改TextRowsetsCustom.xml文件。
  • 为你收集的每个行集提供一个唯一的标识符。你不会想让Importer混合搭配你要导入的数据。
  • 使用GETDATE()添加一个运行时列,或者在一个循环里为脚本抓取数据添加一个变量,以便更容易地追踪趋势,而不预言。
  • 结果集中收集的所有的列都必须命名。
  • 在结果集中避免CR/LFs (Carriage Returns/Line Feeds回车/换行),例如不要使用CHAR(13),因为这会严重误导Importer,因为它会把CR/LFs看成是行末指示符。
  • 要么通过Management Studio运行数据采集脚本直接把数据抓取到一个文件,要么使用sqlcmd -W参数,如果你使用sqlcmd抓取数据。-W会确保移除结果集中的结尾空格。
写自定义查询
你可以写自定义T-SQL查询来获取并汇总SQL Nexus表中的数据。下面的查询返回一个聚合,SUM所有的CPU/Duration/Reads/Writes:
  • select a.hashid,b.OrigText,  
  • SUM(a.duration) as SumDuration,  
  • SUM(a.Reads) as SumReads,  
  • SUM(a.Writes) as SumWrites,  
  • SUM(a.CPU) as SumCPU,  
  • MAX(a.duration) as MAXDuration,  
  • MAX(a.Reads) as MAXReads,  
  • MAX(a.Writes) as MAXWrites,  
  • MAX(a.CPU) as MAXCPU,  
  • MIN(a.duration) as MINDuration,  
  • MIN(a.Reads) as MINReads,  
  • MIN(a.Writes) as SumWrites,  
  • MIN(a.CPU) as MINCPU,  
  • AVG(a.duration) as AVGDuration,  
  • SUM(a.Reads) as AVGReads,  
  • Sum(a.Writes) as AVGWrites,  
  • SUM(a.CPU) as AVGCPU,  
  • GROUPING(a.hashid) as [GroupNo]  
  • from readtrace.tblBatches a  
  • inner join readtrace.tblUniqueBatches b  
  • on a.HashID = b.HashID  
  • where EndTime is not null  
  • group by a.hashid,b.OrigText WITH ROLLUP  

如果你感觉冒险,那么你可以随意写查询切分SQL Nexus表中的数据。这不仅有助于减少数据分析期间执行重复的任务所需的时间量,还有助于帮你熟悉表架构。一旦你熟悉SQL Nexus数据库中的表架构,那么如果所需数据都已经抓取到,你就会发现解决常见SQL Server性能问题并不是一件令人怯步的任务。常言道,知此知彼(As they often say, knowing is half the battle!)。
OSTRESS可执行程序
OSTRESS是一个可扩展的基于ODBC的应用程序,它可以施压或回放(replay)数据库命令。你可以指定一个查询,通过一个命令行参数,.SQL脚本或.RML文件。Replay模式使用.RML文件,有ReadTrace生成,因为它处理SQL Server trace文件。工具,如SQLCMD或OSQL,不能落实压力测试,因为它需要为每个线程配备一个单独的进程,并且很难控制。如果你不想写自定义压力测试代码,那么RML Utilities自带的OSTRESS可执行程式就是一个很好的选择。Distributed Replay Client是SQL Server 2012的一个新功能,也很有用,但是如果你没有为SQL Server 2012实例配置Distributed Replay,那么OSTRESS是一个非常有用的工具。它是一个基于命令行的工具,你可以把它作为自动化处理的一部分,或者测试脚本的一部分。
下面的代码过滤Session ID 51、52及53,并排除SQLDIAG或主机MyLaptop产生的事件。输出文件夹包含SPID 51、52和53的.RML文件,可以使用OSTRESS产生负载:
readtrace -S. -E -ddbRMLUtilDemo -I"D:\RML\RMLUtil_demo.trc" -A"!SQLCMD" –s51 –s52 -s53 -o"D:\RML\output" –H"!MyLaptop" –A"!SQLDIAG
除压力测试之外,你或许想插入随机事件。OSTRESS对于再现查询超时或查询取消也很有帮助。RML Utilities Help文件对该工具有详细的文档说明。关于OSTRESS,要记住如下:
  • OSTRESS参数区分大小写
  • 参数必须用(-)或斜杠(/)隔开
  • 包含空格或特殊字符的参数应该放在双引号里
  • 参数指示符和值之间不允许有空格
OSTRESS让你可以指定连接数及特定查询(或RML文件里的查询)的迭代次数。下面的例子对默认实例执行SELECT @@VERSION,使用50个线程,100次迭代:
Ostress.exe -Q"Select @@VERSION" -oc:\temp\output -n50 -r100
在RML Utilities命令提示中使用ostress.exe -?将会返回其可用的参数列表。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-22288-1-1.html 上篇帖子: 使用SQL Nexus整合----熟悉SQL Nexus 下篇帖子: 使用SQL Nexus整合----解决日常问题 Nexus
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表