在这篇文章中我们将介绍一个replay trace的示例,通过重放抓到的trace文件来诊断应用程序在SQL Server上运行是否有问题。
Replay trace示例
这个例子模仿你使用Profiler工具对抓到的trace文件进行重放,从而对SQL Server及你的应用程序进行诊断的过程。下面是详细的步骤和描述。
1、TraceReplay类是对trace file或trace table进行重放的关键类,你需要设置TraceReplay的三个属性,Connection属性代表你将在哪个数据库实例上进行重放,Source属性代表重放哪个文件或数据表,OutputFile代表重放的结果将输出到哪个文件,你也可以使用OutputTable属性指定将重放结果输出到数据表中。
下面的代码将使用capture trace例子里抓到的trace file作为重放的输入并将结果存为traceoutput.trc文件。
SqlConnectionInfo connInfo = new SqlConnectionInfo(".");
connInfo.UseIntegratedSecurity = true;
replay.Connection = connInfo;
TraceFile traceFile = new TraceFile();
traceFile.InitializeAsReader(@"c:\tracefile.trc");
replay.Source = traceFile;
TraceFile traceFileOutput = new TraceFile();
traceFileOutput.InitializeAsReplayOutputWriter(@"c:\replayoutput.trc");
replay.OutputFile = traceFileOutput;
2、TraceReplay类还有个比较重要的属性Options,你可以通过设置Options属性来控制如何重放。Options属性是个TraceReplayOptions对象,Profiler工具中重放配置对话框上的很多配置项都可以通过Options属性来设置。
下面的代码中设置了3个属性,Mode设置重放模式为连接层面上同步(另一个模式为SequentialReplay,指在所有连接上完全同步),NumberOfReplayThreads设置重放的线程数为2,KeepResults将控制在重放结果文件中是否出现SQL等的执行结果,比如你的trace里有select 1语句,那设置KeepResults为false将避免在结果文件中出现select 1返回的result set。
replay.Options.NumberOfReplayThreads = 2;
replay.Options.KeepResults = false;