Controlled SQL Server file growth in even steps compared with chaotic autogrowth

SQL Server Autogrowth Ayarları: Veri ve Log Dosyası Büyümesi Nasıl Ayarlanır?

SQL Server autogrowth gerçekte nasıl çalışır, yüzde büyüme ve eski varsayılanlar performansı neden bozar, veri ve log dosyaları için önerilen değerler ve hatalı ayarları bulup düzelten script’ler.

Ağustos 11, 2021

Kısa cevap

Autogrowth’u asla yüzde değil, sabit bir boyuta ayarlayın: küçük veri dosyaları için yaklaşık 256 MB, orta boyutlular için 512 MB – 1 GB, instant file initialization’lı çok büyük dosyalar için 1 – 4 GB, log dosyaları için 256 MB – 1 GB ve 1.024 MB’ı asla aşmayın. Dosyaları önümüzdeki 6 – 12 aya göre önceden boyutlandırın, MAXSIZE ayarlayın ve autogrowth’u yalnızca güvenlik ağı olarak tutun.

Günün en yoğun saatinin ortasındasınız. Bir veri dosyasında yer kalmıyor, SQL Server dosyayı büyütmeye başlıyor ve yazma yapması gereken her session bekliyor. Büyüme büyükse ve disk yavaşsa sorgular timeout’a düşüyor. Bu transaction log’da oluyorsa veritabanındaki her yazma işlemi bekliyor. Kimse bir şey değiştirmedi; yıllar önce seçilmiş bir autogrowth ayarı en kötü anda devreye girdi, o kadar.

Bu rehberde SQL Server autogrowth’un nasıl çalıştığını, eski varsayılanların ve yüzde büyümenin neden sorun çıkardığını, veri ve log dosyaları için makul büyüme değerlerinin nasıl seçileceğini ve veritabanlarınızın şu anda ne sıklıkla büyüdüğünü nasıl göreceğinizi anlatıyoruz.

Önerilen Ayarlar Bir Bakışta

Ayar Öneri Kaynak Geçerli olduğu sürüm
Büyüme birimi Yüzde değil, MB cinsinden sabit boyut. Microsoft: boyut, yüzdeye göre daha iyi kontrol sağlar Desteklenen tüm sürümler
10 GB altı veri dosyası 256 MB Aryasoft başlangıç değeri Tümü; instant file initialization ile en hızlı
10–100 GB veri dosyası 512 MB – 1 GB Aryasoft başlangıç değeri Tümü
100 GB üstü veri dosyası 1 – 4 GB, yalnızca instant file initialization ile; yoksa daha küçük adımlar Aryasoft başlangıç değeri Tümü
Log dosyası 256 MB – 1 GB; asla 1.024 MB üzeri değil Microsoft: log için FILEGROWTH 1.024 MB’ı aşmamalı; aralık bizim başlangıç değerimizdir Tümü
64 MB’a kadar log büyümesi Instant file initialization’dan faydalanır; daha büyük büyümeler sıfırlanır Microsoft SQL Server 2022 ve sonrası (tüm sürümler)
MAXSIZE Her dosyada ayarlayın ve disk alanı izlemesiyle birlikte kullanın Microsoft Tümü
Filegroup’ta birden fazla dosya Aynı boyut ve aynı büyüme; AUTOGROW_ALL_FILES’ı değerlendirin Seçeneği Microsoft belgeler; eşit boyut kuralı bizim yönlendirmemizdir SQL Server 2016 ve sonrası
AUTO_SHRINK Her production veritabanında kapalı Microsoft: önerilmez, varsayılan olarak kapalı Tümü
model veritabanı Orada makul dosya boyutu ve büyüme ayarlayın Microsoft: yeni veritabanları model’i devralır Tümü

Autogrowth Nedir, Ne Değildir?

Her SQL Server veri ve log dosyasının bir FILEGROWTH ayarı vardır: dosyada yer kalmadığında SQL Server’ın dosyaya eklediği miktar. Autogrowth, beklenmedik şekilde dolan bir veritabanının çalışmaya devam etmesini sağlar. Veritabanı boyutunu yönetme yöntemi olarak düşünülmemiştir.

Not

Microsoft’un yönlendirmesi açıktır: yönetilen bir production sisteminde autogrow yalnızca beklenmedik büyümeye karşı bir B planı olarak görülmelidir. Günlük veri ve log büyümesini autogrow ile yönetmeyin; dosyaları önceden boyutlandırın ve sakin saatlerde proaktif olarak büyütün.

SQL Server Sağlık Kontrolü

Dosya boyutlandırmanız yoğun saatlere hazır mı?

Kıdemli DBA ekibimiz dosya boyutlandırmasını, autogrowth ayarlarını, VLF düzenini ve disk kapasitesini inceler; büyümenin sizi yoğun saatlerde şaşırtmamasını sağlar.

Sağlık Kontrolü Talep Edin

Bir Autogrowth Olayı Sırasında Ne Olur?

  • Büyümeyi tetikleyen transaction büyüme bitene kadar bekler. Büyüme uzun sürerse sorgu timeout hatasıyla düşebilir.
  • Log büyümesi bütün yazanları bekletir. Transaction log büyürken, log’a yazması gereken diğer her transaction büyüme tamamlanana kadar beklemek zorundadır.
  • Log dosyaları sıfırlanır. Yeni log alanı kullanılmadan önce sıfırlarla doldurulmalıdır; bu yüzden yavaş depolamada büyük bir log büyümesi uzun sürebilir. Instant file initialization yalnızca veri dosyalarına yardım eder, bir istisnayla: SQL Server 2022’den itibaren 64 MB’a kadar olan log büyümeleri de bundan faydalanabilir.
  • Veri dosyaları neredeyse anında büyüyebilir; tabii SQL Server servis hesabı için instant file initialization açıksa. Kapalıysa veri dosyası büyümesi de sıfırlanır.
  • Çok sayıda küçük büyüme dosyaları diskte parçalar ve log için fazla sayıda virtual log file (VLF) oluşturur; bu da açılışı, restore’u, log backup’ları ve replikasyonu yavaşlatır. SQL Server VLF Sayısı yazımıza bakabilirsiniz.

Varsayılanlar ve Eski Veritabanlarının Neden Kötü Ayarları Var?

Sürüm Varsayılan veri dosyası büyümesi Varsayılan log dosyası büyümesi
SQL Server 2016 ve sonrası 64 MB 64 MB
SQL Server 2005 – 2014 1 MB %10

Eski sürümlerde oluşturulan veritabanları, yeni bir sunucuya yükseltildiklerinde, restore ya da attach edildiklerinde ayarlarını korur. Bu yüzden 200 GB’lık bir production veritabanının, bir upgrade’den yıllar sonra bile veri dosyasını 1 MB’lık adımlarla ya da log’unu %10 ile büyüttüğünü görmek çok yaygındır.

Yüzde Büyüme Neden Bir Tuzaktır?

Yüzde büyüme uyarlanabilir görünür, ama iki uçta da kötü davranır:

  • Küçük dosyalar minik adımlarla büyür: 50 MB’lık bir log’un %10’u 5 MB’tır; yoğun bir gün yüzlerce büyüme ve binlerce VLF demektir.
  • Büyük dosyalar devasa ve öngörülemez adımlarla büyür: 500 GB’lık bir log’un %10’u, bütün yazanlar beklerken sıfırlanması gereken 50 GB’tır; bir sonraki büyüme ise daha da büyüktür.

Kritik

Büyük bir transaction log’u asla yüzde büyümede bırakmayın. Yüzlerce gigabaytlık bir log’un tek bir %10’luk büyümesi, o veritabanındaki herhangi bir transaction devam edebilmeden önce sıfırlarla yazılmak zorundadır ve tek adımda diski doldurabilecek kadar büyük olabilir.

Büyüme Değerlerini Seçmek

Tek bir doğru sayı yoktur; dosya boyutuna, veritabanının ne hızla büyüdüğüne, depolama hızına ve instant file initialization’ın açık olup olmadığına bağlıdır. Microsoft test için kabaca dosya boyutunun sekizde biri kuralını önerir. Pratikte biz aşağıdaki gibi sabit MB değerleriyle başlıyor, gerçek büyüme olaylarını izledikten sonra ayarlıyoruz:

Dosya Başlangıç değeri Notlar
Veri dosyası, 10 GB altı 256 MB Instant file initialization ile hızlıdır.
Veri dosyası, 10–100 GB 512 MB – 1 GB Büyük adımlar daha az büyüme olayı demektir.
Veri dosyası, 100 GB üstü 1 – 4 GB Yalnızca instant file initialization açıksa; değilse adımları küçük tutun.
Log dosyası 256 MB – 1 GB Asla yüzde değil; 1.024 MB’ı aşmayın. SQL Server 2022+ üzerinde 64 MB’lık adımlar instant initialization’dan faydalanır.

İpucu

En iyi autogrowth olayı, hiç yaşanmayandır. Veri ve log dosyalarını önümüzdeki 6–12 ayda beklediğiniz büyümeye göre boyutlandırın, sakin bir zaman aralığında elle büyütün ve autogrowth’u güvenlik ağı olarak bırakın. Veritabanı dosyası içindeki boş alanın çalışma anında hiçbir maliyeti yoktur.

MAXSIZE ve disk alanı

Microsoft ayrıca her dosyada MAXSIZE ayarlanmasını önerir; böylece kontrolden çıkan bir dosya bütün diski tüketip diğer veritabanlarını da durduramaz. MAXSIZE’a ulaşan bir dosya büyümeyi bırakır ve yazma işlemleri hata alır; bu yüzden bir limit ancak izlemeyle birlikte anlamlıdır. Autogrowth diskteki boş alanın ötesine de büyüyemez: disk alanını izlemeye devam edin ve dolmadan çok önce alert verin. SQL Server Alert’leri yazımıza bakabilirsiniz.

Bir filegroup’ta birden fazla dosya

SQL Server yeni veriyi bir filegroup’taki dosyalara boş alanlarıyla orantılı olarak dağıtır. Bir dosya büyüyüp diğerleri büyümezse, yeni yazmalar büyüyen dosyada yoğunlaşır ve denge bozulur. Bir filegroup’taki bütün dosyalara aynı boyut ve büyüme ayarını verin. SQL Server 2016’dan itibaren bir filegroup AUTOGROW_ALL_FILES olarak ayarlanabilir; böylece bütün dosyaları birlikte büyür. Bu tempdb için varsayılandır; kullanıcı filegroup’larında varsayılan ise AUTOGROW_SINGLE_FILE‘dır.

Mevcut Ayarlarınızı Kontrol Edin

Bu sorgu instance’taki her veri ve log dosyasını boyutu, büyüme ayarı ve maksimum boyutuyla listeler ve dikkat gerektiren ayarları işaretler:

SELECT DB_NAME(mf.database_id) AS database_name,
       mf.name AS logical_name,
       mf.type_desc,
       CAST(mf.size AS bigint) * 8 / 1024 AS size_mb,
       CASE WHEN mf.is_percent_growth = 1
            THEN CAST(mf.growth AS varchar(10)) + ' %'
            ELSE CAST(CAST(mf.growth AS bigint) * 8 / 1024 AS varchar(10)) + ' MB' END AS growth,
       CASE WHEN mf.max_size = -1 THEN 'UNLIMITED'
            ELSE CAST(CAST(mf.max_size AS bigint) * 8 / 1024 AS varchar(20)) + ' MB' END AS max_size,
       CASE WHEN mf.growth = 0 THEN 'Autogrowth OFF'
            WHEN mf.is_percent_growth = 1 THEN 'Percent growth'
            WHEN CAST(mf.growth AS bigint) * 8 / 1024 < 64 THEN 'Growth below 64 MB'
            ELSE '' END AS attention
FROM sys.master_files AS mf
ORDER BY attention DESC, database_name, mf.type;

Ayarları Düzeltin

FILEGROWTH kesinti olmadan, online değiştirilebilir. Bu script, yüzde büyüme ya da 64 MB’ın altında bir adım kullanan dosyalar için ALTER DATABASE komutlarını üretir; çalıştırmadan önce üretilen değerleri gözden geçirin:

SELECT N'ALTER DATABASE ' + QUOTENAME(DB_NAME(mf.database_id))
     + N' MODIFY FILE (NAME = N''' + mf.name + N''', FILEGROWTH = '
     + CASE WHEN mf.type = 1 THEN N'512MB'                                  -- log
            WHEN CAST(mf.size AS bigint) * 8 / 1024 < 10240  THEN N'256MB'  -- 10 GB altı veri
            WHEN CAST(mf.size AS bigint) * 8 / 1024 < 102400 THEN N'1024MB' -- 10-100 GB veri
            ELSE N'2048MB' END                                              -- 100 GB üstü veri
     + N');' AS to_execute
FROM sys.master_files AS mf
JOIN sys.databases AS d ON d.database_id = mf.database_id
WHERE d.state_desc = N'ONLINE' AND d.is_read_only = 0
  AND mf.type IN (0, 1)
  AND mf.growth <> 0
  AND (mf.is_percent_growth = 1 OR CAST(mf.growth AS bigint) * 8 / 1024 < 64)
ORDER BY DB_NAME(mf.database_id), mf.type;

model veritabanını unutmayın: yeni veritabanları ayarlarını ondan devralır; model’i düzeltmek sorunun geri gelmesini önler. Bir log zaten binlerce küçük adımla büyüdüyse, yalnızca FILEGROWTH’u değiştirmek mevcut VLF’leri ortadan kaldırmaz; VLF rehberimizdeki adımları izleyin.

Veritabanlarınız Ne Sıklıkla Büyüyor?

Default trace her autogrowth olayını, ne kadar sürdüğüyle birlikte kaydeder. Bu sorgu onu okur:

DECLARE @path nvarchar(260) =
    (SELECT REVERSE(SUBSTRING(REVERSE(path), CHARINDEX(N'\', REVERSE(path)), 260)) + N'log.trc'
     FROM sys.traces WHERE is_default = 1);

SELECT t.DatabaseName,
       t.FileName,
       CASE t.EventClass WHEN 92 THEN 'Data' WHEN 93 THEN 'Log' END AS file_type,
       t.StartTime,
       t.Duration / 1000 AS duration_ms,
       CAST(t.IntegerData AS bigint) * 8 / 1024 AS growth_mb
FROM sys.fn_trace_gettable(@path, DEFAULT) AS t
WHERE t.EventClass IN (92, 93)   -- Data File Auto Grow, Log File Auto Grow
ORDER BY t.StartTime DESC;

Günde çok sayıda büyüme, mesai saatlerinde gerçekleşen büyümeler ya da milisaniyeler yerine saniyeler süren büyümeler; dosyanın küçük boyutlandırıldığının ya da büyüme adımının yanlış olduğunun işaretleridir. Default trace sınırlı bir geçmiş tutar; düzenli kontrol edin ya da aynı olayları Extended Events ile yakalayın.

AUTO_SHRINK: Kapatın

Uyarı

Autogrowth’u AUTO_SHRINK ile birlikte kullanmak bitmeyen bir büyüme-küçülme döngüsü yaratır: dosya arka planda küçülür, bir sonraki iş yükü onu yeniden büyütür ve her tur fragmentation ile bekleme ekler. Her production veritabanında AUTO_SHRINK‘i kapalı tutun.

SELECT name FROM sys.databases WHERE is_auto_shrink_on = 1; ile kontrol edin. Tek seferlik bir shrink’in ne zaman ve nasıl uygun olduğu için SQL Server Shrink İçin Best Practices yazımıza bakabilirsiniz.

Test Edilen Sürüm Notları

Son doğrulama: 19 Ekim 2026. Aşağıdaki iddialar bu tarihte Microsoft Learn üzerinden okundu. T-SQL örnekleri SQL Server 2025 (build 17.0.4055.5) üzerinde test edilmiştir.

Konu Geçerli olduğu sürüm Not
Varsayılan FILEGROWTH SQL Server 2016 ve sonrası: veri 64 MB, log 64 MB. SQL Server 2005–2014: veri 1 MB, log %10. Veritabanları restore, attach veya upgrade sonrasında ayarlarını korur.
Log büyümesi için instant file initialization SQL Server 2022 ve sonrası, tüm sürümler 64 MB’a kadar log autogrowth faydalanır; TDE açıkken de. Daha büyük log büyümeleri faydalanamaz. Servis, Perform volume maintenance tasks hakkına sahipse veri dosyaları tüm sürümlerde faydalanır.
Büyüme başına oluşan VLF SQL Server 2014 ve sonrası; 2022’de değişen mantık Log boyutunun 1/8’inden küçük büyüme tek VLF oluşturur. Aksi hâlde 64 MB’a kadar büyüme 4 VLF (SQL Server 2022’den itibaren 1 VLF), 64 MB – 1 GB arası 8, 1 GB üzeri 16 VLF oluşturur.
AUTOGROW_ALL_FILES SQL Server 2016 ve sonrası Kullanıcı filegroup’larında varsayılan AUTOGROW_SINGLE_FILE’dır; tempdb varsayılan olarak tüm dosyaları birlikte büyütür.
Test için pratik kural Tüm sürümler Microsoft test noktası olarak dosya boyutunun yaklaşık sekizde birini önerir; sabit bir değer değildir.
Uzun autogrow belirtileri Tüm sürümler 5144 ve 5145 numaralı mesajlar yavaş autogrow’u bildirir; allocation page latch’lerinde PREEMPTIVE_OS_WRITEFILEGATHER bekleme türüyle uzun beklemeler görülebilir.

Resmi Davranış, Aryasoft Saha Notu ve Bizim Önerimiz

Konu Resmi davranış (Microsoft) Aryasoft saha notu Bizim önerimiz
Autogrow’un rolü Yönetilen bir production sisteminde yalnızca beklenmedik büyümeye karşı bir B planıdır; günlük büyümeyi onunla yönetmeyin. Bu yazıda yayımlanmış bir Aryasoft ölçümü yoktur. 6–12 aya göre önceden boyutlandırın, sakin bir pencerede elle büyütün ve autogrowth’u güvenlik ağı olarak tutun.
Büyüme boyutu Artış, performans cezalarını önleyecek kadar büyük olmalıdır; doğru değer ortamınıza bağlıdır. Dosya boyutunun sekizde biri test için bir pratik kuraldır. Eski sürümlerde oluşturulmuş veritabanlarının upgrade’den yıllar sonra bile 1 MB’lık adımlarla ya da %10 ile büyüdüğünü görmek yaygındır. Sayı yayımlamıyoruz. Yukarıdaki tablodaki sabit MB değerleriyle başlayın ve gerçek büyüme olaylarını izledikten sonra ayarlayın.
Log büyümesi SQL Server 2022 ve sonrasında 64 MB’a kadar büyümeler dışında yeni log alanı sıfırlanır; büyüme sürerken lock veya latch tutar. 1.024 MB’ı aşmayın. Yüzlerce gigabaytlık bir log’un tek bir %10’luk büyümesi diski doldurabilir ve tüm yazanları durdurabilir. Bu bir örnektir, ölçülmüş bir olay değildir. Büyük bir log’u asla yüzde büyümede bırakmayın.
MAXSIZE Hiçbir dosyanın tüm disk alanını kullanmaması için her dosyada açın. MAXSIZE’a ulaşan dosya büyümeyi bırakır ve yazma işlemleri hata alır; bu yüzden limit ancak izlemeyle anlamlıdır. MAXSIZE ayarlayın ve disk ya da limit dolmadan çok önce alert verin.
AUTO_SHRINK Varsayılan olarak kapalıdır ve önerilmez; autogrow ile birleştirmek gereksiz yük yaratır. Autogrow artı AUTO_SHRINK, fragmentation ve beklemeler ekleyen bitmeyen bir büyüme-küçülme döngüsü üretir. Her production veritabanında AUTO_SHRINK’i kapalı tutun.

Sık Sorulan Sorular

Asla yüzde değil, sabit bir MB değeri; büyüme olayları seyrek olacak ama her biri hızlı bitecek şekilde boyutlandırılmış. Tipik başlangıç değerleri veri dosyaları için 256 MB – 1 GB (instant file initialization ile çok büyük dosyalarda daha fazla), log dosyaları için 256 MB – 1 GB’tır. Dosyalarınızın gerçekte ne sıklıkla büyüdüğüne göre ayarlayın.
Hayır. Dosyaları autogrowth nadiren tetiklenecek şekilde önceden boyutlandırın, ama güvenlik ağı olarak açık tutun. Büyüyemeyen bir dosya dolduğunda bütün yazma işlemlerini durdurur.
Hayır. Yeni bir FILEGROWTH değeriyle ALTER DATABASE … MODIFY FILE online çalışır ve bir sonraki büyüme olayında devreye girer.
Log dosyaları kullanılmadan önce sıfırlanmak zorundadır, veri dosyaları ise instant file initialization kullanabilir. Bu yüzden yavaş depolamada büyük log büyümeleri belirgin şekilde daha uzun sürer. SQL Server 2022’den itibaren 64 MB’a kadar olan log büyümeleri de instant initialization’dan faydalanabilir.
Evet. Yeni veritabanları başlangıç boyutlarını ve büyüme ayarlarını model’den alır; her yeni veritabanıyla sorunu yeniden yaratmamak için orada makul değerler ayarlayın.
Evet. SQL Server dosyaları boş alanlarıyla orantılı doldurur; farklı boyut ya da büyüme ayarları yazmaları tek bir dosyada yoğunlaştırır. Eşit ayarlar kullanın ve SQL Server 2016 ve sonrasında AUTOGROW_ALL_FILES’ı değerlendirin.
Nadiren. Yüzde, sürekli büyüyen bir miktardır: küçük dosyalarda minik, büyük dosyalarda devasa ve öngörülemez adımlar. Microsoft, veri ve log dosyalarının autogrowth ayarında boyutun yüzdeye göre daha iyi kontrol sağladığını belirtir; bu yüzden veri ve log dosyalarında sabit MB değerleri kullanın.
Default trace’te mesai saatlerinde gerçekleşen büyüme olaylarına, günde çok sayıda olaya ya da saniyelerle ölçülen olaylara bakın. SQL Server yavaş autogrow’u 5144 ve 5145 numaralı mesajlarla, allocation page latch’lerindeki uzun beklemeleri ise PREEMPTIVE_OS_WRITEFILEGATHER bekleme türüyle de bildirebilir.
Microsoft, transaction log için FILEGROWTH değerinin 1.024 MB’ın üzerine çıkarılmamasını önerir. SQL Server 2022 ve sonrasında 64 MB’a kadar büyümeler instant file initialization kullanabilir; daha büyükleri sıfırlanır. Bu yüzden adım boyutunu, depolamanızda her büyümenin ne kadar sürdüğüyle dengeleyin.

Kaynaklar (Microsoft Learn)

Bu rehberdeki teknik iddialar 19 Ekim 2026 tarihinde aşağıdaki birincil kaynaklara karşı kontrol edildi. Microsoft dokümantasyonu her an değişebilir; üretimde değişiklik yapmadan önce sürüme özel ayrıntıları yeniden doğrulayın.

SQL Server Sağlık Kontrolü

Büyüme Olayları En Yoğun Saatlerinizi Yavaşlatmasın

Aryasoft’un kıdemli DBA ekibi SQL Server ortamınızdaki dosya boyutlandırmasını, autogrowth ayarlarını, VLF düzenini ve disk kapasitesini inceler; büyümenin sizi yoğun saatlerde asla şaşırtmayacağı şekilde ayarlar.

4.7/5