Microsoft her SQL Server sürümünde bazı özellikleri “deprecated” (kullanımdan kaldırılacak) olarak işaretler. Bu özellikler hâlâ çalışır; ama gelecekteki bir sürümde kaldırılacaklardır ve yeni geliştirmede kullanılmamaları gerekir. Sorun şudur: bir upgrade sırasında, yıllardır kimsenin dokunmadığı bir stored procedure’ün kaldırılmış bir sözdizimi kullandığı ancak geçiş günü ortaya çıkar.
SQL Server, hangi kullanımdan kaldırılan özelliklerin kullanıldığını kendisi sayar. Bu yazıda bu sayaçları okumayı, kullanımın kaynağını Extended Events ile bulmayı ve en sık karşılaşılan örnekleri anlatıyoruz.
Upgrade'iniz eski kod yüzünden takılmasın
Aryasoft, kullanımdan kaldırılan özellikleri ve uyumsuz kodu upgrade'den önce bulur, düzeltme planını hazırlar.
Deprecated ve Discontinued Farkı
- Deprecated: Özellik hâlâ çalışır ama gelecekte kaldırılacaktır. Yeni kodda kullanılmamalı, mevcut kullanımlar planlı şekilde değiştirilmelidir.
- Discontinued: Özellik o sürümde kaldırılmıştır; kullanan kod hata verir. Upgrade’i doğrudan durduran durum budur.
Her sürümün deprecated ve discontinued listeleri Microsoft dokümanlarında yayımlanır; upgrade planlarken hedef sürümün discontinued listesini mutlaka kontrol edin. Ayrıntılar upgrade rehberimizde.
Sayaçlarla Kullanımı Görmek
SQL Server, servis başladığından beri her deprecated özelliğin kaç kez kullanıldığını bir performans sayacında tutar:
SELECT instance_name AS deprecated_feature,
cntr_value AS usage_count
FROM sys.dm_os_performance_counters
WHERE object_name LIKE N'%Deprecated Features%'
AND cntr_value > 0
ORDER BY cntr_value DESC;
Sayaçlar servis yeniden başlatıldığında sıfırlanır. Anlamlı bir resim için sorguyu, sunucu en az bir iş döngüsü (örneğin bir ay sonu kapanışı) boyunca çalıştıktan sonra çalıştırın.
Not
Sayaçlar hangi özelliğin kullanıldığını söyler, kimin kullandığını söylemez. Bir özelliğin milyonlarca kez kullanıldığını görmek, onu çağıran kodun nerede olduğunu bulmadan bir işe yaramaz. Kaynağı bulmak için aşağıdaki Extended Events oturumunu kullanın.
Kaynağı Bulmak: Extended Events
deprecation_announcement olayı gelecekte kaldırılacak özellikleri, deprecation_final_support olayı ise bir sonraki sürümde kaldırılacak özellikleri yakalar. Olayları uygulama, kullanıcı ve sorgu metniyle birlikte kaydedin:
CREATE EVENT SESSION DeprecatedUsage ON SERVER
ADD EVENT sqlserver.deprecation_announcement
(ACTION (sqlserver.client_app_name, sqlserver.client_hostname,
sqlserver.database_name, sqlserver.username, sqlserver.sql_text)),
ADD EVENT sqlserver.deprecation_final_support
(ACTION (sqlserver.client_app_name, sqlserver.client_hostname,
sqlserver.database_name, sqlserver.username, sqlserver.sql_text))
ADD TARGET package0.event_file (SET filename = N'DeprecatedUsage', max_file_size = 50, max_rollover_files = 4)
WITH (MAX_DISPATCH_LATENCY = 30 SECONDS, STARTUP_STATE = OFF);
ALTER EVENT SESSION DeprecatedUsage ON SERVER STATE = START;
Sık kullanılan bir özellik çok sayıda olay üretebilir; oturumu yoğun bir sistemde sınırlı bir süre çalıştırın ve dosya boyutlarını izleyin. Extended Events oturumlarının ayrıntıları için Extended Events rehberimize bakın.
Sık Karşılaşılan Örnekler
| Kullanımdan kaldırılan | Yerine |
|---|---|
| text, ntext, image veri tipleri | varchar(max), nvarchar(max), varbinary(max) |
| INSERT, UPDATE, DELETE ile SET ROWCOUNT | TOP (n) |
| ‘takma_ad’ = ifade biçiminde sütun takma adı | ifade AS takma_ad |
| timestamp veri tipi adı | rowversion |
| DBCC DBREINDEX, DBCC INDEXDEFRAG | ALTER INDEX REBUILD / REORGANIZE |
| DBCC SHOWCONTIG | sys.dm_db_index_physical_stats |
| sp_depends | sys.dm_sql_referencing_entities, sys.dm_sql_referenced_entities |
| sys.sysprocesses, sys.sysobjects gibi uyumluluk görünümleri | sys.dm_exec_sessions, sys.objects gibi katalog görünümleri |
| Database Mirroring | Always On Availability Groups |
Bunların bir kısmı uygulamaların içinde değil, DBA script’lerinde ve bakım job’larında yaşar. Eski bir bakım planı ya da yıllar önce yazılmış bir izleme script’i, sayaçlarda en çok görünen kullanımların kaynağı olabilir.
Uyarı
Eski şifreleme algoritmaları (örneğin RC4 ve DES) da deprecated listesindedir ve bazıları yeni compatibility level’larda çalışmaz. Bu algoritmalarla şifrelenmiş anahtarlar ya da sertifikalar varsa, upgrade öncesinde AES ile yeniden şifreleme planlayın; aksi halde şifreli verilere erişim kesilebilir.
Önerilen Süreç
- Sayaçları bir iş döngüsü sonunda okuyun ve kullanılan özellikleri listeleyin.
- Extended Events ile her özelliği kullanan uygulamayı, veritabanını ve sorguyu bulun.
- Hedef sürümün discontinued listesindekileri öncelikli düzeltin.
- Kendi kodunuzu düzeltin; üçüncü parti uygulamalar için üreticinin destek durumunu sorun.
- Upgrade’den sonra sayaçları yeniden kontrol edin.
İlgili Yazılar
SQL Server Upgrade Desteği
Upgrade gününde sürpriz yaşamayın
Aryasoft’un kıdemli DBA ekibi kullanımdan kaldırılan özellikleri ve uyumsuz kodu upgrade’den önce bulur, kaynaklarını belirler ve düzeltmeleri geçiş planına dahil eder.