「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
SQL トレースを作成および管理し、トレースの結果を分析および再生するために使用するインターフェイス
この機能は、次のような多くの場面で活用できる。
ここでは、SQLプロファイラ(SQLトレース)で取得する
のベターユースを示す。
無駄なデータが混入する場合は、
個別にフィルタ設定を検討する。
ユーザが、ユーザのアカウントでDBに直接ログインする場合、
サーバにログインしたユーザと、サーバからログオフしたユーザを、
次のデータ列から確認できる。
「Duration」データ列は、クエリ全体が完了するまでにかかった時間を示す。
が検出された場合は、
インデックスが正しく利用されていない可能性があり、
性能的に問題になることが多い。
は、テーブルやインデックスをロックするため、
ロックタイムアウト、デッドロックの原因にもなる。
SQL Serverは、Oracleと比べた場合、
トランザクションの分離戦略の違いから、
ブロッキングによる問題が発生することが多く、
対策の際に
の確認が必要になること多い。
新しい情報を見ると、Deadlock Graphというイベント クラスがサポートされ、
それをトレースに追加することで、デッドロックが分析できるようになっている模様。
以下、古い情報。
の原因にもなる。
SQL Server トレース・ログ(バイナリ)をDBにインポートできる。
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[テーブル名]( [TextData] [ntext] COLLATE Japanese_CI_AS NULL, [BinaryData] [image] NULL, [DatabaseID] [int] NULL, [TransactionID] [bigint] NULL, [LineNumber] [int] NULL, [NTUserName] [nvarchar](256) COLLATE Japanese_CI_AS NULL, [NTDomainName] [nvarchar](256) COLLATE Japanese_CI_AS NULL, [HostName] [nvarchar](256) COLLATE Japanese_CI_AS NULL, [ClientProcessID] [int] NULL, [ApplicationName] [nvarchar](256) COLLATE Japanese_CI_AS NULL, [LoginName] [nvarchar](256) COLLATE Japanese_CI_AS NULL, [SPID] [int] NULL, [Duration] [bigint] NULL, [StartTime] [datetime] NULL, [EndTime] [datetime] NULL, [Reads] [bigint] NULL, [Writes] [bigint] NULL, [CPU] [int] NULL, [Permissions] [bigint] NULL, [Severity] [int] NULL, [EventSubClass] [int] NULL, [ObjectID] [int] NULL, [Success] [int] NULL, [IndexID] [int] NULL, [IntegerData] [int] NULL, [ServerName] [nvarchar](256) COLLATE Japanese_CI_AS NULL, [EventClass] [int] NULL, [ObjectType] [int] NULL, [NestLevel] [int] NULL, [State] [int] NULL, [Error] [int] NULL, [Mode] [int] NULL, [Handle] [int] NULL, [ObjectName] [nvarchar](256) COLLATE Japanese_CI_AS NULL, [DatabaseName] [nvarchar](256) COLLATE Japanese_CI_AS NULL, [FileName] [nvarchar](256) COLLATE Japanese_CI_AS NULL, [OwnerName] [nvarchar](256) COLLATE Japanese_CI_AS NULL, [RoleName] [nvarchar](256) COLLATE Japanese_CI_AS NULL, [TargetUserName] [nvarchar](256) COLLATE Japanese_CI_AS NULL, [DBUserName] [nvarchar](256) COLLATE Japanese_CI_AS NULL, [LoginSid] [image] NULL, [TargetLoginName] [nvarchar](256) COLLATE Japanese_CI_AS NULL, [TargetLoginSid] [image] NULL, [ColumnPermissions] [int] NULL, [LinkedServerName] [nvarchar](256) COLLATE Japanese_CI_AS NULL, [ProviderName] [nvarchar](256) COLLATE Japanese_CI_AS NULL, [MethodName] [nvarchar](256) COLLATE Japanese_CI_AS NULL, [RowCounts] [bigint] NULL, [RequestID] [int] NULL, [XactSequence] [bigint] NULL, [EventSequence] [int] NULL, [BigintData1] [bigint] NULL, [BigintData2] [bigint] NULL, [GUID] [uniqueidentifier] NULL, [IntegerData2] [int] NULL, [ObjectID2] [bigint] NULL, [Type] [int] NULL, [OwnerID] [int] NULL, [ParentName] [nvarchar](256) COLLATE Japanese_CI_AS NULL, [IsSystem] [int] NULL, [Offset] [int] NULL, [SourceDatabaseID] [int] NULL, [SqlHandle] [image] NULL, [SessionLoginName] [nvarchar](256) COLLATE Japanese_CI_AS NULL, [PlanHandle] [image] NULL ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[ImportTraceFile] @Param1 nvarchar(256), @Param2 nvarchar(30) AS BEGIN SET NOCOUNT ON; exec( 'INSERT INTO ' + @Param2 + ' SELECT * FROM fn_trace_gettable(''' + @Param1 + ''', default)') END GO
※ ストアドは必須でない(fn_trace_gettableを直接実行可能)。
上記ストアド(ImportTraceFile?)を実行
cmd.exe /c bcp "SELECT EventClass, Success, ApplicationName, HostName, LoginName, SPID, Duration, StartTime, EndTime, ObjectName, DatabaseName, ServerName, EventSubClass, TargetLoginName, RoleName, TargetUserName, TextData FROM テーブル名" queryout C:\Trace.txt -c -t , -r ,\n -T
トレースを作成および管理し、トレースの結果を分析および再生するために使用するGUI
実行プランをログをグラフィカルに表示する。
オプティマイザが実行プランを決定する。