Puzzle pieces with one outdated piece set apart, representing deprecated SQL Server features

SQL Server’da Kullanımdan Kaldırılan Özellikleri Bulmak

SQL Server’da kullanımdan kaldırılan özelliklerin hangilerinin kullanıldığını performans sayaçlarıyla görmek, Extended Events ile kaynağını bulmak ve upgrade öncesinde sık örnekleri değiştirmek.

Aralık 29, 2021

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.

SQL Server Upgrade Desteği

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.

Destek Alın

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ç

  1. Sayaçları bir iş döngüsü sonunda okuyun ve kullanılan özellikleri listeleyin.
  2. Extended Events ile her özelliği kullanan uygulamayı, veritabanını ve sorguyu bulun.
  3. Hedef sürümün discontinued listesindekileri öncelikli düzeltin.
  4. Kendi kodunuzu düzeltin; üçüncü parti uygulamalar için üreticinin destek durumunu sorun.
  5. Upgrade’den sonra sayaçları yeniden kontrol edin.
Hâlâ çalışan ama gelecekteki bir sürümde kaldırılacak özelliktir. Yeni kodda kullanılmamalı, mevcut kullanımlar planlı şekilde değiştirilmelidir.
sys.dm_os_performance_counters içinde object_name’i Deprecated Features olan sayaçları sorgulayın. Kullanımın kaynağını bulmak için deprecation_announcement ve deprecation_final_support Extended Events olaylarını kullanın.
Deprecated özellik hâlâ çalışır; discontinued özellik o sürümde kaldırılmıştır ve kullanan kod hata verir.
SQL Server servisi yeniden başlatıldığında. Anlamlı sonuç için en az bir tam iş döngüsü sonrasında okuyun.

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.

4.7/5