Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Microsoft Fabric'te SQL veritabanı
Genişletilmiş Olaylar oturumuna dönüştürmek istediğiniz bir SQL İzleme betiğiniz varsa, eşdeğer bir Genişletilmiş Olaylar oturumu oluşturmak için bu konudaki yordamları kullanabilirsiniz. trace_xe_action_map ve trace_xe_event_map sistem tablolarındaki bilgileri kullanarak, dönüştürmeyi yapmak için gereken bilgileri toplayabilirsiniz.
Adımlar şunlardır:
SQL İzleme oturumu oluşturmak için mevcut betiği çalıştırın ve ardından izlemenin kimliğini alın.
Her SQL İzleme olay sınıfı ve ilişkili sütunları için eşdeğer Genişletilmiş Olaylar olaylarını ve eylemlerini bulmak için fn_trace_geteventinfo işlevini kullanan bir sorgu çalıştırın.
Kullanılacak filtreleri ve eşdeğer Genişletilmiş Olaylar eylemlerini listelemek için fn_trace_getfilterinfo işlevini kullanın.
Eşdeğer Genişletilmiş Olaylar olaylarını, eylemlerini ve koşullarını (filtreler) kullanarak el ile Genişletilmiş Olaylar oturumu oluşturun.
Trace ID'i elde etmek için
SQL İzleme betiğini Sorgu Düzenleyicisi'nde açın ve izleme oturumunu oluşturmak için betiği çalıştırın. Bu yordamı tamamlamak için izleme oturumunun çalışıyor olması gerekmediğini unutmayın.
İzlemenin kimliğini alın. Bunu yapmak için aşağıdaki sorguyu kullanın:
SELECT * FROM sys.traces; GOUyarı
İzleme Kimliği 1 genellikle varsayılan izlemeyi gösterir.
Genişletilmiş Etkinlikler eşdeğerlerini belirlemek için
Eşdeğer Genişletilmiş Olaylar olaylarını ve eylemlerini belirlemek için aşağıdaki sorguyu çalıştırın; burada trace_id önceki yordamda aldığınız izleme kimliğinin değerine ayarlanır.
Uyarı
Bu örnekte, varsayılan izleme (1) için izleme kimliği kullanılır.
USE MASTER; GO DECLARE @trace_id int; SET @trace_id = 1; SELECT DISTINCT el.eventid, em.package_name, em.xe_event_name AS 'event' , el.columnid, ec.xe_action_name AS 'action' FROM (sys.fn_trace_geteventinfo(@trace_id) AS el LEFT OUTER JOIN sys.trace_xe_event_map AS em ON el.eventid = em.trace_event_id) LEFT OUTER JOIN sys.trace_xe_action_map AS ec ON el.columnid = ec.trace_column_id WHERE em.xe_event_name IS NOT NULL AND ec.xe_action_name IS NOT NULL;Eşdeğer Genişletilmiş Olaylar olay kimliği, paket adı, olay adı, sütun kimliği ve eylem adı döndürülür. Bu çıkışı, bu konunun ilerleyen bölümlerinde yer alan "Genişletilmiş Olaylar oturumunu oluşturmak için" yordamında kullanacaksınız.
Bazı durumlarda, filtrelenen sütun, varsayılan olarak Genişletilmiş Olaylar'a dahil edilen bir olay veri alanıyla eşleştirilir. Bu nedenle, "Extended_Events_action_name" sütunu NULL olur. Bu durumda, hangi veri alanının filtrelenmiş sütuna eşdeğer olduğunu belirlemek için aşağıdakileri yapmanız gerekir:
NULL döndüren eylemler için betikteki hangi SQL İzleme olay sınıflarının filtrelenen sütunu içerdiğini belirleyin.
Örneğin, SP:StmtCompleted olay sınıfını kullanmış ve Süre izleme sütun adında bir filtre belirtmiş olabilirsiniz (SQL İzleme olay sınıfı kimliği 45 ve SQL İzleme sütun kimliği 13). Bu durumda, eylem adı sorgu sonuçlarında NULL olarak görünür.
Önceki adımda tanımladığınız her SQL İzleme olay sınıfı için eşdeğer Genişletilmiş Olaylar olay adını bulun. (Eşdeğer olay adından emin değilseniz, SQL İzleme Olay Sınıflarına Eşdeğer Genişletilmiş Olayları Görüntüleme başlığındaki sorguyu kullanın.)
Önceki adımda tanımladığınız olaylar için kullanılacak doğru veri alanlarını belirlemek için aşağıdaki sorguyu kullanın. Sorgu, "event_field" sütunundaki Genişletilmiş Olaylar veri alanlarını gösterir. Sorguda, event_name< değerini önceki adımda belirttiğiniz olayın adıyla değiştirin>.
SELECT xp.name package_name, xe.name event_name ,xc.name event_field, xc.description FROM sys.trace_xe_event_map AS em INNER JOIN sys.dm_xe_objects AS xe ON em.xe_event_name = xe.name INNER JOIN sys.dm_xe_packages AS xp ON xe.package_guid = xp.guid AND em.package_name = xp.name INNER JOIN sys.dm_xe_object_columns AS xc ON xe.name = xc.object_name WHERE xe.object_type = 'event' AND xc.column_type <> 'readonly' AND em.xe_event_name = '<event_name>';Örneğin, SP:StmtCompleted olay sınıfı, sp_statement_completed Genişletilmiş Etkinlikler olayıyla eşleşir. Sorguda olay adı olarak sp_statement_completed belirtirseniz, "event_field" sütunu varsayılan olarak olaya dahil edilen alanları gösterir. Alanlara baktığınızda bir "süre" alanı olduğunu görebilirsiniz. Filtreyi eşdeğer Genişletilmiş Olaylar oturumunda oluşturmak için "WHERE duration > 0" gibi bir koşul ekleyebilirsiniz. Örneğin, bu konudaki "Extended Events oturumunu oluşturma" yordamına bakın.
Genişletilmiş Olaylar oturumu oluşturmak için
Genişletilmiş Olaylar oturumu oluşturmak ve çıkışı bir dosya hedefine yazmak için Sorgu Düzenleyicisi'ni kullanın. Aşağıdaki adımlar, sorgunun nasıl oluşturulacağını gösteren açıklamalar içeren tek bir sorguyu açıklar. Tam sorgu örneği için bu konunun "Örnek" bölümüne bakın.
Olay oturumunu oluşturmak için deyimler ekleyin ve session_name yerine Genişletilmiş Olaylar oturumu için kullanmak istediğiniz adı yazın.
IF EXISTS(SELECT * FROM sys.server_event_sessions WHERE name='session_name') DROP EVENT SESSION [Session_Name] ON SERVER; CREATE EVENT SESSION [Session_Name] ON SERVER;"Genişletilmiş Olaylar eşdeğerlerini belirleme" yordamında çıkış olarak döndürülen Genişletilmiş Olaylar olaylarını ve eylemlerini ekleyin ve "Betikte kullanılan filtreleri belirlemek için" yordamında tanımladığınız önkoşulları (filtreleri) ekleyin.
Aşağıdaki örnekte, oturum kimliği ve süresi için filtreler içeren SQL:StmtStarting ve SP:StmtCompleted olay sınıflarını içeren bir SQL İzleme betiği kullanılır. "Genişletilmiş Olaylar eşdeğerlerini belirleme" yordamındaki sorgu için örnek çıktı aşağıdaki sonuç kümesini döndürdü:
Eventid package_name event columnid action 44 sqlserver sp_statement_starting 6 nt_username 44 sqlserver sp_statement_starting 9 client_pid 44 sqlserver sp_statement_starting 10 client_app_name 44 sqlserver sp_statement_starting 11 server_principal_name 44 sqlserver sp_statement_starting 12 session_id 45 sqlserver sp_statement_completed 6 nt_username 45 sqlserver sp_statement_completed 9 client_pid 45 sqlserver sp_statement_completed 10 client_app_name 45 sqlserver sp_statement_completed 11 server_principal_name 45 sqlserver sp_statement_completed 12 session_idBunu Genişletilmiş Olaylar eşdeğerine dönüştürmek için, sqlserver.sp_statement_starting ve sqlserver.sp_statement_completed olayları bir eylem listesiyle eklenir. Koşul deyimleri WHERE yan tümceleri olarak eklenir.
ADD EVENT sqlserver.sp_statement_starting (ACTION ( sqlserver.nt_username, sqlserver.client_pid, sqlserver.client_app_name, sqlserver.server_principal_name, sqlserver.session_id ) WHERE sqlserver.session_id = 59 ), ADD EVENT sqlserver.sp_statement_completed (ACTION ( sqlserver.nt_username, sqlserver.client_pid, sqlserver.client_app_name, sqlserver.server_principal_name, sqlserver.session_id ) WHERE sqlserver.session_id = 59 AND duration > 0 )Zaman uyumsuz dosya hedefini ekleyin ve dosya yollarını çıkışı kaydetmek istediğiniz konumla değiştirin. Dosya hedefini belirtirken, bir günlük dosyası ve meta veri dosyası yolu eklemeniz gerekir.
ADD TARGET package0.asynchronous_file_target( SET filename='c:\temp\ExtendedEventsStoredProcs.xel', metadatafile='c:\temp\ExtendedEventsStoredProcs.xem');
Sonuçları görüntülemek için
Çıkışı görüntülemek için sys.fn_xe_file_target_read_file işlevini kullanabilirsiniz. Bunu yapmak için, dosya yollarını belirttiğiniz yollarla değiştirerek aşağıdaki sorguyu çalıştırın:
SELECT *, CAST(event_data as XML) AS 'event_data_XML' FROM sys.fn_xe_file_target_read_file('c:\temp\ExtendedEventsStoredProcs*.xel', 'c:\temp\ExtendedEventsStoredProcs*.xem', NULL, NULL);Uyarı
Olay verilerini XML olarak dönüştürmek isteğe bağlıdır.
sys.fn_xe_file_target_read_file işlevi hakkında daha fazla bilgi için bkz. sys.fn_xe_file_target_read_file (Transact-SQL).
IF EXISTS(SELECT * FROM sys.server_event_sessions WHERE name='session_name') DROP EVENT SESSION [session_name] ON SERVER; CREATE EVENT SESSION [session_name] ON SERVER ADD EVENT sqlserver.sp_statement_starting (ACTION ( sqlserver.nt_username, sqlserver.client_pid, sqlserver.client_app_name, sqlserver.server_principal_name, sqlserver.session_id ) WHERE sqlserver.session_id = 59 ), ADD EVENT sqlserver.sp_statement_completed (ACTION ( sqlserver.nt_username, sqlserver.client_pid, sqlserver.client_app_name, sqlserver.server_principal_name, sqlserver.session_id ) WHERE sqlserver.session_id = 59 AND duration > 0 ); ADD TARGET package0.asynchronous_file_target (SET filename='c:\temp\ExtendedEventsStoredProcs.xel', metadatafile='c:\temp\ExtendedEventsStoredProcs.xem');
Example
IF EXISTS(SELECT * FROM sys.server_event_sessions WHERE name='session_name')
DROP EVENT SESSION [session_name] ON SERVER;
CREATE EVENT SESSION [session_name]
ON SERVER
ADD EVENT sqlserver.sp_statement_starting
(ACTION
(
sqlserver.nt_username,
sqlserver.client_pid,
sqlserver.client_app_name,
sqlserver.server_principal_name,
sqlserver.session_id
)
WHERE sqlserver.session_id = 59
),
ADD EVENT sqlserver.sp_statement_completed
(ACTION
(
sqlserver.nt_username,
sqlserver.client_pid,
sqlserver.client_app_name,
sqlserver.server_principal_name,
sqlserver.session_id
)
WHERE sqlserver.session_id = 59 AND duration > 0
)
ADD TARGET package0.asynchronous_file_target
(SET filename='c:\temp\ExtendedEventsStoredProcs.xel', metadatafile='c:\temp\ExtendedEventsStoredProcs.xem');
Ayrıca Bkz.
SQL İzleme Olay Sınıflarına Eşdeğer Genişletilmiş Olayları Görüntüleme