Aracılığıyla paylaş


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 kullanabilirsiniz:

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 en azından izlenen tablodaki birincil anahtar sütunlarında sorgulanan tabloya izin verin.

  • 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ı silinmiş satırlar hakkındaki bilgileri içerir. Kayıtlar, silinmiş satırların birincil anahtar değerlerini kullanır. Bazı hassas veriler silindikten sonra izlenen bir değişiklik tablosu için sorumluya izin verilmiş SELECT olabilir. Bu durumda, bu sorumlusun değişiklik izleme kullanarak silinen bilgilere erişebilmesini istemezsiniz.

    • Değişiklik izleme bilgileri, güncelleştirme işlemleri tarafından hangi sütunların değiştirildiğiyle ilgili bilgileri depolayabilir. Sorumluya hassas bilgiler içeren bir sütun için izin reddedilebilir. 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 izleme etkinleştirildiğinde, bazı yönetim işlemleri etkilenir. 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. Bir PRIMARY KEY kısıtlamanın bırakılabilmesi için değişiklik izleme devre dışı bırakılmalıdır.
ALTER TABLE DROP COLUMN Bırakılan bir sütun birincil anahtarın parçasıysa, değişiklik izlemeden bağımsız olarak sütunun bırakılmasına izin verilmez.

Bırakılan sütun birincil anahtarın parçası değilse, sütunu bırakma işlemi başarılı olur. Ancak, bu verileri eşitleyen herhangi bir uygulama üzerindeki etkisi önce anlaşılmalıdır. Tablo için sütun değişikliği izleme etkinleştirildiyse, bırakılan sütun 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 Değişiklik izlenen tablosuna yeni bir sütun eklenirse, 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 Bir tablonun kesilmesi, değişiklik izlemenin etkinleştirildiği bir tabloda gerçekleştirilebilir. Ancak, işlem tarafından silinen 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, 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şlemin bir parçası olarak depolanan değişiklik izleme bilgileri nedeniyle 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 indirecek şekilde iyileştirilmiştir. Bir tabloda değişiklik izlemenin kullanılmasıyla ilişkili artımlı performans ek yükü, bir tablo için dizin oluşturulduğunda ve korunması gerektiğinde oluşan ek yüke benzer.

Bir DML işlemi tarafından değiştirilen her satır için, iç değişiklik izleme tablosuna bir satır eklenir. Bunun 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şlemlerin sayısı

Kullanılırsa anlık görüntü yalıtımının, değişiklik izlemenin etkin olup olmadığına bakılmaksızın tüm DML işlemleri için performansı 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 özelliği etkin olan her kullanıcı tablosu için bir iç değişiklik tablosu vardır.

  • İç işlem tablosu

    Veritabanı için 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, iç değişiklik tablosuna bir satır eklenir. 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 izleme etkinleştirilirse, değiştirilen her sütun izleme tablosunda 4 bayt gerektirir.

  • Her kaydedilmiş işlem için iç işlem tablosuna bir satır eklenir.

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

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