SQL Server trace flags: a server next to a control panel of on and off switches with a small flag

SQL Server Trace Flag’leri: Nasıl Kullanılır, Hangileri Hâlâ Önemli?

SQL Server trace flag’lerinin nasıl çalıştığını, güvenli ve kalıcı şekilde nasıl açılacağını, hangilerinin hâlâ önemli olduğunu ve sunucularınızda nasıl denetleneceğini öğrenin.

Ağustos 18, 2021

Trace flag’ler, SQL Server’ın belirli davranışlarını değiştiren anahtarlardır: error log’a ne yazıldığı, query optimizer’ın nasıl çalıştığı, lock’ların nasıl yükseltildiği gibi. Birçok DBA, startup parametrelerinde artık kimsenin açıklayamadığı bir trace flag listesiyle gelen sunucuları devralır. Bunların bir kısmı hâlâ önemlidir, bir kısmı yıllardır hiçbir şey yapmıyordur, birkaçı ise asla kalıcı olarak açık kalmamalıdır.

Bu rehberde trace flag’lerin nasıl çalıştığını ve diğer SQL Server ayarlarından farkını, nasıl güvenli şekilde açılıp kalıcı hale getirileceğini, hangi trace flag’lerin hâlâ bilinmeye değer olduğunu, hangilerini emekliye ayırabileceğinizi ve sunucularınızda açık olanları nasıl denetleyeceğinizi anlatıyoruz.

Trace Flag’ler ve Diğer SQL Server Ayarları

“SQL Server flag’leri” birkaç farklı şey anlamına gelebilir. Farklı yerlerde ayarlanırlar ve farklı davranırlar:

Ayar türü Nerede ayarlanır? Örnekler
Trace flag’ler DBCC TRACEON, -T startup parametresi ya da QUERYTRACEON hint’i 3226, 1222, 4199
Startup parametreleri SQL Server Configuration Manager; servis başlarken uygulanır -m (single-user mod), -T3226
Sunucu yapılandırma seçenekleri sp_configure max server memory, backup checksum default
Database scoped configuration’lar ALTER DATABASE SCOPED CONFIGURATION QUERY_OPTIMIZER_HOTFIXES, LEGACY_CARDINALITY_ESTIMATION

SQL Server 2016’dan bu yana, eskiden trace flag gerektiren birçok davranış veritabanı ya da sorgu seviyesinde normal birer seçeneğe dönüştü. Bir seçenek varsa daha iyi tercih odur: görünürdür, veritabanının kendisinde belgelenir ve tüm instance’ı etkilemez.

SQL Server Danışmanlığı

Sunucu Yapılandırmanızı Gözden Geçirelim

Aryasoft'un kıdemli DBA ekibi trace flag'lerinizi, startup parametrelerinizi ve sunucu ayarlarınızı inceler; işe yaramayanları temizler, gerekenleri belgeler.

Destek Alın

Trace Flag Kapsamları: Global, Session ve Query

Bir trace flag üç kapsamdan birinde çalışır:

  • Global: instance’taki tüm bağlantıları etkiler. DBCC TRACEON ile -1 argümanını kullanarak ya da -T startup parametresiyle açılır.
  • Session: yalnızca mevcut bağlantıyı etkiler. DBCC TRACEON‘u -1 olmadan kullanın; session kapandığında flag da kaybolur.
  • Query: QUERYTRACEON hint’iyle tek bir ifadeyi etkiler. Yalnızca Microsoft’un bunun için belgelediği query optimizer trace flag’lerinde çalışır.

Her flag her kapsamı desteklemez. 3226 ya da 1222 gibi bazıları yalnızca global çalışır.

-- Bir trace flag'i global olarak aç (bir sonraki restart'a kadar)
DBCC TRACEON (3226, -1);

-- Tekrar kapat
DBCC TRACEOFF (3226, -1);

-- Global olarak açık tüm trace flag'leri listele
DBCC TRACESTATUS (-1);

-- Query kapsamı: yalnızca desteklenen query optimizer trace flag'leri için
SELECT OrderID, Total
FROM dbo.Orders
WHERE CustomerID = 42
OPTION (QUERYTRACEON 4199);

Bir Trace Flag Nasıl Kalıcı Hale Getirilir?

DBCC TRACEON ile açılan bir flag, plansız bir failover dahil bir sonraki restart’ta kaybolur. Kalıcı olması için startup parametresi olarak ekleyin:

  1. SQL Server Configuration Manager‘ı açın, SQL Server servisine sağ tıklayıp Properties‘i seçin.
  2. Startup Parameters sekmesinde -T3226 yazın (her flag için ayrı bir parametre) ve Add‘e tıklayın.
  3. Servisi yeniden başlatın ya da flag’in hemen etkili olması için ayrıca DBCC TRACEON (3226, -1) çalıştırın.

Linux’ta mssql-conf kullanın, örneğin sudo /opt/mssql/bin/mssql-conf traceflag 3226 on, ardından servisi yeniden başlatın. Bir failover cluster’da ya da availability group’ta aynı startup parametrelerini her node’a ekleyin; aksi halde davranış failover’dan sonra değişir.

Kritik

Bazı trace flag’ler ayar değil, acil durum aracıdır. Trace flag 902, başarısız bir Cumulative Update sonrasında veritabanı upgrade script’lerini atlar; Microsoft bunun sürekli açık tutulmasının desteklenmediğini ve güncellemenin tamamlanması için script’lerin yine de başarıyla çalışması gerektiğini söyler. Trace flag 7745, Query Store’un kapanışta veriyi diske yazmasını engeller; diske yazılmamış Query Store verisi kaybolabilir. İkisini de “ne olur ne olmaz” diye startup parametrelerinde bırakmayın.

Hâlâ Bilinmeye Değer Trace Flag’ler

Trace flag Ne yapar? Ne zaman kullanılır?
3226 Başarılı backup ve restore mesajlarını error log’a yazmaz. Hatalar yine loglanır. Sık log yedeği alınan sunucularda neredeyse her zaman. Error log‘u okunur tutar.
1222 / 1204 Deadlock ayrıntılarını error log’a yazar; 1222 XML benzeri biçimde, 1204 metin olarak. Bugün nadiren gerekir. Microsoft, deadlock’un yoğun olduğu sistemlerde kullanılmamasını önerir; bunun yerine system_health session‘ını kullanın.
1224 Lock sayısına bağlı lock escalation’ı kapatır; bellek baskısı yine de escalation başlatabilir. Belirli escalation sorunları. Tek tablolar için ALTER TABLE ... SET (LOCK_ESCALATION = ...) tercih edin. Bellek baskısında bile escalation’ı kapatan 1211’den kaçının.
4199 Cumulative Update’lerle gelen query optimizer düzeltmelerini açar. SQL Server 2016’dan beri bunun yerine QUERY_OPTIMIZER_HOTFIXES database scoped configuration’ını ya da ENABLE_QUERY_OPTIMIZER_HOTFIXES hint’ini kullanın.
15097 SQL Server 2022 Enterprise sürümünde AVX-512 desteğini açar. Yalnızca destekleyen donanımda test edildikten sonra.
17600 SQL Server 2025’te linked server’lar için OLE DB 18 sürücü davranışını korur. Linked server şifreleme ayarlarını düzeltene kadar geçici bir köprü olarak.

Emekliye Ayırabileceğiniz Trace Flag’ler

İnternetteki birçok trace flag listesi, yıllar önce işlevini yitirmiş flag’leri hâlâ öneriyor. Sunucunuz SQL Server 2016 ya da sonrasında çalışıyorsa bunlar kaldırılmaya adaydır:

Trace flag Eski amacı Bugün
1117 Bir filegroup’taki tüm dosyaları birlikte büyütmek SQL Server 2016’dan beri etkisiz; filegroup’ta AUTOGROW_ALL_FILES kullanın. Bkz. autogrowth rehberimiz.
1118 tempdb çekişmesini azaltmak için uniform extent SQL Server 2016’dan beri etkisiz; MIXED_PAGE_ALLOCATION ile yönetilir. Bkz. tempdb best practice’leri.
2371 Dinamik otomatik istatistik güncelleme eşiği SQL Server 2016’dan itibaren compatibility level 130 ve üzerinde etkisiz; varsayılan davranış budur.
3023 Her yedekte CHECKSUM SQL Server 2014’ten beri backup checksum default sunucu seçeneğini kullanın.
460 Ayrıntılı “string or binary data would be truncated” mesajı Compatibility level 150 ve üzerinde varsayılan; ayrıca VERBOSE_TRUNCATION_WARNINGS.
7412 Hafif sorgu profillemesi SQL Server 2019’dan beri varsayılan olarak açık.
7752 Query Store’un asenkron yüklenmesi SQL Server 2019’dan beri engine tarafından yönetiliyor.
2389 / 2390 Artan anahtarlar için hızlı istatistik Yeni cardinality estimator’da (CE 120 ve üzeri) geçerli değil; Microsoft bunun yerine trace flag 4139’u gösteriyor.

Not

Startup parametrelerinde bırakılmış emekli bir flag genellikle zarar vermez, ama yapılandırmayı okuyan bir sonraki kişiyi yanıltır. Örneğin filegroup ayarı başka bir şey söylerken 1117’nin hâlâ dosya büyümesini yönettiğini düşünebilir. Bu flag’leri bir sonraki bakım penceresinde kaldırın ve nedenini kayda geçin.

Database Scoped Configuration’ları ve Query Hint’lerini Tercih Edin

Bir davranışın belgelenmiş bir seçeneği varsa trace flag yerine onu kullanın. Bir database scoped configuration yalnızca bir veritabanını etkiler ve sys.database_scoped_configurations‘ta görünür; bir USE HINT yalnızca bir sorguyu etkiler ve kodun içinde kendini belgeler:

-- Tüm instance için trace flag 4199 yerine
ALTER DATABASE SCOPED CONFIGURATION SET QUERY_OPTIMIZER_HOTFIXES = ON;

-- Ya da yalnızca tek bir sorgu için
SELECT OrderID, Total
FROM dbo.Orders
WHERE CustomerID = 42
OPTION (USE HINT ('ENABLE_QUERY_OPTIMIZER_HOTFIXES'));

-- Mevcut veritabanında nelerin ayarlı olduğunu gör
SELECT name, value
FROM sys.database_scoped_configurations
ORDER BY name;

Sunucularınızdaki Trace Flag’leri Nasıl Denetlersiniz?

Şu an çalışanla bir sonraki restart’tan sonra çalışacak olanı karşılaştırın. Çoğu zaman farklıdırlar; çünkü biri bir flag’i DBCC TRACEON ile açıp startup parametrelerine hiç eklememiştir, ya da tam tersi:

-- Şu anda açık olanlar
DBCC TRACESTATUS (-1);

-- Servisin başlarken kullandığı parametreler (-T3226 gibi)
SELECT value_name, value_data
FROM sys.dm_server_registry
WHERE value_name LIKE N'SQLArg%';

Bulduğunuz her flag için üç soruyu yanıtlayın: bu sürümde ne yapıyor, onun yerine geçen belgelenmiş bir seçenek var mı, ve kim, neden açtı? Yanıtları sunucu dokümantasyonunuzda tutun. Her yapılandırma değişikliğinde olduğu gibi production’ı değiştirmeden önce test edin.

Trace flag, error log’a ne yazıldığı ya da query optimizer’ın nasıl çalıştığı gibi belirli bir SQL Server davranışını değiştiren bir anahtardır. Flag’e bağlı olarak global, session ya da tek bir sorgu seviyesinde açılabilir.
SQL Server Configuration Manager’da -T3226 gibi bir startup parametresi olarak ekleyin ve servisi yeniden başlatın. Linux’ta mssql-conf traceflag kullanın. Yalnızca DBCC TRACEON ile açılan bir flag, bir sonraki restart’ta ya da failover’da kaybolur.
Global olarak açık flag’leri listelemek için DBCC TRACESTATUS(-1) çalıştırın. Servisin hangi flag’lerle başlayacağını görmek için startup parametrelerindeki -T kayıtlarına, örneğin sys.dm_server_registry üzerinden bakın.
SQL Server 2016 ve sonrasında hayır. İkisinin de orada etkisi yoktur: dosya büyümesi AUTOGROW_ALL_FILES filegroup seçeneğiyle, allocation ise MIXED_PAGE_ALLOCATION ile yönetilir.
Trace flag 3226. Başarılı backup ve restore mesajlarını bastırır; başarısız yedekler yine loglanır. Global bir flag’dir, restart’lardan sonra da kalması için startup parametresi olarak ekleyin.

SQL Server Danışmanlığı

Her ayarın neden orada olduğunu bilin

Aryasoft’un kıdemli DBA ekibi trace flag’leri, startup parametrelerini, sunucu ve veritabanı yapılandırmalarını denetler; işe yaramayanları kaldırır, kalan her ayarı belgeler.

4.7/5