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 2016 (13.x) SP2 ve sonraki sürümler
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
SQL database in Microsoft Fabric
İşlem günlüğünün sanal günlük dosyası (VLF) bilgilerini döndürür. Tüm işlem günlüğü dosyalarının tablo çıkışında birleştirildiğine dikkat edin. Çıktıdaki her satır, işlem günlüğündeki bir VLF'yi temsil eder ve günlükteki bu VLF ile ilgili bilgiler sağlar.
Syntax
sys.dm_db_log_info ( database_id )
Argümanlar
database_id | NULL | DEFAULT
Veritabanının kimliğidir. database_idiçsel. Geçerli girdiler, bir veritabanının ID numarası, NULL veya DEFAULT. Varsayılan değer NULL'tır. NULL ve DEFAULT mevcut veritabanı bağlamında eşdeğer değerlerdir.
Geçerli veritabanının VLF bilgilerini döndürmek için NULL değerini belirtin.
Yerleşik işlev DB_ID belirtilebilir. Veritabanı adı belirtmeden DB_ID kullanırken, geçerli veritabanının uyumluluk düzeyi 90 veya daha yüksek olmalıdır.
Döndürülen Tablo
| Sütun adı | Veri türü | Description |
|---|---|---|
| database_id | int | Veritabanı Kimliği. Azure SQL Veritabanı'nda değerler tek bir veritabanı veya elastik havuz içinde benzersizdir, ancak mantıksal sunucu içinde değildir. |
| dosya_kimlik | smallint | İşlem günlüğünün dosya kimliği. |
| vlf_begin_offset | bigint | sanal günlük dosyasının (VLF) işlem günlüğü dosyasının başından kadar olan ofset konumu. |
| vlf_boyutu_mb | float | sanal günlük dosyasının (VLF) boyutu MB olarak, iki ondalık basameğe yuvarlanır. |
| vlf_sıra_numarası | bigint | Oluşturulan sırayla sanal günlük dosyası (VLF) sıra numarası. Günlük dosyasındaki VLF'leri benzersiz olarak tanımlamak için kullanılır. |
| vlf_active | bit |
sanal günlük dosyası (VLF) kullanımda olup olmadığını gösterir. 0 - VLF kullanımda değil. 1 - VLF etkindir. |
| vlf_status | int |
sanal günlük dosyası (VLF)'in durumu. Olası değerler şunlardır: 0 - VLF etkin değil 1 - VLF başlatıldı ancak kullanılmadı 2 - VLF etkindir. |
| vlf_parity | tinyint | numaralı sanal günlük dosyasının (VLF) eşliği. Bir VLF içindeki günlüğün sonunu belirlemek için dahili olarak kullanılır. |
| vlf_first_lsn | nvarchar(48) | |
| vlf_create_lsn | nvarchar(48) | sanal günlük dosyasını (VLF)oluşturan günlük kaydının Günlük sırası numarası (LSN). |
| vlf_şifreleyici_parmakizi | varbinary(20) |
Şunlar için geçerlidir: SQL Server 2019 (15.x) ve üzeri VLF Saydam Veri Şifrelemesikullanılarak şifrelenirse VLF şifreleyicisinin parmak izini gösterir, aksi takdirde NULL. |
Açıklamalar
sys.dm_db_log_info dinamik yönetim işlevi DBCC LOGINFO deyiminin yerini alır.
Büyüme olayı temelinde kaç VLIF oluşturulduğuna ilişkin formül, SQL Server İşlem Günlüğü Mimarisi ve Yönetim Kılavuzubölümünde ayrıntılı olarak açıklanmaktadır. Bu formül SQL Server 2022'den (16.x) başlayarak biraz değişti.
Permissions
VIEW SERVER STATE Veritabanında izin gerektirir.
SQL Server 2022 ve üzeri için izinler
Veritabanında PERFORMANCE STATE izni gerektirir VIEWDATABASE .
Examples
A. Yüksek sayıda VLIF içeren bir SQL Server örneğindeki veritabanlarını belirleme
Aşağıdaki sorgu, veritabanı başlatma, geri yükleme ve kurtarma süresini etkileyebilecek günlük dosyalarında 100'den fazla VLF'ye sahip veritabanlarını belirler.
SELECT [name], COUNT(l.database_id) AS 'vlf_count'
FROM sys.databases AS s
CROSS APPLY sys.dm_db_log_info(s.database_id) AS l
GROUP BY [name]
HAVING COUNT(l.database_id) > 100;
B. Günlük dosyasını küçültmeden önce işlem günlüğündeki son VLF konumunu belirleme
İşlem günlüğünün küçülip küçülemediğini belirlemek için işlem günlüğünde SHRINK FILE çalıştırmadan önce son etkin VLF'nin konumunu belirlemek için aşağıdaki sorgu kullanılabilir.
USE AdventureWorks2022;
GO
;WITH cte_vlf AS (
SELECT ROW_NUMBER() OVER(ORDER BY vlf_begin_offset) AS vlfid, DB_NAME(database_id) AS [Database Name], vlf_sequence_number, vlf_active, vlf_begin_offset, vlf_size_mb
FROM sys.dm_db_log_info(DEFAULT)),
cte_vlf_cnt AS (SELECT [Database Name], COUNT(vlf_sequence_number) AS vlf_count,
(SELECT COUNT(vlf_sequence_number) FROM cte_vlf WHERE vlf_active = 0) AS vlf_count_inactive,
(SELECT COUNT(vlf_sequence_number) FROM cte_vlf WHERE vlf_active = 1) AS vlf_count_active,
(SELECT MIN(vlfid) FROM cte_vlf WHERE vlf_active = 1) AS ordinal_min_vlf_active,
(SELECT MIN(vlf_sequence_number) FROM cte_vlf WHERE vlf_active = 1) AS min_vlf_active,
(SELECT MAX(vlfid) FROM cte_vlf WHERE vlf_active = 1) AS ordinal_max_vlf_active,
(SELECT MAX(vlf_sequence_number) FROM cte_vlf WHERE vlf_active = 1) AS max_vlf_active
FROM cte_vlf
GROUP BY [Database Name])
SELECT [Database Name], vlf_count, min_vlf_active, ordinal_min_vlf_active, max_vlf_active, ordinal_max_vlf_active,
((ordinal_min_vlf_active-1)*100.00/vlf_count) AS free_log_pct_before_active_log,
((ordinal_max_vlf_active-(ordinal_min_vlf_active-1))*100.00/vlf_count) AS active_log_pct,
((vlf_count-ordinal_max_vlf_active)*100.00/vlf_count) AS free_log_pct_after_active_log
FROM cte_vlf_cnt;
GO
İlgili içerik
- Dinamik Yönetim Görünümleri ve İşlevleri (Transact-SQL)
- veritabanıyla ilgili dinamik yönetim görünümlerini (Transact-SQL)
- sys.dm_db_log_space_usage (Transact-SQL)
- sys.dm_db_log_stats (Transact-SQL)