Hemen yinelemeli olarak işaretlemeden önce , Mike Walsh'in Neden İşlem Günlüğünün Büyümesini Sürdürdüğünü veya Boşaltılmadığını Okudum ? , ama durumuma bir cevap verdiğini sanmıyorum. Bir düzine kadar benzer soruyu araştırdım ama ilgili sorular çoğunlukla "kopya" dedi ve Mike'ın sorusuna işaret etti.
Ayrıntılar: SQL Server 2008 R2'de, tümü SIMPLE kurtarma modunda (benim seçimim değil), gece tam yedeklemelerinde, ~ 200 MB veri dosyaları ve ~ 300 MB günlük dosyalarında ~ 500 MB veritabanına sahibim. Günlük hemen 300 MB'a çıkmıyor, ancak birkaç ay boyunca yavaş ilerliyor. Hiçbirinde sp_who2 ve aktivite izleyicisine göre hiçbirinde açık işlem yoktur. Veritabanına sağ tıklayıp özellikleri seçersem, bana ~ 50 MB ücretsiz olduğunu söylüyor. Özellikle de bir yedeklemeden hemen sonra bütün kütük serbest kalmamalı mı? SIMPLE modunda, açık bir işlem olmadığı sürece kayıt ücretsiz olmaz mı?
log_reuse_wait_desc
dan sys.databases
diyor soruya dayanmaktadır ve yukarıda referans cevabı o alanı yeniden kullanmasına şey beklemek gerektiğini söylüyor "ŞEY" diyor.
'DBCC SHRINKFILE' yaparsam, günlük dosyası 1 MB'a kadar küçülür, bu nedenle alanı geri almaya isteklidir. Günlükleri haftalık olarak küçülten ve işlerin kontrolden çıkmasını engelleyen bir şey ayarlayabilirim, ancak SQL Server'ın bunu neden yapmama neden olduğu konusunda kafam karıştı.
Bunu kaydetmek için 300 MB'a ihtiyaç duyan çılgınca bir işlem olup olmadığını anlayabiliyorum, ancak aşırı basit bir şey yapmıyoruz, sadece temel OLTP. Mike'ın soru / cevabından:
Basit Kurtarma Modeli - Yukarıdaki girişle, önce Basit Kurtarma modelinden bahsetmek en kolay yoldur. Bu modelde, SQL Server'a söylüyorsunuz - çökme ve kurtarma işlemlerini başlatmak için işlem günlüğü dosyanızı kullanmanız konusunda iyiyim (Gerçekten orada başka seçeneğiniz yok. o kilitlenme / yeniden başlatma kurtarma amacı için daha uzun süre ihtiyacınız var, devam edin ve günlük dosyasını yeniden kullanın.
SQL Server, Basit Kurtarma'daki bu talebi dinler ve yalnızca çökmesi / yeniden başlatılması için yapması gereken bilgileri tutar. SQL Server, verilerin veri dosyasına (daha fazla veya daha az) sertleştirildiği için kurtarılabildiğinden emin olduktan sonra, sertleştirilmiş veriler artık günlükte gerekli değildir ve kesme için işaretlenir - bu da yeniden kullanıldığı anlamına gelir.
Günlük alanının yeniden kullanılması gerektiğini söylemeye devam ediyor, ancak aylar boyunca bu yavaş büyüme ile öyle görünmüyor.
Neyi kaçırıyorum? SQL Server'ın verileri "sertleştirilmiş" olarak tanımasını ve günlüğü kurtarmasını engelleyen bir şey mi var?
(değiştir) Eylem Sonrası Rapor - AKA biraz bilgi tehlikelidir
Bunun “popüler bir soru” olduğunu bulduktan sonra, 7 ay önce olanları ve bazı insanlara kederi umursamayı umduklarımı açıklayan bir açıklama borçlu olduğumu hissettim.
Öncelikle, bir veritabanındaki özellikleri görüntülerken SSMS'de gördüğünüz boş alan veri dosyasındaki boş alandır. Aşağıdakileri bir veritabanında çalıştırarak bunu görüntüleyebilirsiniz ve SSMS tarafından bildirilen boş alanın FileSizeMB ve UsedSpaceMB arasındaki fark olduğunu göreceksiniz:
SELECT
DB.name,
MF.physical_name,
MF.type_desc AS FileType,
MF.size * 8 / 1024 AS FileSizeMB,
fileproperty(MF.name, 'SpaceUsed') * 8/ 1024 AS UsedSpaceMB,
mf.name LogicalName
FROM
sys.master_files MF
JOIN sys.databases DB ON DB.database_id = MF.database_id
WHERE DB.name = 'yourdatabasename'
Bu normal şartlarda çok az günlük alanı kullandığımızı doğruladı (20 MB veya daha az), ancak bu ikinci maddeye yol açtı ...
İkincisi, kütüklerin büyümesine ilişkin algım, zaman içindeki yavaşlıktı. Bununla birlikte, gerçekte, günlükler hızla büyüyordu, bu 3. parti başvurusu için yamalar uygulamaktan sorumlu adam yamalar uyguluyordu. Yama tek bir işlem olarak yapıldı, bu yüzden yamaya bağlı olarak 200 MB günlük 300 MB günlük gerekiyordu. Bunu izlemenin anahtarı, https://sqlblog.org/2007/01/11/reviewing-autogrow-events-from-the-default-trace adresindeki Aaron Bertrand'ın sorgusu oldu.
DECLARE @path NVARCHAR(260);
SELECT
@path = REVERSE(SUBSTRING(REVERSE([path]),
CHARINDEX('\', REVERSE([path])), 260)) + N'log.trc'
FROM sys.traces
WHERE is_default = 1;
SELECT
DatabaseName,
[FileName],
SPID,
Duration,
StartTime,
EndTime,
FileType = CASE EventClass
WHEN 92 THEN 'Data'
WHEN 93 THEN 'Log'
END
FROM sys.fn_trace_gettable(@path, DEFAULT)
WHERE
EventClass IN (92,93)
ORDER BY
StartTime DESC;
Bu, müşterinin veritabanını kullanmadığı zamanlarda logun belirli akşamlarda büyüdüğünü gösterdi. Bu, yamaları uygulayan adamla konuşmaya ve gizeme verilen cevaba yol açtı.
Cevabı bulmama yardım edenlere tekrar teşekkür ederim.