Sdílet prostřednictvím


Správa řešení Change Tracking (SQL Server)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL databáze v Microsoft Fabric

Tento článek popisuje, jak spravovat sledování změn. Popisuje také, jak nakonfigurovat zabezpečení a určit účinky na úložiště a výkon při použití sledování změn.

Správa sledování změn

Následující části obsahují seznam zobrazení, oprávnění a nastavení katalogu, která jsou relevantní pro správu sledování změn.

Zobrazení katalogu

Pokud chcete zjistit, které tabulky a databáze mají povolené sledování změn, můžete použít následující zobrazení katalogu:

Zobrazení katalogu sys.internal_tables také obsahuje interní tabulky, které se vytvoří při povolení sledování změn pro uživatelskou tabulku.

Zabezpečení

Pokud chcete získat přístup k informacím o sledování změn pomocí funkcí sledování změn, musí mít objekt zabezpečení následující oprávnění:

  • SELECT oprávnění alespoň pro sloupce primárního klíče v tabulce sledované změnou na tabulku, která se dotazuje.

  • VIEW CHANGE TRACKING oprávnění k tabulce, pro kterou se získávají změny. Oprávnění VIEW CHANGE TRACKING se vyžaduje z následujících důvodů:

    • Záznamy sledování změn obsahují informace o odstraněných řádcích. Záznamy používají hodnoty primárního klíče řádků, které byly odstraněny. Po odstranění některých citlivých dat mohlo být objektu zabezpečení uděleno SELECT oprávnění ke sledované tabulce změn. V takovém případě byste nechtěli, aby tento objekt zabezpečení měl přístup k odstraněným informacím pomocí sledování změn.

    • Informace o sledování změn můžou ukládat informace o tom, které sloupce byly změněny operacemi aktualizace. Objekt zabezpečení může být odepřen oprávnění ke sloupci, který obsahuje citlivé informace. Vzhledem k tomu, že informace o sledování změn jsou k dispozici, může objekt zabezpečení určit, že hodnota sloupce byla aktualizována, ale objekt zabezpečení nemůže určit hodnotu sloupce.

Vysvětlení režie sledování změn

Pokud je u tabulky povolené sledování změn, ovlivní některé operace správy. Následující tabulka uvádí operace a efekty, které byste měli zvážit.

Operation Když je povolené sledování změn
DROP TABLE Odeberou se všechny informace o sledování změn vyřazené tabulky.
ALTER TABLE DROP CONSTRAINT Pokus o vyřazení PRIMARY KEY omezení selže. Sledování změn musí být zakázané, aby PRIMARY KEY bylo možné omezení vynechat.
ALTER TABLE DROP COLUMN Pokud je vyřazený sloupec součástí primárního klíče, zrušení sloupce není povoleno bez ohledu na sledování změn.

Pokud sloupec, který se zahodí, není součástí primárního klíče, přetažení sloupce proběhne úspěšně. Účinek na libovolnou aplikaci, která tato data synchronizuje, by se ale mělo nejprve pochopit. Pokud je pro tabulku povolené sledování změn sloupců, může se vynechaný sloupec vrátit jako součást informací o sledování změn. Za zpracování vyřazeného sloupce zodpovídá aplikace.
ALTER TABLE ADD COLUMN Pokud se do sledované tabulky změn přidá nový sloupec, přidání sloupce se nesleduje. Sledují se jenom aktualizace a změny provedené v novém sloupci.
ALTER TABLE ALTER COLUMN Změny datového typu sloupce bez primárního klíče se nesledují.
ALTER TABLE SWITCH Přepnutí oddílu selže, pokud je povolené sledování změn jedné nebo obou tabulek.
DROP INDEX, or ALTER INDEX DISABLE Index, který vynucuje primární klíč, nelze vynechat ani zakázat.
TRUNCATE TABLE Zkrácení tabulky lze provést u tabulky, která má povolené sledování změn. Řádky, které operace odstraní, se ale nesledují a aktualizuje se minimální platná verze. Když aplikace zkontroluje jeho verzi, kontrola značí, že verze je příliš stará a vyžaduje se opětovná inicializace. Je to stejné jako zakázání sledování změn a následné opětovné povolení tabulky.

Použití sledování změn přidává do operací DML určité režijní náklady kvůli informacím o sledování změn, které se ukládají jako součást operace.

Efekty na DML

Sledování změn je optimalizované tak, aby se minimalizovala režijní náklady na výkon operací DML. Režijní náklady na přírůstkový výkon související s používáním sledování změn v tabulce se podobají režijním nákladům, které vzniknou při vytvoření indexu pro tabulku a je potřeba je udržovat.

Pro každý řádek, který se změní operací DML, se do interní tabulky sledování změn přidá řádek. Účinek této operace vzhledem k operaci DML závisí na různých faktorech, například:

  • Počet sloupců primárního klíče

  • Množství dat, která se mění v řádku tabulky uživatele

  • Počet operací prováděných v transakci

Izolace snímků, pokud se používá, má také vliv na výkon pro všechny operace DML, ať už je sledování změn povolené nebo ne.

Účinky na úložiště

Data sledování změn se ukládají v následujících typech interních tabulek:

  • Interní tabulka změn

    Pro každou tabulku uživatelů, která má povolené sledování změn, existuje jedna interní tabulka změn.

  • Interní tabulka transakcí

    Pro databázi existuje jedna interní transakční tabulka.

Tyto interní tabulky ovlivňují požadavky na úložiště následujícími způsoby:

  • Pro každou změnu každého řádku v tabulce uživatele se do interní tabulky změn přidá řádek. Tento řádek má malou pevnou režii a proměnnou režii, která se rovná velikosti sloupců primárního klíče. Řádek může obsahovat volitelné kontextové informace nastavené aplikací. A pokud je sledování sloupců povolené, každý změněný sloupec vyžaduje v tabulce sledování 4 bajty.

  • Pro každou potvrzenou transakci se do interní tabulky transakcí přidá řádek.

Stejně jako u jiných interních tabulek můžete určit prostor používaný pro tabulky sledování změn pomocí sp_spaceused uložené procedury. Názvy interních tabulek lze získat pomocí zobrazení katalogu sys.internal_tables , jak je znázorněno v následujícím příkladu.

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