Değişiklik İzlemeyi Yönetme (SQL Server)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft Fabric'te SQL veritabanı

Bu makalede değişiklik izlemenin nasıl yönetileceğini açıklanmaktadır. Ayrıca, güvenliği yapılandırmayı ve değişiklik izleme kullanıldığında depolama ve performans üzerindeki etkileri belirlemeyi açıklar.

Değişiklik İzlemeyi Yönet

Aşağıdaki bölümlerde, değişiklik izlemeyi yönetmeyle ilgili katalog görünümleri, izinler ve ayarlar listelenir.

Katalog Görünümleri

Değişiklik izleme özelliğinin etkinleştirildiği tabloları ve veritabanlarını belirlemek için aşağıdaki katalog görünümlerini kullanın:

Ayrıca , sys.internal_tables katalog görünümü, bir kullanıcı tablosu için değişiklik izleme etkinleştirildiğinde oluşturulan iç tabloları listeler.

Security

Değişiklik izleme işlevlerini kullanarak değişiklik izleme bilgilerine erişmek için sorumlunun aşağıdaki izinlere sahip olması gerekir:

  • SELECT sorgulanan tablo için, değişiklikleri izlenen tablodaki en azından birincil anahtar sütunları üzerinde izin.

  • VIEW CHANGE TRACKING değişikliklerinin alınmakta olduğu tablo üzerindeki izin. İzin VIEW CHANGE TRACKING aşağıdaki nedenlerle gereklidir:

    • Değişiklik izleme kayıtları, silinen satırlar hakkında bilgi içerir. Kayıtlar, silinen satırların birincil anahtar değerlerini kullanır. Bazı hassas veriler silindikten sonra izlenen bir değişiklik tablosu için sorumluya izin verilebilir SELECT . Bu durumda, bu sorumlunun değişiklik izleme kullanarak silinen bilgilere erişmesini istemezsiniz.

    • Değişiklik izleme bilgileri, güncelleştirme işlemleri tarafından hangi sütunların değiştirildiğiyle ilgili bilgileri depolayabilir. Hassas bilgiler içeren bir sütuna bir öznenin erişim izni verilmeyebilir. Ancak, değişiklik izleme bilgileri kullanılabilir olduğundan, bir sorumlu bir sütun değerinin güncelleştirildiğini belirleyebilir, ancak sorumlu sütunun değerini belirleyemez.

Değişiklik izleme ek yükünü anlama

Bir tablo için değişiklik izlemeyi etkinleştirdiğinizde, bu bazı yönetim işlemlerini etkiler. Aşağıdaki tabloda, işlemleri ve dikkate almanız gereken etkiler listelemektedir.

Operation Değişiklik izleme etkinleştirildiğinde
DROP TABLE Bırakılan tablonun tüm değişiklik izleme bilgileri kaldırılır.
ALTER TABLE DROP CONSTRAINT Kısıtlamayı PRIMARY KEY bırakma girişimi başarısız olur. PRIMARY KEY kısıtlamayı kaldırmadan önce değişiklik izlemeyi devre dışı bırakmanız gerekir.
ALTER TABLE DROP COLUMN Kaldırdığınız bir sütun birincil anahtarın parçasıysa, değişiklik izleme durumundan bağımsız olarak bu sütunun kaldırılmasına izin verilmez.

Silmekte olduğunuz sütun birincil anahtarın parçası değilse, sütun başarıyla silinir. Ancak, önce bu verileri eşitleyen herhangi bir uygulama üzerindeki etkisini anlamanız gerekir. Tabloda sütun değişiklik izleme etkinleştirildiyse, silinen sütun yine de değişiklik izleme bilgilerinin bir parçası olarak döndürülebilir. Bırakılan sütunu işlemek uygulamanın sorumluluğundadır.
ALTER TABLE ADD COLUMN İzlenen değişiklik tablosuna yeni bir sütun eklerseniz, sütunun eklenmesi izlenmez. Yalnızca yeni sütunda yapılan güncelleştirmeler ve değişiklikler izlenir.
ALTER TABLE ALTER COLUMN Birincil olmayan anahtar sütununun veri türü değişiklikleri izlenmez.
ALTER TABLE SWITCH Bir veya iki tabloda değişiklik izleme etkinse bölüm değiştirme işlemi başarısız olur.
DROP INDEX, or ALTER INDEX DISABLE Birincil anahtarı zorlayan dizin bırakılamaz veya devre dışı bırakılamaz.
TRUNCATE TABLE Değişiklik izleme özelliğinin etkinleştirildiği bir tabloyu kesebilirsiniz. Ancak, işlemin sildiği satırlar izlenmez ve en düşük geçerli sürüm güncelleştirilir. Bir uygulama sürümünü denetlediğinde, denetim sürümün çok eski olduğunu ve yeniden başlatma gerektiğini gösterir. Bu koşul, değişiklik izlemenin devre dışı bırakılmasıyla aynıdır ve tablo için yeniden kullanılabilir.

değişiklik izlemenin kullanılması, işlem değişiklik izleme bilgilerini depoladığı için DML işlemlerine biraz ek yük getirir.

DML üzerindeki etkileri

Değişiklik izleme, DML işlemlerinde performans ek yükünü en aza indirmek için iyileştirilmiştir. Bir tabloda değişiklik izlemenin kullanılmasıyla birlikte gelen artımlı performans ek yükü, bir tablo için dizin oluşturup bakımını yaparken karşılaştığınız ek yüke benzer.

Bir DML işleminin değiştireceği her satır için sistem, iç değişiklik izleme tablosuna bir satır ekler. Bu eylemin DML işlemine göre etkisi, aşağıdakiler gibi çeşitli faktörlere bağlıdır:

  • Birincil anahtar sütunlarının sayısı

  • Kullanıcı tablosu satırında değiştirilen veri miktarı

  • Bir işlemde gerçekleştirilen işlem sayısı

Kullanılırsa anlık görüntü yalıtımı, değişiklik izlemenin etkinleştirilip etkinleştirilmediği fark etmeksizin tüm DML işlemlerinin performansını da etkiler.

Depolama üzerindeki etkiler

Değişiklik izleme verileri aşağıdaki iç tablo türlerinde depolanır:

  • İç değişiklik tablosu

    Değişiklik izleme etkin olan her kullanıcı tablosu kendi iç değişiklik tablosunu alır.

  • İç işlem tablosu

    Veritabanında bir iç işlem tablosu vardır.

Bu iç tablolar depolama gereksinimlerini aşağıdaki yollarla etkiler:

  • Kullanıcı tablosundaki her satırda yapılan her değişiklik için, değişiklik izleme iç değişiklik tablosuna bir satır ekler. Bu satır küçük bir sabit ek yüke ek olarak birincil anahtar sütunlarının boyutuna eşit bir değişken ek yüküne sahiptir. Satır, bir uygulama tarafından ayarlanan isteğe bağlı bağlam bilgilerini içerebilir. Sütun izlemeyi etkinleştirirseniz, değiştirilen her sütun izleme tablosunda 4 bayt gerektirir.

  • Kaydedilen her işlem için değişiklik izleme, iç işlem tablosuna bir satır ekler.

Diğer iç tablolarda olduğu gibi, sp_spaceused saklı yordamını kullanarak değişiklik izleme tabloları için kullanılan alanı belirleyebilirsiniz. Aşağıdaki örnekte gösterildiği gibi , sys.internal_tables katalog görünümünü kullanarak iç tabloların adlarını alabilirsiniz.

sp_spaceused 'sys.change_tracking_309576141'  
sp_spaceused 'sys.syscommittab'