タグ付けされた質問 「extended-events」

SQL Server拡張イベント(拡張イベント)は、サーバーシステムの一般的なイベント処理システムです。

1
SQL Serverからデフォルトで取得できるイベント情報は何ですか?
特定の事柄が発生したかどうか、いつ発生したか、誰がアクションを実行したかを人々が知りたい質問をよく見ます。多くの場合、SQL Serverはこの情報を独自に追跡しません。例えば: ストアドプロシージャを最後に実行したのは誰dbo.MyProcedureですか? テーブルのsalary列を更新したのは誰dbo.Employeesですか? 誰が最後にdbo.OrdersManagement Studioにテーブルを照会しましたか? ただし、SQL Server がデフォルトで一時的に追跡するイベントは他にもいくつかあり、次のような質問にネイティブに答えることができます。 AdventureWorksデータベースで自動拡張が最後に行われたのはいつで、どのくらいかかりましたか? 誰がdbo.EmployeeAuditDataいつテーブルを削除しましたか? 今日、メモリ関連のエラーがいくつ発生しましたか? この情報を取得するにはどうすればよいですか?

2
ブロックされたプロセスレポートの空のブロックプロセス
拡張イベントを使用してブロックされたプロセスのレポートを収集していますが、何らかの理由で一部のレポートでblocking-processノードが空です。これは完全なxmlです。 <blocked-process-report monitorLoop="383674"> <blocked-process> <process id="processa7bd5b868" taskpriority="0" logused="106108620" waitresource="KEY: 6:72057613454278656 (8a2f7bc2cd41)" waittime="25343" ownerId="1051989016" transactionname="user_transaction" lasttranstarted="2017-03-20T09:30:38.657" XDES="0x21f382d9c8" lockMode="X" schedulerid="7" kpid="15316" status="suspended" spid="252" sbid="0" ecid="0" priority="0" trancount="2" lastbatchstarted="2017-03-20T09:39:15.853" lastbatchcompleted="2017-03-20T09:39:15.850" lastattention="1900-01-01T00:00:00.850" clientapp="Microsoft Dynamics AX" hostname="***" hostpid="1348" loginname="***" isolationlevel="read committed (2)" xactid="1051989016" currentdb="6" lockTimeout="4294967295" clientoption1="671088672" clientoption2="128056"> <executionStack> <frame line="1" stmtstart="40" sqlhandle="0x02000000f7def225b0edaecd8744b453ce09bdcff9b291f50000000000000000000000000000000000000000" /> <frame line="1" …

1
SQL Profiler / perfmonの代わりにいつ拡張イベントを使用する必要がありますか?
拡張イベントは、より優れたテクノロジーであり、サーバーへの負荷が少ないように見えますが、SQL Profiler / perfmonには優れたツールがあります。また、拡張イベントには学習曲線が急勾配になっているようです。それぞれどのコンテキストで使用する必要がありますか?拡張されたイベントを利用するために、急な学習曲線を通過する価値はありますか?

2
SQL Server拡張イベントデータの視覚化
最近、SQL Serverの拡張イベントを使用して、さまざまなクエリのベンチマークと最適化に役立てています。これまでのところ、イベントデータを表示するには、SSMSの「ライブデータの監視」機能を使用していました。 私が抱えている問題は、ライブイベント機能が内部バッファーを使用しているように見えることです。つまり、クエリを数回実行して、情報をウィンドウに表示する必要がある場合があります。したがって、2つの部分からなる質問があります。 ライブフィードにイベントを表示する際のこの遅延を回避する方法はありますか?(私はローカルデータベースでこれを行っているので、パフォーマンスは問題になりません) ライブフィードは、拡張イベントデータを視覚化する最良の方法ですか?SSMSには、ユースケースに適した別のツールがありますか? 更新 要求に応じて、セッションは次のとおりです。 CREATE EVENT SESSION [Simple Query Benchmarking] ON SERVER ADD EVENT sqlserver.sql_batch_completed(SET collect_batch_text=(1) ACTION(sqlserver.query_hash,sqlserver.query_plan_hash,sqlserver.sql_text) WHERE ([package0].[equal_boolean]([sqlserver].[is_system],(0)) AND [package0].[greater_than_uint64]([duration],(1000)))) ADD TARGET package0.ring_buffer WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=1 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=ON,STARTUP_STATE=OFF) GO


1
拡張イベントに許可されるバインド済みアクションの最大数はいくつですか?
イベントセッションのイベントに「多すぎる」アクションを追加すると、次のエラーが表示されます。 メッセージ25639、レベル16、状態23、行1イベント "[イベント名]"は、許可されたバインドアクションの数を超えています。 許可されるアクションの数 イベントによって異なりますか? 実験に基づく答えは、27のようですsqlserver.rpc_completed。しかし、Microsoftのドキュメントにはその番号がありません。また、イベントごとに異なるようですsqlserver.sql_batch_completed。 失敗するコード例: CREATE EVENT SESSION [Test] ON SERVER ADD EVENT sqlserver.rpc_completed( ACTION( package0.callstack, package0.collect_cpu_cycle_time, package0.collect_current_thread_id, package0.collect_system_time, package0.event_sequence, package0.last_error, package0.process_id, sqlos.cpu_id, sqlos.numa_node_id, sqlos.scheduler_address, sqlos.scheduler_id, sqlos.system_thread_id, sqlos.task_address, sqlos.task_elapsed_quantum, sqlos.task_resource_group_id, sqlos.task_resource_pool_id, sqlos.task_time, sqlos.worker_address, sqlserver.client_app_name, sqlserver.client_connection_id, sqlserver.client_hostname, sqlserver.client_pid, sqlserver.context_info, sqlserver.database_id, sqlserver.database_name, sqlserver.is_system, sqlserver.nt_username, sqlserver.plan_handle)) GO DROP EVENT SESSION [Test] …

1
この拡張イベントXMLをできるだけ早く細断するにはどうすればよいですか?
SQL Server 2008 R2で拡張イベントセッションを作成しました。セッションが実行され、予想どおりにイベントが発生すると収集されます。 イベントが比較的少ないときにxmlを細断すると、パフォーマンスは許容範囲内になります。何千ものイベントがあるとき、xmlを細断処理す​​るのに時間がかかります。 私は何か間違ったことをしていることを知っています。XMLエンジンの内部について何を理解するのに十分な知識を持っていません。 これは私の拡張イベントセッションの定義です。 IF EXISTS ( SELECT 1 FROM sys.server_event_sessions dxs WHERE dxs.name = 'queries' ) BEGIN IF EXISTS ( SELECT 1 FROM sys.dm_xe_sessions dxs WHERE dxs.name = 'queries' ) BEGIN ALTER EVENT SESSION queries ON SERVER STATE = STOP; END DROP EVENT SESSION queries ON …

1
デッドロック検出のためのSQL拡張イベントセッション
<inputbuf>デッドロック拡張イベントセッションによってキャプチャされたデッドロックXMLの要素のサイズを増やす方法はありますか? アプリケーションコードで問題を特定するのに役立つ完全なクエリが必要です。 1024文字+/-に制限されているようです。増やすことはできますか? サンプルXMLについては、以下を参照してください。<inputbuf>要素のクエリテキストが選択リストの中央で途切れていることがわかります。 <deadlock> <victim-list> <victimProcess id="processc9c0829848" /> </victim-list> <process-list> <process id="processc9c0829848" taskpriority="0" logused="0" waitresource="PAGE: 5:1:40600276 " waittime="696" ownerId="255115931225" transactionname="SELECT" lasttranstarted="2019-04-24T09:29:25.950" XDES="0xc8dfa8da40" lockMode="S" schedulerid="13" kpid="8480" status="suspended" spid="245" sbid="2" ecid="0" priority="0" trancount="0" lastbatchstarted="2019-04-24T09:29:25.950" lastbatchcompleted="2019-04-24T09:29:25.950" lastattention="1900-01-01T00:00:00.950" clientapp="EntityFramework" hostname="MSR-PRD-BDB02" hostpid="43440" loginname="IUSR_BuildDB" isolationlevel="read committed (2)" xactid="255115931225" currentdb="5" lockTimeout="4294967295" clientoption1="671088672" clientoption2="128056"> <executionStack> <frame procname="adhoc" …

1
システム正常性拡張イベントからの誤ったプロセス使用率?
私は最近、システムヘルス拡張イベントイベントファイルに格納されているデータまたはメトリックの理解に取り組んでいます。 ここで提供されているように、システムヘルスを使用してパフォーマンスメトリックのデータコレクションを実装しようとしています という名前のシステムヘルスイベントから収集されるCPU使用率、その他のプロセス使用率などのメトリックを提供するレポートがあります。 scheduler_monitor_system_health_ring_buffer_recorded SQL CPU使用率としてレポートにリストされているフィールド "process_utilization"がほとんどの場合100を超える時間である理由をいくつかのビジーサーバーで理解できません。サーバーアクティビティモニターから確認した場合でも、常に100を超えるCPUが表示されます。 私はGithubでこの問題を提起しましたが、修正または応答がないようです。 したがって、私の質問は 記録されたシステムヘルスリングバッファーを使用して、サーバーのSQL CPU使用率の正確な数値を取得するにはどうすればよいですか? レポートには、レポートごとに計算された2つ未満のフィールドのカウンターも表示されます OtherProcessUtilとしての100-System_idle-process_utilization SystemUtilとしての100-system_idle これらのOtherProcessUtilおよびSystemUtilは何のために必要/役立ちますか? また、毎回メモリ使用率が常に100と表示されています。これも正しくないようです。誰か気づいたことがありますか? Idera&sentry [私がテストしたもの]のような他のツールでは、同じサーバーのCPU使用率が100%を超えていません。同じ負荷に対して並べて比較しました。

1
システムヘルスに「sql_exit_invoked」がある場合、それはどういう意味ですか?
SQL Server 2016 Standardサーバーの1つに問題があります。私は8つの本番サーバーを使用していますが、ログにトレースが記録されずにランダムにクラッシュするのはこのサーバーだけです。 system_healthを有効にしています。「sql_exit_invoked」であるシステムヘルス魔女の行があることに気づきました。 その行の詳細情報を見つけようとしています。どういう意味ですか?インターネットで見つけた唯一の情報は、SQLExit()が呼び出されたときに発生し、SQL 2012以降にのみログに記録されるということです(msdn Webサイトで利用可能なリンク)。 だから私の質問は:これを私のログで見るのを心配するべきですか?これは問題のあるサーバーでのみ見つかり、他の7つのサーバーでは見つかりません。(それらはすべてSQL Server 2016 Standardエディションです) 誰かがこれについてもっと情報をくれますか?

1
拡張イベントセッションでライブデータを監視できない
PCでSQL Server 2014 Developer Editionを実行しています。system_healthセッションでデータを表示しようとしています。SSMSでは、データベースに接続し、サーバー/管理/拡張イベント/セッションを拡張しました。AlwaysON_health(停止)とsystem_health(実行中)が表示されます。 system_healthセッションを右クリックすると、次のエラーが発生します。 ストレージは、提供されたパラメーターを使用して初期化できませんでした。(Microsoft.SqlServer.XEventStorage)「system_health」という名前の拡張イベントセッションが見つかりませんでした。セッションが存在し、開始されていることを確認してください。(Microsoft SQL Server、エラー:25728) system_healthを展開すると、ターゲットのpackage0.event_fileおよびpackage0.ring_bufferが表示されます。いずれかのターゲットを右クリックして[ターゲットデータの表示]を選択すると、次のエラーが発生します。 ストレージは、提供されたパラメーターを使用して初期化できませんでした。(Microsoft.SqlServer.XEventStorage)関数 'fn_MSXe_read_event_stream'が存在しないか、権限がないため、表示できません。(Microsoft SQL Server、エラー:15151) 関数は存在します。私はそれを実行できます: select * from fn_MSXe_read_event_stream('system_health', 0); 実行すると、次のエラーが発生します。 Msg 25728, Level 16, State 10, Line 6 The Extended Events session named "system_health" could not be found. Make sure the session exists and is started. system_healthセッションがあることを知っています。私はセッションのリストに表示されます: select * …

1
拡張イベントセッションからのパラメーター値の収集
アプリケーションで使用されるステートメントをトレースするために、拡張イベントを使用しています。必要な情報を収集するセッションを作成しましたが、使用したパラメーターの実際の値も知りたいと思っています。 私はこのトレースを非実稼働環境で実行しており、トレースによるパフォーマンスへの影響は許容されます。 すべてのクエリはHibernateから発信され、次の形式でパラメーター化されています。 SELECT a, b, c From Customer where CustomerId = @P0 これは私のセッション設定です。 CREATE EVENT SESSION [TracingForStatements] ON SERVER ADD EVENT sqlserver.sp_statement_completed ( ACTION ( sqlserver.session_id, package0.collect_system_time, sqlserver.transaction_id, package0.event_sequence ) WHERE ( sqlserver.database_id=555 ) ) ADD TARGET package0.ring_buffer(SET max_memory= 128000) WITH (EVENT_RETENTION_MODE = NO_EVENT_LOSS, MAX_DISPATCH_LATENCY = 1 SECONDS) キャプチャされたステートメントで使用されたパラメーターの実際の値をキャプチャするにはどうすればよいですか?出来ますか? …

1
EXECステートメントのquery_hashがゼロになるのはなぜですか?
私は、拡張イベントを使用してSQL Serverの監視システムをセットアップし、開発者向けの「運用フィードバック」として重いクエリを見つけています。私は、イベントを使用していますsp_statement_completedとsql_statement_completed、CPU_TIME上の述語フィルタを使用して、論理読み取り、など私は上の結果集計するために期待していたdatabase_nameし、query_hashすべてのインターネット上で多数の例で示されたように、結果に、私はそれが見るquery_hashすべての文のために0であります以下の表のように、EXECを使用します(読みやすくするためにタイムスタンプとクエリハッシュを短縮)。 name timestamp query_hash plan_handle statement sql_statement_completed 2016...6414 0 050056019600764... exec Shared.dbo.SyncFirm sql_statement_completed 2016...9946 0 06003d00e01e730... exec spSetUserAuth @userid; sql_statement_completed 2016...7184 0 0600e30028c9da0... exec spSetUserAuth @userid; sp_statement_completed 2016...0409 9826...578 0600c00028e6aa0... SELECT obfuscated_columns FROM dbo.SomeTable sp_statement_completed 2016...1448 8660...775 060084006d2d660... INSERT INTO dbo.SomeTable ( obfuscated_columns) EXEC(@sql) sql_statement_completed 2016...7752 0 0600f9006c23f03... exec …

2
拡張イベントとSQL監査-パフォーマンスへの影響
UPDATE/INSERT非常にアクティビティの多い特定のテーブルのステートメントを監視するために、データベースに監査証跡のようなシステムをセットアップしたいと思います。私の目の前には、SQL Serverの組み込み監査システムを使用するか、拡張イベントを使用するという2つのオプションがあります。 SQL Server Auditは内部的に拡張イベントを使用するため、拡張イベントの代わりに直接監査を使用すると、ある種のオーバーヘッドがあると思います。 どのシステムがサーバーに影響を与えているかを分析するためのテストを行う方法はありますか?XEセッションが作成されたときに実際に何が起こるかを知ることができれば、サーバーへの影響を分析するのに役立ちます。 トリガーを検討し、オーバーヘッドのためにそのオプションを省略しました。しかし、それはインターネットからの情報に基づいて決定されました。

2
SQL Serverのパフォーマンス:PREEMPTIVE_OS_DELETESECURITYCONTEXT主要な待機タイプ
昨日、SQL ServerのCPU使用率が高いことについて不満を言っていた顧客から電話がありました。SQL Server 2012 64ビットSEを使用しています。サーバーはWindows Server 2008 R2 Standard、2.20 GHz Intel Xeon(4コア)、16 GB RAMを実行しています。 犯人が実際にSQL Serverであることを確認した後、ここで DMVクエリを使用してインスタンスの上位の待機を調べました。上位2つの待機は(1)PREEMPTIVE_OS_DELETESECURITYCONTEXTと(2)SOS_SCHEDULER_YIELDでした。 編集:「トップ待機クエリ」の結果を次に示します(誰かが私の希望に反して今朝サーバーを再起動しましたが)。 私たちは多くの激しい計算/変換を行うので、私は理解できますSOS_SCHEDULER_YIELD。しかし、私はPREEMPTIVE_OS_DELETESECURITYCONTEXT待機タイプとそれが最も高い理由について非常に興味があります。 この待機タイプについて私が見つけることができる最良の説明/ディスカッションは、ここにあります。それは言及しています: PREEMPTIVE_OS_待機タイプは、データベースエンジン(通常はWin32 API)を離れ、さまざまなタスクのためにSQL Serverの外部でコードを実行する呼び出しです。この場合、以前にリモートリソースアクセスに使用されていたセキュリティコンテキストが削除されています。関連するAPIは、実際にはDeleteSecurityContext()という名前です 私の知る限り、リンクサーバーやファイルテーブルなどの外部リソースはありません。また、なりすましなどは一切行いません。バックアップが原因でスパイクが発生したり、ドメインコントローラに障害が発生したりする可能性はありますか? これが主な待機タイプになる原因は何ですか?この待機タイプをさらに追跡するにはどうすればよいですか? 編集2: Windowsセキュリティログの内容を確認しました。興味のあるエントリがいくつかありますが、これらが正常かどうかはわかりません。 Special privileges assigned to new logon. Subject: Security ID: NT SERVICE\MSSQLServerOLAPService Account Name: MSSQLServerOLAPService Account Domain: NT Service Logon ID: 0x3143c Privileges: SeImpersonatePrivilege …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.