2008-10-13 19 views
18

Veritabanlarımızda sabit bir işlem günlüğü boyutu ile çalışıyoruz ve günlük boyutlarını izlemek için bir uygulama oluşturmak istiyorum. Böylece işler çok sıkılaştıkça görülebilir ve sabit trn logunu büyütmemiz gerekir. .SQL 2005'te İşlem Günlüğünün boyutunu programlı olarak nasıl alabilirim?

İşlem günlüğünün geçerli boyutunu ve işlem günlüğünün sabit sınırını söyleyecek şekilde çalıştırabileceğim herhangi bir TSQL komutu var mı?

cevap

27

Kodunuzu kullandım, ancak int'ye dönüştürülürken bir hata oluştu. "Msg 8115, Düzey 16, Durum 2, Satır 1 Veri türü için ifadeyi dönüştürme aritmetik taşma hatası." Yani bir "* 8" olduğu yerde, onu * 8.0 olarak değiştirdim ve kod mükemmel çalışıyor.

SELECT (size * 8.0)/1024.0 AS size_in_mb 
    , CASE 
    WHEN max_size         = -1 
    THEN 9999999     -- Unlimited growth, so handle this how you want 
    ELSE (max_size * 8.0)/1024.0     END AS max_size_in_mb 
    FROM YOURDBNAMEHERE.sys.database_files 
WHERE data_space_id       = 0   
18

Hızlı google arama bu ortaya koydu: Neden işlem günlüğü autogrowth kullanmıyorsunuz

DBCC SQLPERF (LOGSPACE) 

? Bu daha güvenilir bir çözüm olacak gibi görünüyor.

+1

Benim seçimim değil.DBA, statik boyuttaki işlem günlüklerinin daha verimli olduğunu söylüyor. –

+1

Kesinlikle bir DBA'dan ziyade bir SQL geliştiricisiyim, ancak performans yalnızca günlük dosyası doğru boyutta değilse ve çok sık büyümek zorundaysa etkilenmelidir. Fiili yetiştirme eylemi bazı performansları artırır, ancak otogür çoğunlukla beklenmedik acil durumlar için olmalıdır. –

+2

DBCC SQLPERF sunucusunda ek izinlere gereksinim duyar, bu yüzden sys.database dosyalarının yanıtıyla birlikte gittim. DBCC SQLPerf, tüm veritabanlarını aynı anda vermenin avantajına sahiptir. –

6

Bu benim başımın üstü kapalı, yani matematik tekrar kontrol etmek isteyebilirler ...

SELECT 
    (size * 8)/1024.0 AS size_in_mb, 
    CASE 
     WHEN max_size = -1 THEN 9999999 -- Unlimited growth, so handle this how you want 
     ELSE (max_size * 8)/1024.0 
    END AS max_size_in_mb 
FROM 
    MyDB.sys.database_files 
WHERE 
    data_space_id = 0 -- Log file 

o sistem görünümü, dan alabilirsiniz daha böyle büyüme artışı olarak vardır günlüğün otomatik olarak oluşturulup oluşturulmayacağı ve belirli bir miktar veya yüzde cinsinden büyümeye ayarlanıp ayarlanmadığı.

HTH!

1

Eğer gerçekten sabit bir boyut işlem günlüğü sopa gerekiyorsa, bazı marjlar makul bir boyuta ayarlamak için önermek ve sonra aşağıdaki iki birini yapardım:

  • Seti veritabanını kurtarma modunda zamana ihtiyacınız yoksa, SIMPLE için kurtarma modu. Basit bir ifadeyle, işlem günlüğüne alanın "kendini geri dönüştürmesine" izin verecektir.

VEYA

  • FULL için kurtarma moduna tutmak gerekiyorsa

    , işlem günlüğünün yedeğini gerçekleştiren bir iş zamanlamak. Bu işlem günlüğündeki boş alanı kapatacak ve gerektiğinde zaman kurtarmada bir nokta yapmanıza izin verecektir.

Ayrıca, aşağıdaki makaleyi yararlı bulabilirsiniz: How to stop the transaction log of a SQL Server database from growing unexpectedly.

13

sys.database_files kullanılması, yalnızca size günlük dosyasının boyutunu değil içindeki günlüğünün boyutunu verir. Dosyanız sabit bir boyutsa, bu çok fazla kullanılmaz. DBCC SQLPERF (LOGSPACE) biraz eski bir okuldur, ancak SQL Server'ın eski sürümlerini desteklemeniz gerekiyorsa iyi çalışır.

yerine böyle dm_os_performance_counters tabloyu kullanabilirsiniz:

SELECT 
    RTRIM(instance_name) [database], 
    cntr_value log_size_kb 
FROM 
    sys.dm_os_performance_counters 
WHERE 
    object_name = 'SQLServer:Databases' 
    AND counter_name = 'Log File(s) Used Size (KB)' 
    AND instance_name <> '_Total' 
0
SQL 2008 için

ve daha sonra FILEPROPERTY aynı zamanda bir dosya içinde kullanılan alan miktarını ortaya çıkarır ve daha az karmaşık diğer tüm yanıtlardan daha geçerli:

select [Name], physical_name [Path], CAST(size AS BIGINT)*8192 [TotalBytes], CAST(FILEPROPERTY(name,'SpaceUsed') AS BIGINT)*8192 [UsedBytes], (case when max_size<0 then -1 else CAST(max_size AS BIGINT)*8192 end) [MaxBytes] 
from sys.database_files 
İlgili konular