Udostępnij za pośrednictwem


Zarządzanie danymi historycznymi przy użyciu zasad przechowywania

Ważne

Usługa Azure SQL Edge zostanie wycofana 30 września 2025 r. Aby uzyskać więcej informacji i opcji migracji, zobacz powiadomienie o wycofaniu.

Uwaga

Usługa Azure SQL Edge nie obsługuje już platformy ARM64.

Po zdefiniowaniu zasad przechowywania danych dla bazy danych i tabeli bazowej zadanie czasomierza w tle jest uruchamiane w celu usunięcia wszelkich przestarzałych rekordów z tabeli włączonej na potrzeby przechowywania danych. Identyfikacja pasujących wierszy i ich usuwania z tabeli odbywa się w sposób niewidoczny, w zadaniu w tle zaplanowanym i uruchomionym przez system. Warunek wieku wierszy tabeli jest sprawdzany na filter_column podstawie kolumny określonej w definicji tabeli. Jeśli okres przechowywania jest ustawiony na tydzień, na przykład wiersze tabeli kwalifikujące się do oczyszczenia spełniają jeden z następujących warunków:

  • Jeśli kolumna filtru używa typu danych DATETIMEOFFSET, warunek to filter_column < DATEADD(WEEK, -1, SYSUTCDATETIME())
  • W przeciwnym razie warunek to filter_column < DATEADD(WEEK, -1, SYSDATETIME())

Fazy oczyszczania przechowywania danych

Operacja oczyszczania przechowywania danych składa się z dwóch faz:

  1. Odnajdywanie: W tej fazie operacja oczyszczania identyfikuje wszystkie tabele w bazach danych użytkownika w celu utworzenia listy do czyszczenia. Odnajdywanie jest uruchamiane raz dziennie.
  2. Oczyszczanie: W tej fazie czyszczenie jest uruchamiane względem wszystkich tabel z skończonym przechowywaniem danych zidentyfikowanym w fazie odnajdywania. Jeśli nie można wykonać operacji oczyszczania w tabeli, ta tabela zostanie pominięta w bieżącym przebiegu i zostanie ponowiona w następnej iteracji. Podczas oczyszczania są używane następujące zasady:
    • Jeśli przestarzały wiersz jest zablokowany przez inną transakcję, ten wiersz zostanie pominięty.
    • Czyszczenie jest uruchamiane z domyślnym limitem czasu blokady 5 sekund. Jeśli blokady nie można uzyskać w tabelach w oknie limitu czasu, tabela zostanie pominięta w bieżącym przebiegu i zostanie ponowiona w następnej iteracji.
    • Jeśli podczas czyszczenia tabeli wystąpi błąd, ta tabela zostanie pominięta i zostanie odebrana w następnej iteracji.

Czyszczenie ręczne

W zależności od ustawień przechowywania danych w tabeli i charakteru obciążenia w bazie danych możliwe jest, że wątek automatycznego czyszczenia może nie całkowicie usunąć wszystkich przestarzałych wierszy podczas jego uruchamiania. Aby umożliwić użytkownikom ręczne usuwanie przestarzałych wierszy, sys.sp_cleanup_data_retention procedura składowana została wprowadzona w usłudze Azure SQL Edge.

Ta procedura składowana przyjmuje trzy parametry:

  • @schema_name: nazwa schematu będąca właścicielem tabeli. Wymagany.
  • @table_name: nazwa tabeli, dla której jest uruchamiane czyszczenie ręczne. Wymagany.
  • @rowcount: zmienna wyjściowa. Zwraca liczbę wierszy wyczyszczonej przez funkcję czyszczenia ręcznego sp. Opcjonalny.

Aby uzyskać więcej informacji, zobacz sys.sp_cleanup_data_retention (Transact-SQL).

W poniższym przykładzie pokazano wykonanie ręcznego czyszczenia sp dla tabeli dbo.data_retention_table.

DECLARE @rowcnt BIGINT;
EXEC sys.sp_cleanup_data_retention 'dbo', 'data_retention_table', @rowcnt OUTPUT;
SELECT @rowcnt;

Jak są usuwane przestarzałe wiersze

Proces oczyszczania zależy od układu indeksu tabeli. Zadanie w tle jest tworzone w celu wykonania przestarzałego czyszczenia danych dla wszystkich tabel z skończonym okresem przechowywania. Czyszczenie logiki dla indeksu magazynu wierszy (sterta lub drzewa B) usuwa przestarzałe wiersze w mniejszych fragmentach (do 10 000), minimalizując presję na dziennik bazy danych i podsystem we/wy. Mimo że logika oczyszczania korzysta z wymaganego indeksu drzewa B, kolejność usuwania wierszy starszych niż okres przechowywania nie może być gwarantowana. Innymi słowy, nie należy stosować zależności od kolejności oczyszczania w aplikacjach.

Ostrzeżenie

W przypadku indeksów szesnastek i indeksów drzewa B przechowywanie danych uruchamia zapytanie usuwania w podstawowych tabelach, które może powodować konflikt z wyzwalaczami usuwania w tabelach. Należy usunąć wyzwalacze usuwania z tabel lub unikać przechowywania danych w tabelach, które mają wyzwalacze DML.

Zadanie oczyszczania dla klastrowanych indeksów magazynu kolumn usuwa jednocześnie całe grupy wierszy (zazwyczaj zawierają 1 milion wierszy), co jest wydajne, szczególnie w przypadku generowania i starzenia się danych w wysokim tempie.

Diagram oczyszczania przechowywania danych.

Doskonała kompresja danych i wydajne czyszczenie przechowywania sprawia, że klastrowane indeksy magazynu kolumn doskonale nadają się do scenariuszy, w których obciążenie szybko generuje dużą ilość danych.

Monitorowanie oczyszczania przechowywania danych

Operacje oczyszczania zasad przechowywania danych można monitorować przy użyciu zdarzeń rozszerzonych w usłudze Azure SQL Edge. Aby uzyskać więcej informacji na temat zdarzeń rozszerzonych, zobacz Omówienie zdarzeń rozszerzonych.

Następujące zdarzenia rozszerzone ułatwiają śledzenie stanu operacji oczyszczania.

Nazwa/nazwisko opis
data_retention_task_started Występuje, gdy rozpoczyna się zadanie w tle do czyszczenia tabel z zasadami przechowywania.
data_retention_task_completed Występuje, gdy zadanie w tle do czyszczenia tabel z zasadami przechowywania kończy się.
data_retention_task_exception Występuje, gdy zadanie w tle do czyszczenia tabel z zasadami przechowywania kończy się niepowodzeniem, poza procesem oczyszczania przechowywania specyficznym dla tych tabel.
data_retention_cleanup_started Występuje, gdy rozpoczyna się proces oczyszczania tabeli z zasadami przechowywania danych.
data_retention_cleanup_exception Występuje, gdy proces oczyszczania tabeli z zasadami przechowywania kończy się niepowodzeniem.
data_retention_cleanup_completed Występuje po zakończeniu procesu oczyszczania tabeli z zasadami przechowywania danych.

Ponadto nowy typ buforu pierścienia o nazwie RING_BUFFER_DATA_RETENTION_CLEANUP został dodany do dynamicznego sys.dm_os_ring_buffers widoku zarządzania. Ten widok może służyć do monitorowania operacji oczyszczania przechowywania danych.