使用Trace Management Object監測和診斷SQL Server(二)
在這篇文章中我們將介紹一個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檔案。
TraceReplay replay = new TraceReplay();
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.Mode = ReplayMode.ConnectionLevelSync;
replay.Options.NumberOfReplayThreads = 2;
replay.Options.KeepResults = false;
3、TraceReplay類提供了5個事件,你可以通過提供你自己的event handler來進一步控制重放操作,其中最有用的event是ReplayEvent,它將在每個event被重放之前呼叫,你可以控制是否跳過該event的重放。下面的程式碼在設定了ReplayEvent的處理函式後啟動重放。請注意Start函式是同步操作,它將一直阻塞直到重放結束,所以如果你需要在中途停掉的話,你可以在event handler裡或者其它執行緒中呼叫Stop函式。
replay.ReplayEvent += new ReplayEventHandler(ReplayHandler);
replay.Start();
traceFile.Close();
4、這裡我們的ReplayHandler處理函式將對SPID進行過濾,所有SPID不是54的事件都將被忽略。程式碼中空的catch是為了避免某些event不含有SPID列會造成讀取該列失敗。
private static void ReplayHandler(Object sender, ReplayEventArgs args)
{
IDataRecordChanger recordChanger = args.CurrentRecord;
int spid = 0;
try
{
spid = (int)recordChanger["SPID"];
}
catch { }
if (spid != 54)
args.SkipRecord = true;
}
5、Replay的結果檔案可以用Profiler工具開啟檢視,當然你仍然可以通過TraceFile開啟,只要簡單的呼叫InitializeAsReader然後迴圈呼叫Read即可,下面的程式碼將打出TextData列的內容。
TraceFile traceFileOutput = new TraceFile();
traceFileOutput.InitializeAsReader(@"c:\replayoutput.trc");
while (traceFileOutput.Read())
{
Console.WriteLine(traceFileOutput["TextData"]);
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-604315/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用Trace Management Object監測和診斷SQL Server(一)ObjectSQLServer
- Oracle診斷案例-Sql_traceOracleSQL
- 使用SQL_TRACE進行資料庫診斷SQL資料庫
- 使用SQL_TRACE進行資料庫診斷(轉)SQL資料庫
- 使用SQL_TRACE進行資料庫診斷(1)SQL資料庫
- 使用SQL_TRACE進行資料庫診斷(2)SQL資料庫
- 使用SQL_TRACE進行資料庫診斷(zt)SQL資料庫
- 轉載:使用SQL_TRACE進行資料庫診斷SQL資料庫
- 使用SQL_TRACE進行資料庫診斷(轉載)SQL資料庫
- 【DB】使用SQL_TRACE進行資料庫診斷跟蹤SQL資料庫
- 使用SQL_TRACE /10046進行資料庫診斷SQL資料庫
- 【SQL_TRACE】SQL優化及效能診斷好幫手SQL優化
- Oracle最強有力的輔助診斷工具SQL_TRACEOracleSQL
- SQL Server TRACE FLAGSQLServer
- 使用隱含Trace引數診斷Oracle Data Pump故障Oracle
- SQL Server database mail問題診斷一例SQLServerDatabaseAI
- SQL SERVER 的分散式事務診斷工具DTCTesterSQLServer分散式
- Microsoft SQL Server Trace FlagsROSSQLServer
- 使用隱含Trace引數診斷Oracle Data Pump(expdp)故障Oracle
- SQL Server Management Studio (SSMS)SQLServerSSM
- SQL問題診斷SQL
- 如何收集用來診斷效能問題的10046 Trace(SQL_TRACE) (文件 ID 1523462.1)SQL
- 案例 - EBS SQL效能診斷SQL
- ORACLE中SQL TRACE和TKPROF的使用OracleSQL
- awr診斷分析之二
- ASM磁碟故障診斷(二)ASM
- SQL PLAN Management的測試SQL
- SQL SERVER:事件探查器與Server-side TraceSQLServer事件IDE
- sql trace 簡單測試SQL
- Sql Server系列:Microsoft SQL Server Management Studio模板資源管理器SQLServerROS
- sql_trace的使用SQL
- 2 Day DBA-管理方案物件-監控和優化資料庫-效能自我診斷:自動資料庫診斷監控物件優化資料庫
- 如何使用SQL_TRACE和10046事件SQL事件
- 使用sql trace工具和tkprof來跟會話SQL會話
- ORA-8103 "object no longer exists" 診斷與解決Object
- 【SQL】長事務診斷指令碼SQL指令碼
- 監控寶SQL Server效能監控的功能和配置SQLServer
- 使用SQL TRACE和TKPROF觀察SQL語句執行結果SQL