Aracılığıyla paylaş


İşlem günlüğü dosyasının boyutunu yönetme

Şunlar için geçerlidir: SQL Server

Bu makalede SQL Server işlem günlüğü boyutunu izleme, işlem günlüğünü küçültme, işlem günlüğü dosyasına ekleme veya büyütme, işlem günlüğü büyüme hızını iyileştirme tempdb ve işlem günlüğü dosyasının büyümesini denetleme işlemleri açıklanır.

Bu makale SQL Server için geçerlidir. İşlem benzer olsa da Azure SQL'de dosya alanı yönetimi için bkz:

Veritabanı için depolama alanı türlerini anlama

Aşağıdaki depolama alanı miktarlarını anlamak, veritabanının dosya alanını yönetmek için önemlidir.

Veritabanı miktarı Definition Comments
Kullanılan veri alanı Veritabanı verilerini depolamak için kullanılan alan. Genel olarak, kullanılan alan eklemelerde artar ve silmelerde azalır. Bazı durumlarda, işlemdeki verilerin miktarına ve düzenine ve herhangi bir parçalanmaya bağlı olarak, eklemelerde veya silmelerde kullanılan alan değişmez. Örneğin, her veri sayfasından bir satır silmek, kullanılan alanı azaltmaz.
Ayrılan veri alanı Biçimlendirilmiş dosya alanı, veritabanı verilerini depolamak için kullanılabilir hale getirildi. Ayrılan alan miktarı otomatik olarak artar ancak silindikten sonra hiçbir zaman azalmaz. Bu davranış, alanın yeniden biçimlendirilmesi gerekmediğinden gelecekteki eklemelerin daha hızlı olmasını sağlar.
Ayrılan ancak kullanılmayan veri alanı Ayrılan miktar ile kullanılan veri alanı arasındaki fark. Bu miktar, veritabanı veri dosyalarını küçültmenin geri kazanabileceği maksimum boş alanı temsil eder.
En büyük veri boyutu Veritabanı verilerini depolamak için en fazla alan miktarı. Ayrılan veri alanı miktarı, maksimum veri boyutunun ötesine geçemez.

Aşağıdaki diyagramda, bir veritabanı için farklı depolama alanı türleri arasındaki ilişkiler gösterilmektedir.

Veritabanı için farklı depolama alanı türleri arasındaki ilişkileri gösteren diyagram.

Dosya alanı bilgileri için tek bir veritabanını sorgulama

Ayrılan veritabanı dosya alanı miktarını ve ayrılan kullanılmayan alan miktarını döndürmek için aşağıdaki sorguyu kullanın. Sorgu sonucunun birimleri MB cinsindendir.

-- Connect to a user database
SELECT file_id, type_desc,
       CAST(FILEPROPERTY(name, 'SpaceUsed') AS decimal(19,4)) * 8 / 1024. AS space_used_mb,
       CAST(size/128.0 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS int)/128.0 AS decimal(19,4)) AS space_unused_mb,
       CAST(size AS decimal(19,4)) * 8 / 1024. AS space_allocated_mb,
       CAST(max_size AS decimal(19,4)) * 8 / 1024. AS max_size_mb
FROM sys.database_files;

Günlük alanı kullanımını izleme

sys.dm_db_log_space_usage kullanarak günlük alanı kullanımını izleyin. Bu DMV, şu anda kullanılan günlük alanı miktarı hakkında bilgi döndürür ve işlem günlüğünün ne zaman kesilmesi gerektiğini gösterir.

Geçerli günlük dosyası boyutu, en büyük boyutu ve dosyanın otomatik büyütme seçeneği hakkında bilgi için, sys.database_files söz konusu günlük dosyasının , max_sizeve growth sütunlarını da kullanabilirsinizsize.

Önemli

Günlük diskini aşırı yüklemekten kaçının. Günlük depolamanın, işlem yükünüz için IOPS ve düşük gecikme süresi gereksinimlerine dayanadığından emin olun.

Günlük dosyasını küçültme

İşletim sistemine boş alan döndürerek fiziksel boyutunu küçültmek için günlük dosyasını küçültün. Küçültme yalnızca işlem günlüğü dosyası kullanılmayan alan içerdiğinde fark yaratır.

Büyük olasılıkla açık işlemler nedeniyle günlük dosyası doluysa işlem günlüğünün kesilmesini neyin önlediğini araştırın.

Dikkat

Küçültme işlemleri normal bir bakım işlemi olarak kabul edilmemelidir. Düzenli yinelenen iş işlemleri nedeniyle büyüyen veri ve günlük dosyaları için küçültme işlemleri gerekmez. Küçültme komutları, çalışırken veritabanı performansını etkiler. Düşük kullanım dönemlerinde çalıştırılmalıdır. Normal bir uygulama iş yükü dosyaların yeniden aynı ayrılmış boyuta büyümesine neden olacaksa veri dosyalarını küçültmenizi önermeyiz.

Veritabanı dosyalarını küçültmenin olası olumsuz performans etkisine dikkat edin. Bkz. Küçültme sonrasında dizin bakımı.

İşlem günlüğünü küçültmeden önce günlük kesilmesini geciktirebilecek faktörleri aklınızda bulundurun. Günlük küçülttükten sonra depolama alanı yeniden gerekiyorsa işlem günlüğü yeniden büyür ve günlük büyüme işlemleri sırasında performans ek yüküne neden olur. Daha fazla bilgi için bkz . Öneriler.

Günlük dosyasını yalnızca veritabanı çevrimiçiyken ve en az bir sanal günlük dosyası (VLF) boşken küçültebilirsiniz. Bazı durumlarda, günlüğü küçültmek ancak sonraki günlük kesilmesinden sonra mümkün olabilir.

Uzun süre çalışan bir işlem gibi bazı faktörler VLIF'leri uzun süre etkin tutabilir, günlük küçültmeyi kısıtlayabilir, hatta günlüğün küçülmesini engelleyebilir. Daha fazla bilgi için bkz. Günlük kesilmesini geciktirebilecek faktörler.

Günlük dosyasını küçültmek, mantıksal günlüğün (etkin olmayan VLF'ler ) bir bölümünü tutmayan bir veya daha fazla VLF'yi kaldırır. İşlem günlüğü dosyasını küçülttüğünüzde, günlüğü yaklaşık hedef boyuta küçültmek için etkin olmayan VLF'ler günlük dosyasının sonundan kaldırılır.

Küçültme işlemleri hakkında daha fazla bilgi için aşağıdaki kaynakları gözden geçirin:

Günlük dosyasını küçültme (veritabanı dosyalarını küçültmeden)

Günlük dosyası küçültme olaylarını izleme

Günlük alanını izleme

Küçültme işleminden sonra dizin bakımı

Veri dosyalarında küçültme işlemi tamamlandıktan sonra dizinler parçalanabilir. Bu parçalanma, büyük taramalar kullanan sorgular gibi belirli iş yükleri için performans iyileştirme etkinliğini azaltır. Küçültme işlemi tamamlandıktan sonra performans düşüşü oluşursa dizinleri yeniden oluşturmak için dizin bakımını göz önünde bulundurun. Dizin yeniden derlemelerinin veritabanında boş alan gerektirdiğini ve bu nedenle ayrılan alanı artırarak küçültme işleminin etkisinin karşı karşıya olabileceğini unutmayın.

Daha fazla bilgi için bkz. Sorgu performansını geliştirmek ve kaynak tüketimini azaltmak için dizin bakımını iyileştirme.

Günlük dosyası ekleme veya büyütme

Mevcut günlük dosyasını genişleterek (disk alanı izin verirse) veya veritabanına genellikle farklı bir diskte bir günlük dosyası ekleyerek alan kazanabilirsiniz. Günlük alanı tükenmiyorsa ve günlük dosyasının bulunduğu birimde disk alanı da dolmadığı sürece bir işlem günlük dosyası yeterlidir.

  • Veritabanına günlük dosyası eklemek için deyiminin ADD LOG FILE yan tümcesini ALTER DATABASE kullanın. Bu eylem günlüğün büyümesine olanak tanır.
  • Günlük dosyasını büyütmek için ve MAXSIZE söz dizimini belirterek deyiminin ALTER DATABASE yan tümcesini SIZE kullanınMODIFY FILE. Daha fazla bilgi için bkz. ALTER DATABASE (Transact-SQL) dosya ve dosya grubu seçenekleri.

Daha fazla bilgi için bkz . Öneriler.

Tempdb işlem günlüğü boyutunu iyileştirme

Bir sunucu örneğinin yeniden başlatılması, veritabanının işlem günlüğünü tempdb özgün otomatik büyüme öncesi boyutuna yeniden boyutlandırılır. Bu yeniden boyutlandırma işlem günlüğünün tempdb performansını düşürebilir.

Sunucu örneğini başlattıktan veya yeniden başlattıktan sonra işlem günlüğü boyutunu artırarak tempdb bu ek yükü önleyebilirsiniz. Daha fazla bilgi için bkz . Tempdb veritabanı.

İşlem günlüğü dosyasının büyümesini denetleme

İşlem günlüğü dosyasının büyümesini yönetmek için ALTER DATABASE (Transact-SQL) dosya ve dosya grubu seçenekleri deyimini kullanın. Aşağıdakilere dikkat edin:

  • SIZE Geçerli dosya boyutunu KB, MB, GB ve TB birimlerinde değiştirmek için seçeneğini kullanın.
  • Büyüme artışını değiştirmek için seçeneğini kullanın FILEGROWTH . 0 değeri, otomatik büyümenin kapalı olarak ayarlandığını ve fazladan alan izin verilmediğini gösterir. MAXSIZE Kb, MB, GB ve TB birimlerinde bir günlük dosyasının en büyük boyutunu denetlemek veya büyümeyi olarak UNLIMITEDayarlamak için seçeneğini kullanın.

Daha fazla bilgi için bkz . Öneriler.

Recommendations

İşlem günlüğü dosyalarıyla çalışırken göz önünde bulundurmanız gereken bazı genel öneriler aşağıdadır:

  • seçenek tarafından FILEGROWTH belirlenen işlem günlüğünün otomatik büyüme (otomatik büyüme) artışı, iş yükü işlemlerinin ihtiyaçlarının önüne geçebilecek kadar büyük olmalıdır. Günlük dosyasındaki dosya büyüme artışı, sık genişlemeyi önlemek için yeterince büyük olmalıdır. İşlem günlüğünü düzgün boyutlandırmak için iyi bir ipucu, şu sırada kaplanmış günlük miktarını izlemektir:

    • Günlük yedeklemeleri bitene kadar gerçekleşemediğinden tam yedekleme çalıştırmak için gereken süre.
    • En büyük dizin bakım işlemleri için gereken süre.
    • Veritabanındaki en büyük toplu işlemi çalıştırmak için gereken süre.
  • seçeneğini kullanarak FILEGROWTH veri ve günlük dosyaları için otomatik büyütmeyi ayarladığınızda, yüzde değeri sürekli büyüyen bir miktar olduğundan büyüme oranının daha iyi denetlenebilmesi için yüzde yerine boyut olarak ayarlamak daha iyi olabilir.

    • SQL Server 2022 (16.x) öncesi sürümlerde işlem günlükleri anlık dosya başlatmayı kullanamaz, bu nedenle genişletilmiş günlük büyüme süreleri özellikle kritik önem taşır.

    • SQL Server 2022 'den (16.x) (tüm sürümler) ve Azure SQL Veritabanı'nda başlayarak, anlık dosya başlatma işlemi 64 MB'a kadar işlem günlüğü büyüme olaylarından yararlanabilir. Yeni veritabanları için varsayılan otomatik büyüme boyutu artışı 64 MB'tır. 64 MB'tan büyük işlem günlüğü dosyası otomatik büyütme olayları, anlık dosya başlatmadan yararlanamaz.

    • En iyi uygulama olarak, işlem günlükleri için seçenek değerini 1.024 MB'ın üzerine ayarlamayın FILEGROWTH . Seçeneğin FILEGROWTH varsayılan değerleri şunlardır:

      Sürüm Varsayılan değerler
      SQL Server 2016'dan (13.x) başlayarak Veri: 64 MB. Günlük dosyaları: 64 MB.
      SQL Server 2005 (9.x) ile başlayarak Veri: 1 MB. Günlük dosyaları: 10%.
      SQL Server 2005'in (9.x) öncesinde Veri: 10%. Günlük dosyaları: 10%.
  • Küçük bir otomatik büyüme artışı çok fazla küçük VLF oluşturabilir ve performansı düşürebilir. Belirli bir örnekteki tüm veritabanlarının geçerli işlem günlüğü boyutu için en uygun VLF dağılımını ve gerekli boyuta ulaşmak için gerekli büyüme artışlarını belirlemek için SQL Tiger Ekibi tarafından sağlanan VLF'leri analiz etmek ve düzeltmek için bu betike bakın.

  • Büyük bir otomatik büyüme artışı iki soruna neden olabilir:

  • Otomatik büyüme etkinleştirildiğinde bile, sorgunuzun gereksinimlerini karşılayacak kadar hızlı büyüyemiyorsa işlem günlüğünün dolu olduğunu belirten bir ileti alabilirsiniz. Büyüme artışını değiştirme hakkında daha fazla bilgi için bkz. ALTER DATABASE (Transact-SQL) dosya ve dosya grubu seçenekleri.

  • İşlem günlüğü dosyaları aynı dosya grubundaki veri dosyaları gibi orantılı dolgu kullanmadığından, veritabanında birden çok günlük dosyasının olması performansı hiçbir şekilde geliştirmez.

Günlük dosyaları otomatik olarak küçültülecek şekilde ayarlanabilir. Ancak bu yapılandırma önerilmez ve AUTO_SHRINK veritabanı özelliği varsayılan olarak YANLIŞ olarak ayarlanır. TRUE olarak ayarlanırsa AUTO_SHRINK , otomatik küçültme yalnızca alanının yüzde 25'inden fazlası kullanılmadığında dosyanın boyutunu küçültür.