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ı
Bu makalede Genişletilmiş Olaylar hedeflerinin ne zaman ve nasıl kullanılacağı açıklanmaktadır. Makalede her hedef için şunlar açıklanmaktadır:
- Olay verilerini toplama ve raporlama yetenekleri
- Hedefi kullanan etkinlik oturumlarına örnekler
Aşağıdaki tabloda, her hedef türün farklı SQL platformlarında kullanılabilirliği açıklanmaktadır.
| Hedef türü | SQL Sunucusu | Azure SQL Veritabanı ve SQL Veritabanı içinde Fabric | Azure SQL Yönetilen Varlık |
|---|---|---|---|
| etkinlik_dosyası | Evet | Evet | Evet |
| ring_buffer | Evet | Evet | Evet |
| event_stream | Evet | Evet | Evet |
| Histogram | Evet | Evet | Evet |
| etkinlik_sayacı | Evet | Evet | Evet |
| çift_eşleştirme | Evet | Hayı | Hayı |
| etw_classic_sync_target | Evet | Hayı | Hayı |
Farklı belirtilmediği sürece hedefler zaman uyumsuz olarak aldıkları verileri işler.
Bu makaleden en iyi şekilde yararlanmak için şunları yapmalısınız:
- Hızlı Başlangıç: Genişletilmiş Olaylar bölümünde açıklandığı gibi Genişletilmiş Olaylar'ın temellerini öğrenin.
- SQL Server Management Studio'nun (SSMS) son sürümünü kullanın.
event_file hedefi
Hedef, event_file olay oturumu çıkışını bellek arabelleklerinden bir disk dosyasına veya Azure Depolama'daki bir bloba yazar.
filenameparametresiniADD TARGETifadesinde belirtirsiniz. Dosya uzantısı olmalıdırxel.Seçtiğiniz dosya adı, sistem tarafından tarih ve saat tabanlı bir sayısal değer eklenerek
xeluzantısıyla birlikte oluşturulan bir ön ek olarak kullanılır.İsteğe bağlı olarak parametresini
MAX_FILE_SIZEbelirtebilirsiniz. Yeni bir dosya oluşturulmadan önce dosyanın büyüyebileceği en büyük boyutu megabayt (MB) cinsinden tanımlar.İsteğe bağlı olarak, geçerli dosyaya ek olarak dosya sisteminde tutulacak en fazla dosya sayısını belirleme seçeneğini belirtebilirsiniz
MAX_ROLLOVER_FILES. Varsayılan değer şudur:UNLIMITED.MAX_ROLLOVER_FILESdeğerlendirildiğinde, dosya sayısıMAX_ROLLOVER_FILESayarını aşarsa, eski dosyalar silinir.
Önemli
Oturuma eklenen olaylara bağlı olarak, hedef tarafından event_file oluşturulan dosyalar hassas veriler içerebilir. Gereksiz okuma erişimi vermekten kaçınmak için dosya sistemini dikkatlice gözden geçirin ve devralınan erişim de dahil olmak üzere tek tek .xel dosyalar üzerindeki izinleri paylaşın.
En az ayrıcalık ilkesini izleyin. Hassas verileri yanlışlıkla toplama riskini azaltmak için, hassas veriler toplayabilirlerse uzun süre çalışan olay oturumlarından kaçının.
Uyarı
Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği, parametrenin değeri olarak yalnızca filename blobları destekler. Azure SQL Veritabanı, Azure Fabric SQL veritabanı veya Azure SQL Yönetilen Örneği için event_file kod örneği arıyorsanız, Azure Depolama'da event_file hedefiyle olay oturumu oluşturma konusuna bakın.
Yerel dosya sisteminde event_file hedefiyle bir olay oturumu oluşturun.
SSMS veya T-SQL ile yerel dosya depolama kullanarak bir event_file etkinlik oturumu oluşturmaya yönelik bir kılavuz için bkz Hızlı Başlangıç: Genişletilmiş Olaylar.
Azure Depolama'da event_file hedefiyle olay oturumu oluşturma
Azure Depolama'da depolama hesabı oluşturma hakkında ayrıntılı bir açıklama için bkz. Depolama hesabı oluşturma. Azure portalı, PowerShell, Azure SQL, ARM şablonu veya Bicep şablonu kullanarak depolama hesabı oluşturabilirsiniz. Şu hesapları kullanın:
- Bir
Standard general-purpose v2hesaptır. -
Hotkullanır. - Azure Sanal Makinesi'nde (Azure VM) SQL Server kullanılıyorsa, depolama hesabı Azure VM'nizle aynı Azure bölgesinde olmalıdır.
- Hiyerarşik ad alanı etkin değildir.
Ardından Azure portalını kullanarak bu depolama hesabında bir kapsayıcı oluşturun . PowerShell veyaAzure CLI kullanarak da kapsayıcı oluşturabilirsiniz.
Oluşturduğunuz depolama hesabının ve kapsayıcının adlarını not edin. Bunları aşağıdaki adımlarda kullanabilirsiniz.
Olay verilerini okumak ve yazmak için veritabanı altyapısı belirli bir erişim gerektirir. Bu erişimi, seçtiğiniz kimlik doğrulama türüne bağlı olarak farklı şekilde verirsiniz: yönetilen kimlik veya paylaşılan erişim imzası (SAS) belirteci ile gizli dizi tabanlı kimlik doğrulaması.
Veritabanı altyapısı, Azure Depolama'da kimlik doğrulaması yapmak için sunucu kapsamlı bir kimlik bilgisi veya veritabanı kapsamlı kimlik bilgisi gerektirir. Bu kimlik doğrulaması hangi tür kimlik doğrulamasının kullanılacağını bildirir ve gizli anahtar tabanlı kimlik doğrulaması için bir gizli anahtar sağlar. Bu kimlik bilgilerinin oluşturulması için veritabanı izni gerekir CONTROL .
SQL Server ve Azure SQL Yönetilen Örneği için bu izne master veritabanında gereklidir. Varsayılan olarak, db_owner veritabanı rolünün master üyeleri ve örnekteki sysadmin sunucu rolü üyeleri tarafından izin tutulur. Azure SQL Veritabanı ve Fabric'teki SQL veritabanı için bu izin, veritabanı sahibi dbo, veritabanı rolü db_owner üyeleri ve mantıksal sunucunun yöneticisi tarafından tutulur.
Kimlik bilgisi oluşturulduktan sonra, olay oturumu oluşturmanın kalan adımları için CONTROL iznine gerek yoktur.
İzinler sayfasında gereken belirli izinleri görün.
Yönetilen kimliği kullanarak erişim izni verme
Microsoft Entra kimlik doğrulaması ile yönetilen kimlik kullanıyorsanız, kapsayıcı için Depolama Blob Verileri Katkıda Bulunanı RBAC rolünü veritabanı motoru tarafından kullanılan yönetilen kimliğe atarsınız. Daha fazla bilgi için SQL platformunu temel alan aşağıdakilere bakın:
- Azure SQL Veritabanı mantıksal sunucusunun yönetilen kimliği.
- Azure SQL yönetilen örneğinin yönetilen kimliği.
- SQL Server örneğinizi barındıran Azure VM'nin yönetilen kimliği. Daha fazla bilgi için bkz. Azure kaynakları için yönetilen kimlikler Azure sanal makineleriyle nasıl çalışır?
- Arc özellikli SQL Server örneğinin yönetilen kimliği.
RBAC rol ataması gerçekleştikten sonra aşağıdaki adımları kullanın:
T-SQL kullanarak bir kimlik bilgisi oluşturun.
Aşağıdaki T-SQL toplu işlemini yürütmeden önce aşağıdaki değişikliği yapın:
-
https://<storage-account-name>.blob.core.windows.net/<container-name>öğesinin her üç örneğinde de,<storage-account-name>’yi depolama hesabınızın adıyla ve<container-name>’yi kapsayıcınızın adıyla değiştirin. URL'nin sonunda eğik çizgi olmadığından emin olun.
Sunucu düzeyinde kimlik bilgisi oluşturma: (SQL Server, Azure SQL Yönetilen Örneği için geçerlidir)
SSMS gibi bir istemci aracı kullanarak yeni bir sorgu penceresi açın, olay oturumunu oluşturmak istediğiniz örnekteki veritabanına bağlanın
masterve aşağıdaki T-SQL toplu işlemini yapıştırın./* The name of the credential must match the URL of the blob container. */ IF EXISTS (SELECT 1 FROM sys.credentials WHERE name = 'https://<storage-account-name>.blob.core.windows.net/<container-name>') DROP CREDENTIAL [https://<storage-account-name>.blob.core.windows.net/<container-name>]; /* When using managed identity, the credential does not contain a secret */ CREATE CREDENTIAL [https://<storage-account-name>.blob.core.windows.net/<container-name>] WITH IDENTITY = 'MANAGED IDENTITY';Veritabanı kapsamlı bir kimlik bilgileri oluşturma: (Azure SQL Veritabanı, Azure SQL Yönetilen Örneği, Fabric'teki SQL veritabanı için geçerlidir)
SSMS gibi bir istemci aracı kullanarak yeni bir sorgu penceresi açın, olay oturumunu oluşturduğunuz kullanıcı veritabanına bağlanın ve aşağıdaki T-SQL toplu işlemini yapıştırın. Veritabanına değil, kullanıcı veritabanınıza bağlı olduğunuzdan
masteremin olun./* The name of the credential must match the URL of the blob container. */ IF EXISTS (SELECT 1 FROM sys.database_credentials WHERE name = 'https://<storage-account-name>.blob.core.windows.net/<container-name>') DROP DATABASE SCOPED CREDENTIAL [https://<storage-account-name>.blob.core.windows.net/<container-name>]; /* When using managed identity, the credential does not contain a secret */ CREATE DATABASE SCOPED CREDENTIAL [https://<storage-account-name>.blob.core.windows.net/<container-name>] WITH IDENTITY = 'MANAGED IDENTITY';-
Ardından, Azure Depolama'da event_file hedefi olan SSMS'de bir olay oturumu oluşturmak için adımları izleyin.
Paylaşılan erişim imzası (SAS) belirteci kullanarak erişim izni verme
Gizli dizi tabanlı kimlik doğrulaması kullanıyorsanız kapsayıcı için paylaşılan erişim imzası (SAS) belirteci oluşturursunuz. Bu kimlik doğrulama türünü kullanmak için depolama hesabı için Depolama hesabı anahtarı erişimine izin ver seçeneğinin etkinleştirilmesi gerekir. Daha fazla bilgi için bkz . Azure Depolama hesabı için Paylaşılan Anahtar yetkilendirmesini engelleme.
Azure portalında, oluşturduğunuz depolama hesabına ve kapsayıcıya gidin. Kapsayıcıyı seçin ve Ayarlar > Paylaşılan erişim belirteçleri'ne gidin.
SAS belirteci aşağıdaki gereksinimleri karşılamalıdır:
-
İzinler
Read,Write,Delete,List. - Başlangıç saati ve Süre Sonu süresi, olay oturumunun ömrünü içermelidir. Oluşturduğunuz SAS belirteci yalnızca bu zaman aralığı içinde çalışır.
- Azure SQL Veritabanı, Azure SQL Yönetilen Örneği ve Fabric'teki SQL veritabanı için SAS belirtecinin IP adresi kısıtlamaları olmamalıdır.
SAS belirteci ve URL oluştur düğmesini seçin. SAS belirteci Blob SAS belirteci kutusundadır. Sonraki adımda kullanmak üzere kopyalayabilirsiniz.
Önemli
SAS belirteci bu kapsayıcıya okuma ve yazma erişimi sağlar. Parola veya başka bir gizli bilgi gibi saklayın.
-
İzinler
T-SQL kullanarak SAS belirtecini depolamak için bir kimlik bilgisi oluşturun.
Aşağıdaki T-SQL toplu işlemini yürütmeden önce şu değişiklikleri yapın:
Sunucu kapsamlı bir kimlik bilgisi oluşturuyor ve
CREATE MASTER KEYdeyimini kullanıyorsanız,<password>değerini ana anahtarı koruyan güçlü bir parolayla değiştirin. Daha fazla bilgi için bkz. CREATE MASTER KEY .https://<storage-account-name>.blob.core.windows.net/<container-name>öğesinin her üç örneğinde de,<storage-account-name>’yi depolama hesabınızın adıyla ve<container-name>’yi kapsayıcınızın adıyla değiştirin.Yan tümcede
SECRETöğesini, önceki adımda kopyaladığınız SAS belirteciyle<sas-token>öğesi yerine değiştirin.
Sunucu düzeyinde kimlik bilgisi oluşturma: (SQL Server, Azure SQL Yönetilen Örneği için geçerlidir)
SSMS gibi bir istemci aracı kullanarak yeni bir sorgu penceresi açın, olay oturumunu
masteroluşturduğunuz örnekteki veritabanına bağlayın ve aşağıdaki T-SQL toplu işlemini yapıştırın./* Create a master key to protect the secret of the credential */ IF NOT EXISTS (SELECT 1 FROM sys.symmetric_keys WHERE name = '##MS_DatabaseMasterKey##') CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>' /* The name of the credential must match the URL of the blob container. */; IF EXISTS (SELECT 1 FROM sys.credentials WHERE name = 'https://<storage-account-name>.blob.core.windows.net/<container-name>') DROP CREDENTIAL [https://<storage-account-name>.blob.core.windows.net/<container-name>]; /* The secret is the SAS token for the container. */ CREATE CREDENTIAL [https://<storage-account-name>.blob.core.windows.net/<container-name>] WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = '<sas-token>';Veritabanı kapsamlı bir kimlik bilgileri oluşturma: (Azure SQL Veritabanı, Azure SQL Yönetilen Örneği, Fabric'teki SQL veritabanı için geçerlidir)
SSMS gibi bir istemci aracı kullanarak yeni bir sorgu penceresi açın, olay oturumunu oluşturduğunuz veritabanına bağlanın ve aşağıdaki T-SQL toplu işlemini yapıştırın. Veritabanına değil, kullanıcı veritabanınıza bağlı olduğunuzdan
masteremin olun./* The name of the credential must match the URL of the blob container. */ IF EXISTS (SELECT 1 FROM sys.database_credentials WHERE name = 'https://<storage-account-name>.blob.core.windows.net/<container-name>') DROP DATABASE SCOPED CREDENTIAL [https://<storage-account-name>.blob.core.windows.net/<container-name>]; /* The secret is the SAS token for the container. */ CREATE DATABASE SCOPED CREDENTIAL [https://<storage-account-name>.blob.core.windows.net/<container-name>] WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = '<sas-token>';Ardından, Azure Depolama'da event_file hedefi olan SSMS'de bir olay oturumu oluşturmak için sonraki bölümdeki adımları izleyin.
SSMS'de Azure Depolama içinde event_file hedefiyle bir olay oturumu oluşturun.
Depolama kapsayıcısına erişim sağlayan kimlik bilgisi oluşturulduktan sonra olay oturumunu oluşturabilirsiniz. Kimlik bilgilerini oluşturmaktan farklı olarak, olay oturumu oluşturmak CONTROL izni gerektirmez. Kimlik bilgisi oluşturulduktan sonra, daha kısıtlı izinleriniz olsa bile olay oturumları oluşturabilirsiniz.
İzinler sayfasında gereken belirli izinleri görün.
SSMS'de yeni bir etkinlik oturumu oluşturmak için:
SQL Server ve Azure SQL Yönetilen Örneği için Yönetim klasörünün altındaki Genişletilmiş Olaylar düğümünü genişletin. Azure SQL Veritabanı ve Fabric'te SQL veritabanı için, veritabanının altında Genişletilmiş Olaylar düğümünü genişletin.
Oturumlar klasörüne sağ tıklayın ve Yeni Oturum... öğesini seçin.
Genel sayfasında, oturum için aşağıdaki kod örneğine yönelik
example-sessionbir ad girin.Olaylar sayfasında oturuma eklenecek bir veya daha fazla olayı seçin. Örneğin,
sql_batch_startingolayını seçebilirsiniz.Veri Depolama sayfasında hedef tür olarak seçin
event_file. Depolama kapsayıcısının URL'sini Depolama URL'si kutusuna yapıştırın. Bu URL'nin sonuna bir eğik çizgi (/) ve ardından dosya (blob) adı yazın. Örneğin,https://<storage-account-name>.blob.core.windows.net/<container-name>/example-session.xel.Oturum yapılandırıldığına göre, daha sonra kaydetmek üzere isteğe bağlı olarak Betik düğmesini seçerek oturumun T-SQL betiğini oluşturabilirsiniz.
Oturumu oluşturmak için Tamam'ı seçin.
oluşturduğunuz olay oturumunu görmek için Nesne Gezgini Oturumlar klasörünü genişletin. Varsayılan olarak, oturum oluşturulduğunda başlatılmaz. Oturumu başlatmak için oturum adına sağ tıklayın ve Oturumu Başlat'ı seçin. Daha sonra oturum çalıştırıldıktan sonra Oturumu Durdur'u seçerek durdurabilirsiniz.
T-SQL toplu işlemleri yürütüldükçe, oturum sql_batch_starting etkinliklerini depolama kapsayıcısındaki example-session.xel blobuna yazar.
Uyarı
SQL Yönetilen Örneği için, depolama kapsayıcısı URL'sini Veri depolama sayfasına yapıştırmak yerine Betik düğmesini kullanarak oturumun T-SQL betiğini oluşturun. Bağımsız değişkenin değeri olarak kapsayıcı URL'sini filename belirtin ve betiği yürüterek oturumu oluşturun.
T-SQL'de Azure Depolama Alanı'nda event_file hedefi kullanarak bir olay oturumu oluşturun.
Aşağıda, bir Azure Depolama tabanlı CREATE EVENT SESSION hedefi ekleyen ADD TARGET with event_file yan tümcesinin bir örneği verilmiştir.
CREATE EVENT SESSION [example-session]
ON SERVER
ADD EVENT sqlserver.sql_batch_starting
ADD TARGET package0.event_file
(
SET filename = N'https://<storage-account-name>.blob.core.windows.net/<container-name>/example-session.xel'
)
GO
Bu örneği Azure SQL Veritabanı'nda veya Fabric'deki SQL veritabanında kullanmak için ON SERVER değerini ON DATABASE ile değiştirin.
Azure Depolama'da event_file hedefi olan olay oturumlarıyla ilgili sorunları giderme
Aşağıdaki listede, Azure Depolama kullanan bir genişletilmiş olay oturumu başlatılırken karşılaşabileceğiniz hatalar ve hatanın olası açıklamaları yer alır.
-
İşletim sistemi hata 5 döndürdü: 'Erişim reddedildi.'
- Yönetilen kimlik doğrulaması kullanılıyorsa:
- Veritabanı altyapısı tarafından kullanılan yönetilen kimlikte gerekli RBAC rol ataması yoktur. Daha fazla bilgi için bkz. Yönetilen kimliği kullanarak erişim izni verme.
- Depolama hesabı güvenlik duvarı etkinleştirilir ve güvenilen Azure hizmetlerinin depolama hesabına erişmesine izin veren bir özel durum da etkinleştirilir, ancak mantıksal sunucu için bir
Microsoft.Sql/serverskaynak örneği erişim verilen kaynak örnekleri listesine eklenmemiştir. Daha fazla bilgi için bkz. Azure kaynak örneklerinden erişim verme. - Zorunlu modlu bir ağ güvenlik çevresi kullanıyorsanız, veritabanı ve depolama hesabı aynı çevre içinde değildir.
- SAS belirteci kimlik doğrulaması kullanılıyorsa:
- Depolama hesabı güvenlik duvarı etkinleştirildi. Bu, SAS belirteci kimlik doğrulaması kullanan olay oturumlarında desteklenmez.
- SAS belirtecinin yeterli yetkileri yok veya süresi doldu. Daha fazla bilgi için bkz. SAS belirteci kullanarak erişim verme.
- Zorunlu modlu bir ağ güvenlik çevresi kullanıyorsanız, veritabanından sınırsız giden iletişime ve depolama hesabına sınırsız gelen iletişime izin veren erişim kuralları uygulanmaz.
- Yönetilen kimlik doğrulaması kullanılıyorsa:
-
İşletim sistemi 86 hatasını döndürdü: 'Belirtilen ağ parolası doğru değil.'
- Blob kapsayıcı URL'si ile eşleşen veritabanı kapsamlı kimlik bilgisi (Azure SQL Veritabanı için) veya sunucu kapsamlı kimlik bilgisi (Azure SQL Yönetilen Örneği veya SQL Server için) yoktur. Daha fazla bilgi için yönetilen kimlik kullanarak erişim verme veya SAS belirteci kullanarak erişim verme örneklerine göz atın.
- Kimlik bilgisi adı, (
/) ile biter. Kimlik bilgisi adı, sonunda eğik çizgi olmayan kapsayıcı adıyla bitmelidir.
-
İşletim sistemi 3 hatasını döndürdü: 'Sistem belirtilen yolu bulamıyor.'
- Blob kapsayıcı URL'sinde belirtilen kapsayıcı mevcut değil.
-
İşletim sistemi 13. hata döndürdü: 'Veriler geçersiz.'
- Blob kapsayıcısı üzerinde bir değişmezlik ilkesi vardır. Değiştirilemez depolama, olay oturumları için desteklenmez.
- Depolama hesabında hiyerarşik ad alanı etkindir. Hiyerarşik ad alanı etkinleştirilmiş depolama hesapları, olay oturumları için desteklenmez.
sys.fn_xe_file_target_read_file() işlevi
Hedef, event_file aldığı verileri insan tarafından okunamayan bir ikili biçimde depolar. işlevi, sys.fn_xe_file_target_read_file bir xel dosyanın içeriğini ilişkisel satır kümesi olarak temsil etmenizi sağlar. Kullanım örnekleri de dahil olmak üzere daha fazla bilgi için bkz. sys.fn_xe_file_target_read_file.
ring_buffer hedefi
Hedef ring_buffer , bir olay oturumunu hızlı bir şekilde başlatmak ve olay verilerini yalnızca bellekte toplamak için kullanışlıdır. Halka arabelleğindeki kullanılabilir bellek olaylar tarafından kullanıldığında, önceki olaylar atılır. Olay oturumunu durdurduğunuzda, hedefe ilişkin ring_buffer tüm oturum çıkışı da atılır.
Aşağıdaki örnekte gösterildiği gibi, bir ring_buffer hedefteki verileri XML'ye dönüştürerek tüketirsiniz. Bu dönüştürme sırasında, 4 MB'lık XML belgesine sığmayan veriler atlanır. Bu nedenle, daha büyük MAX_MEMORY değerler kullanarak (veya bu parametreyi varsayılan değerinde bırakarak) halka arabelleğinde daha fazla olay yakalasanız bile, XML işaretleme ve Unicode dizelerinin ek yükünü göz önünde bulundurarak XML belge boyutundaki 4 MB sınırı nedeniyle bunların tümünü kullanamayabilirsiniz.
XML belgesinde truncated olarak ayarlanmışsa, halka arabelleğinin içeriğinin XML'e dönüştürme sırasında atlandığını biliyorsunuz. Örneğin:
<RingBufferTarget truncated="1" processingTime="0" totalEventsProcessed="284" eventCount="284" droppedCount="0" memoryUsed="64139">
Tavsiye
Hedef ring_buffer eklerken parametresini MAX_MEMORY 1.024 KB veya daha az olarak ayarlayın. Daha büyük değerler kullanmak bellek tüketimini gereksiz yere artırabilir.
Varsayılan olarak, MAX_MEMORY, ring_buffer hedef SQL Server'da sınırsızdır ve Azure SQL Veritabanı, Azure SQL Yönetilen Örneği ve Fabric'deki SQL veritabanında 32 MB ile sınırlıdır.
ring_buffer hedefiyle olay oturumu oluşturma
Aşağıda, bir ring_buffer hedef kullanarak lock_acquired olaylarını toplayacak ve halka arabelleğindeki toplam olay sayısını 100 ile sınırlayacak bir olay oturumu oluşturma örneği verilmiştir. Bu örnekte MAX_MEMORY parametre iki kez görüntülenir: bir kez hedef belleği 1.024 KB olarak, ring_buffer bir kez de olay oturumu arabellek belleğini 2 MB olarak ayarlamak için.
Bu örneği Azure SQL Veritabanı'nda veya Fabric'deki SQL veritabanında kullanmak için ON SERVER değerini ON DATABASE ile değiştirin.
CREATE EVENT SESSION ring_buffer_lock_acquired
ON SERVER
ADD EVENT sqlserver.lock_acquired
ADD TARGET package0.ring_buffer
(
SET MAX_EVENTS_LIMIT = 100,
MAX_MEMORY = 1024
)
WITH
(
MAX_MEMORY = 2 MB,
MAX_DISPATCH_LATENCY = 3 SECONDS
);
Etkinlik oturumunu başlatabilmek için aşağıdaki işlemi yürütün:
ALTER EVENT SESSION ring_buffer_lock_acquired
ON SERVER
STATE = START;
Toplanan olay verilerini SSMS'deki halka arabelleğinde görüntülemek için oturum düğümünü genişletin ve package0.ping_buffer hedefini seçin. Veriler XML olarak görüntülenir.
Oturum etkinken bir ring_buffer hedeften gelen olay verilerini ilişkisel satır kümesinde görmek için, XML'yi ilişkisel verilere dönüştürmek için XQuery ifadelerini kullanırsınız. Örneğin:
;WITH
/* An XML document representing memory buffer contents */
RingBuffer AS
(
SELECT CAST (xst.target_data AS XML) AS TargetData
FROM sys.dm_xe_session_targets AS xst
INNER JOIN sys.dm_xe_sessions AS xs
ON xst.event_session_address = xs.address
WHERE xs.name = N'ring_buffer_lock_acquired'
),
/* A row for each event in the buffer, represented as an XML fragment */
EventNode AS
(
SELECT CAST (NodeData.query('.') AS XML) AS EventInfo
FROM RingBuffer AS rb
CROSS APPLY rb.TargetData.nodes('/RingBufferTarget/event') AS n(NodeData)
)
/* A relational rowset formed by using the XQuery value method */
SELECT EventInfo.value('(event/@timestamp)[1]','datetimeoffset') AS timestamp,
EventInfo.value('(event/@name)[1]','sysname') AS event_name,
EventInfo.value('(event/data/value)[1]','nvarchar(max)') AS sql_batch_text
FROM EventNode
ORDER BY timestamp DESC;
event_stream hedefi
Hedef event_stream yalnızca C# gibi dillerde yazılmış .NET programlarında kullanılabilir. Geliştiriciler, Microsoft.SqlServer.XEvents.Linq ad alanındaki .NET Framework sınıfları aracılığıyla bir olay akışına erişebilir. Bu hedef, herhangi bir olay oturumunda örtük olarak bulunur. T-SQL kullanılarak eklenemez.
Daha fazla bilgi için bkz. sys.fn_MSxe_read_event_stream.
25726 hatasıyla karşılaşırsanız, The event data stream was disconnected because there were too many outstanding events. To avoid this error either remove events or actions from your session or add a more restrictive predicate filter to your session. hedeften event_stream okurken, olay akışının verilerle istemcinin tüketim kapasitesinden daha hızlı dolduğunu ifade eder. Bu, Veritabanı Altyapısı performansını etkilememek için Veritabanı Altyapısı'nın olay akışı bağlantısını kesmesine neden olur.
histogram hedefi
Hedef, histogram bir alan veya eylemdeki ayrı değerler için olay oluşumlarının sayısını sayar. Her ayrı değer için ayrı bir sayı demeti kullanılır. Hedef, histogram aldığı verileri eşzamanlı olarak işler.
SOURCE_TYPE parametresi hedefin histogram davranışını denetler:
-
SOURCE_TYPE = 0: bir olay alanı için veri toplama. -
SOURCE_TYPE = 1: bir eylem için veri toplama. Varsayılan değer budur.
Parametresinin SLOTS varsayılan değeri 256'dır. Başka bir değer atarsanız, değer 2'nin bir sonraki kuvvetine yuvarlanır. Örneğin, SLOTS = 59 64'e yuvarlanmış olabilir. Hedef için histogram en fazla histogram yuvası sayısı 16.384'tür.
histogram hedef olarak kullanıldığında bazen beklenmeyen sonuçlar görebilirsiniz. Bazı olaylar beklenen yuvalarda görünmeyebilirken, diğer yuvalar beklenenden daha yüksek olay sayısını gösterebilir. Yuvalara olay atarken karma çakışma oluşursa bu durum oluşabilir. Bu durum nadir olsa da, bir karma çakışması oluşursa, bir yuvada sayılması gereken bir olay başka bir yuvada sayılır. Bu nedenle, yalnızca belirli bir yuvadaki sayı sıfır olarak gösterildiği için bir olayın gerçekleşmediğini varsayarak dikkatli olunmalıdır.
Örneğin, aşağıdaki senaryoyu göz önünde bulundurun:
- Saklı yordam yürütme istatistiklerini toplamak için
histogramhedefini kullanarak ve olaylarıobject_idile gruplayarak bir Genişletilmiş Olaylar oturumu ayarlarsınız. - Saklı yordam
Ayürütürsünüz. Ardından saklı yordamınıByürütürsiniz.
Karma fonksiyonu her iki saklı yordam için object_id için aynı değeri döndürürse, histogramda A iki kez yürütülürken B görünmez.
Ayrı değerlerin sayısı görece az olduğunda bu sorunu azaltmak için, beklenen ayrı değerlerin karesinden daha yüksek histogram yuvalarının sayısını ayarlayın. Örneğin, hedef histogram olay alanına ayarlanmışsa SOURCEtable_name ve veritabanında 20 tablo varsa, 20*20 = 400. 2'nin 400'den büyük bir sonraki gücü 512'dir ve bu örnekte önerilen yuva sayısıdır.
Her histogram hedef tek bir kaynaktan (olay alanı veya eylem) verileri kabul eder ve yalnızca bir histogram içerir. Olay oturumu başına aynı türde birden fazla hedef eklemek mümkün değildir. Hedef başına histogram birden fazla kaynak türüne sahip olmak da mümkün değildir. Bu nedenle, farklı eylemleri veya olay alanlarını ayrı histogram bir hedefte izlemek için yeni bir olay oturumu gerekir.
Histogram hedefiyle olay oturumu oluşturma
Aşağıda bir hedefle olay oturumu oluşturma örneği verilmiştır histogram .
Bu örneği Azure SQL Veritabanı'nda veya Fabric'deki SQL veritabanında kullanmak için ON SERVER değerini ON DATABASE ile değiştirin.
CREATE EVENT SESSION histogram_lock_acquired
ON SERVER
ADD EVENT sqlserver.lock_acquired
(
ACTION (sqlos.system_thread_id)
)
ADD TARGET package0.histogram
(
SET FILTERING_EVENT_NAME = N'sqlserver.lock_acquired',
SLOTS = 16,
SOURCE = N'sqlos.system_thread_id',
SOURCE_TYPE = 1
);
Hedef parametresi ADD TARGET ... (SET ...) yan tümcesinde SOURCE_TYPE olarak 1 ayarlanır, bu da histogram hedefin bir eylemi izlediği anlamına gelir.
ADD EVENT ... (ACTION ...) yan tümcesi sqlos.system_thread_id eylemi olaya ekler.
SOURCE parametresi, sqlos.system_thread_id hedefi için veri kaynağı olarak bu eylem tarafından toplanan sistem iş parçacığı kimliğini kullanacak şekilde histogram olarak ayarlanır.
histogram Bu örnekteki hedef, oturum etkinken kilitleri alan her sistem iş parçacığı için olay sayısını lock_acquired sayar.
Etkinlik oturumunu başlatabilmek için aşağıdaki işlemi yürütün:
ALTER EVENT SESSION histogram_lock_acquired
ON SERVER
STATE = START;
Toplanan histogram verilerini SSMS'de görüntülemek için oturum düğümünü genişletin ve hedefi seçin package0.histogram . Veriler iki sütunlu bir kılavuzda görüntülenir. Her satır, ayrı değerlerden oluşan bir demet ve yineleme sayısını temsil eder.
Bu örnekte, histogram hedefi tarafından yakalanan veriler şöyle görünebilir.
value sütunundaki değerler system_thread_id değerleridir. Örneğin, sistem iş parçacığı 6540 tarafından toplam 236 kilit alındı.
value count
----- -----
6540 236
9308 91
9668 74
10144 49
5244 44
2396 28
T-SQL ile bir histogram hedeften verileri okuma örneği aşağıda verilmişti:
WITH histogram_target
AS (SELECT TRY_CAST (st.target_data AS XML) AS target_data
FROM sys.dm_xe_sessions AS s
INNER JOIN sys.dm_xe_session_targets AS st
ON s.address = st.event_session_address
WHERE s.name = 'event-session-name-placeholder'),
histogram
AS (SELECT hb.slot.value('(@count)[1]', 'bigint') AS slot_count,
hb.slot.value('(value/text())[1]', 'nvarchar(max)') AS slot_value
FROM histogram_target AS ht
CROSS APPLY ht.target_data.nodes('/HistogramTarget/Slot') AS hb(slot))
SELECT slot_value,
slot_count
FROM histogram;
hedefi event_counter
Hedef, event_counter belirtilen her olayın kaç kez gerçekleştiğini sayar.
Hedefin event_counter parametresi yoktur ve aldığı verileri zaman uyumlu olarak işler.
event_counter hedefiyle olay oturumu oluşturma
Aşağıda bir hedefle olay oturumu oluşturma örneği verilmiştır event_counter . Oturum, ilk dört checkpoint_begin olayı sayar ve ardından koşulu hedeflere gönderilen olay sayısını dört ile sınırladığı için sayma işlemini durdurur. Bu örnek için olayı checkpoint_begin, CHECKPOINT komutunu yürüterek oluşturabilirsiniz.
Bu örneği Azure SQL Veritabanı'nda veya Fabric'deki SQL veritabanında kullanmak için ON SERVER değerini ON DATABASE ile değiştirin.
CREATE EVENT SESSION event_counter_checkpoint_begin
ON SERVER
ADD EVENT sqlserver.checkpoint_begin
(
WHERE package0.counter <= 4
)
ADD TARGET package0.event_counter
WITH
(
MAX_MEMORY = 4096 KB,
MAX_DISPATCH_LATENCY = 3 SECONDS
);
Etkinlik oturumunu başlatabilmek için aşağıdaki işlemi yürütün:
ALTER EVENT SESSION event_counter_checkpoint_begin
ON SERVER
STATE = START;
Toplanan verileri SSMS'de görüntülemek için oturum düğümünü genişletin ve hedefi seçin package0.event_counter . Veriler üç sütunlu bir kılavuzda görüntülenir. Her satır, oluşumlarının sayısını içeren bir olayı temsil eder.
Bu örnekte event_counter hedefi tarafından yakalanmış verilerin dört kontrol noktası gerçekleştiğinde nasıl görünebileceği aşağıda gösterilmiştir.
package_name event_name count
------------ ---------------- -----
sqlserver checkpoint_begin 4
pair_matching hedefi
Hedef, pair_matching karşılık gelen bir bitiş olayı olmadan gerçekleşen başlangıç olaylarını algılamanızı sağlar. Örneğin, uzun süreli bir işlemin kilitleri tuttuğunu gösteren eşleşmeyen bir lock_acquired olayını lock_released bir olaya sahip olmadan bulabilirsiniz.
Genişletilmiş Olaylar başlangıç ve bitiş olaylarıyla otomatik olarak eşleşmez. Bunun yerine, pair_matching hedef belirtimindeki CREATE EVENT SESSION ifadesinde eşleşme mantığını tanımlarsınız. Bir başlangıç ve bitiş olayı eşleştirildiğinde, hedef eşleşen olayı atar ancak eşleşmeyen başlangıç olaylarını korur.
eşleştirme hedefiyle etkinlik oturumu oluşturma
Bu örnekte, adlı T1bir örnek tablo oluştururuz, üç satır ekler ve bu tablonun değerini elde ederiz object_id . Kolaylık olması için, bu örnekte tempdb veritabanında tablo oluşturuyoruz. Farklı bir veritabanı kullanıyorsanız, aşağıdaki T-SQL örnek kodunda veritabanı adını ayarlayın.
CREATE TABLE T1 (id INT PRIMARY KEY);
INSERT INTO T1 (id)
VALUES (1), (2), (3);
SELECT OBJECT_ID('T1') AS object_id;
-- object_id = 1029578706
Aşağıdaki olay oturumu lock_acquired ve lock_released olmak üzere iki olayı toplar. Ayrıca iki hedefi vardır. Bunlardan biri, event_counter her olay için oluşum sayısını sağlayan hedeftir. Diğeri, pair_matching başlangıç lock_acquired olayıyla bitiş lock_released olayını çiftler halinde eşleştirmek için mantığı tanımlayan hedeftir.
BEGIN_MATCHING_COLUMNS ve END_MATCHING_COLUMNS'e atanan virgülle ayrılmış alanların dizisi aynı olmalıdır. Virgülle ayrılmış değerde belirtilen alanlar arasında hiçbir sekmeye veya yeni satıra izin verilmez, ancak boşluklara izin verilir.
Olay oturumu tanımında, tempdb tablosunun nesne kimliği ile eşleşen olayları toplamak için object_id veritabanındaki T1 olayında bir olay koşulunu kullanırız. Tablonuzun nesne kimliğini kullanmak için yan tümcesindeki WHERE koşulu ayarlayın.
Bu örneği Azure SQL Veritabanı'nda veya Fabric'deki SQL veritabanında kullanmak için ON SERVER değerini ON DATABASE ile değiştirin.
CREATE EVENT SESSION pair_matching_lock_acquired_released
ON SERVER
ADD EVENT sqlserver.lock_acquired
(
SET COLLECT_DATABASE_NAME = 1,
COLLECT_RESOURCE_DESCRIPTION = 1
ACTION (sqlserver.transaction_id)
WHERE (database_name = 'tempdb'
AND object_id = 1029578706)
),
ADD EVENT sqlserver.lock_released
(
SET COLLECT_DATABASE_NAME = 1,
COLLECT_RESOURCE_DESCRIPTION = 1
ACTION (sqlserver.transaction_id)
WHERE (database_name = 'tempdb'
AND object_id = 1029578706)
)
ADD TARGET package0.event_counter,
ADD TARGET package0.pair_matching
(
SET BEGIN_EVENT = N'sqlserver.lock_acquired',
BEGIN_MATCHING_COLUMNS = N'resource_0, resource_1, resource_2, transaction_id, database_id',
END_EVENT = N'sqlserver.lock_released',
END_MATCHING_COLUMNS = N'resource_0, resource_1, resource_2, transaction_id, database_id',
RESPOND_TO_MEMORY_PRESSURE = 1
)
WITH
(
MAX_MEMORY = 8192 KB,
MAX_DISPATCH_LATENCY = 15 SECONDS
);
Etkinlik oturumunu başlatabilmek için aşağıdaki işlemi yürütün:
ALTER EVENT SESSION pair_matching_lock_acquired_released
ON SERVER
STATE = START;
T1 tablosunu güncelleyen bir işlem başlatın, ancak işlemi gerçekleştirmeyin veya geri almayın. Bu, elde edilen ancak serbest bırakılmayan kilitlerin mevcut olmasını garanti eder.
BEGIN TRANSACTION;
UPDATE T1
SET id = id + 1;
SSMS'de etkinlik oturumunun her hedefinin çıkışını inceleyin.
Hedef event_counter aşağıdaki çıktıyı üretir ve kilitlerden birinin serbest bırakılmadığını gösteriyor. Ancak, bu hedef bu kilidin ayrıntılarını göstermez.
package_name event_name count
------------ ---------- -----
sqlserver lock_acquired 4
sqlserver lock_released 3
Hedef pair_matching , kısa olması için kesilmiş aşağıdaki çıktıya sahiptir. Çıktının event_counter önerdiği gibi, olay hakkında daha fazla ayrıntıyı içeren, eşleşmeyen lock_acquired olayı için gerçekten de tek bir satır görüyoruz.
package_name event_name timestamp associated_object_id database_id database_name
------------ ------------ --------- ------------- ----------- -------------
sqlserver lock_acquired 2025-10-01 20:06:07.1890000 1029578706 2 tempdb
İşlemi geri alın.
ROLLBACK;
Hedef tarafından pair_matching toplanan bir olaya eylem eklerseniz, eylem verileri de toplanır. Örneğin, eylem tarafından sqlserver.sql_text sağlanan T-SQL metnini olayla birlikte ekleyebilirsiniz. Bu örnekte, kilidi alan sorguyu kaydeder.
etw_classic_sync_target hedefi
SQL Server'da Genişletilmiş Olaylar, sistem etkinliğini izlemek için Windows için Olay İzleme (ETW) ile birlikte çalışabilir. Daha fazla bilgi için bakınız:
- Windows hedefi için Olay İzleme
- Genişletilmiş Olayları kullanarak Sistem Etkinliğini İzleme
Bu ETW hedefi, aldığı verileri zaman uyumlu olarak işler.