Udostępnij za pośrednictwem


Monitorowanie działania kopii zapasowych dla usługi Azure SQL Managed Instance

Dotyczy:Azure SQL Managed Instance

W tym artykule pokazano, jak monitorować aktywność tworzenia kopii zapasowych dla usługi Azure SQL Managed Instance przez wykonywanie zapytań względem msdb bazy danych lub konfigurowanie sesji zdarzenia rozszerzonego (XEvent).

Omówienie

Usługa Azure SQL Managed Instance przechowuje informacje o kopii zapasowej w bazie danych msdb , a także emituje zdarzenia (nazywane również zdarzeniami rozszerzonymi lub zdarzeniami XEvents) podczas działania tworzenia kopii zapasowej, które mogą być używane do raportowania. Skonfiguruj sesję XEvent, aby śledzić informacje, takie jak stan kopii zapasowej, typ kopii zapasowej, rozmiar, czas i lokalizacja w msdb bazie danych. Te informacje można zintegrować z oprogramowaniem do monitorowania kopii zapasowych, a także służyć do inspekcji przedsiębiorstwa.

Inspekcje przedsiębiorstwa mogą wymagać potwierdzenia pomyślnych kopii zapasowych, czasu tworzenia kopii zapasowej i czasu trwania kopii zapasowej.

Wykonywanie zapytań względem bazy danych msdb

Aby wyświetlić działanie tworzenia kopii zapasowej, uruchom następujące zapytanie z bazy danych zdefiniowanej przez użytkownika:

SELECT TOP (100)
    DB_NAME(DB_ID(bs.database_name)) AS [Database Name],
    CONVERT (BIGINT, bs.backup_size / 1048576) AS [Uncompressed Backup Size (MB)],
    CONVERT (BIGINT, bs.compressed_backup_size / 1048576) AS [Compressed Backup Size (MB)],
    CONVERT (NUMERIC (20, 2),
    CASE
        WHEN bs.compressed_backup_size > 0
        THEN CONVERT (FLOAT, bs.backup_size) / CONVERT (FLOAT, bs.compressed_backup_size)
        ELSE NULL
    END
    ) AS [Compression Ratio],
    bs.is_copy_only,
    -- bs.user_name, -- Applicable only for user-initiated COPY ONLY backups.
    bs.has_backup_checksums,
    DATEDIFF(SECOND, bs.backup_start_date, bs.backup_finish_date) AS [Backup Elapsed Time (sec)],
    bs.backup_finish_date AS [Backup Finish Date],
    bmf.physical_block_size
FROM msdb.dbo.backupset AS bs WITH (NOLOCK)
     INNER JOIN msdb.dbo.backupmediafamily AS bmf WITH (NOLOCK)
         ON bs.media_set_id = bmf.media_set_id
WHERE bs.[type] = 'D'
    -- AND bs.[is_copy_only] = 1  -- If you want to filter out for user initiated COPY ONLY backups.
ORDER BY bs.backup_finish_date DESC
OPTION (RECOMPILE); -- Optimize for ad hoc execution

Uwaga / Notatka

Podczas wykonywania zapytań dotyczących msdb tabel systemowych, takich jak dbo.backupmediaset lub dbo.backupset, są widoczne pola związane z szyfrowaniem wskazujące, że pliki kopii zapasowej nie są szyfrowane. Ten stan odzwierciedla tylko szyfrowanie na poziomie aparatu. Wszystkie automatyczne kopie zapasowe są szyfrowane w spoczynku.

Konfigurowanie sesji XEvent

Użyj zdarzenia backup_restore_progress_trace rozszerzonego, aby zarejestrować postęp tworzenia kopii zapasowej usługi SQL Managed Instance. Zmodyfikuj sesje XEvent zgodnie z potrzebami, aby śledzić informacje, które cię interesują w firmie. Te fragmenty kodu T-SQL przechowują sesje XEvent w buforze pierścieniowym, ale można również zapisywać w usłudze Azure Blob Storage. Sesje XEvent przechowujące dane w buforze pierścieniowym mają limit około 1000 komunikatów, dlatego powinny być używane tylko do śledzenia ostatnich działań. Ponadto dane buforu pierścieniowego zostaną utracone po przejściu w tryb failover. W związku z tym w przypadku historycznego rekordu kopii zapasowych zapisz w pliku zdarzenia.

Śledzenie podstawowe

Skonfiguruj podstawową sesję XEvent, aby przechwycić zdarzenia dotyczące pełnych kopii zapasowych. Ten skrypt zbiera nazwę bazy danych, łączną liczbę przetworzonych bajtów oraz czas ukończenia tworzenia kopii zapasowej.

Użyj Transact-SQL (T-SQL), aby skonfigurować podstawową sesję XEvent:

CREATE EVENT SESSION [Basic backup trace] ON SERVER
ADD EVENT sqlserver.backup_restore_progress_trace
(
        WHERE operation_type = 0
        AND trace_message LIKE '%100 percent%'
)
ADD TARGET package0.ring_buffer WITH (STARTUP_STATE = ON);
GO

ALTER EVENT SESSION [Basic backup trace] ON SERVER
STATE = start;

Pełne śledzenie

Skonfiguruj szczegółową sesję XEvent, aby śledzić więcej szczegółów dotyczących działania tworzenia kopii zapasowej. Ten skrypt przechwytuje początek i zakończenie tworzenia pełnych, różnicowych i kopii zapasowych dziennika. Ponieważ ten skrypt jest bardziej rozbudowany, szybciej wypełnia bufor pierścieniowy, więc wpisy mogą być zastępowane szybciej niż w przypadku skryptu podstawowego.

Użyj języka T-SQL, aby skonfigurować szczegółową sesję XEvent:

CREATE EVENT SESSION [Verbose backup trace] ON SERVER
ADD EVENT sqlserver.backup_restore_progress_trace(
    WHERE (
              [operation_type]=(0) AND (
              [trace_message] like '%100 percent%' OR
              [trace_message] like '%BACKUP DATABASE%' OR [trace_message] like '%BACKUP LOG%'))
       )
ADD TARGET package0.ring_buffer
WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,
       MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,
       TRACK_CAUSALITY=OFF,STARTUP_STATE=ON)

ALTER EVENT SESSION [Verbose backup trace] ON SERVER
STATE = start;

Monitorowanie postępu tworzenia kopii zapasowej

Po utworzeniu sesji XEvent można użyć języka T-SQL do wykonywania zapytań dotyczących wyników buforu pierścienia i monitorowania postępu tworzenia kopii zapasowej. Po uruchomieniu modułu XEvent zbiera wszystkie zdarzenia kopii zapasowej, dzięki czemu wpisy są dodawane do sesji mniej więcej co 5–10 minut.

Śledzenie podstawowe

Poniższy kod T-SQL wysyła zapytanie do podstawowej sesji XEvent i zwraca nazwę bazy danych, łączną liczbę przetworzonych bajtów i czas ukończenia tworzenia kopii zapasowej:

WITH
a AS (SELECT CAST (xet.target_data AS XML) AS xed
    FROM sys.dm_xe_session_targets AS xet
         INNER JOIN sys.dm_xe_sessions AS xe
             ON (xe.address = xet.event_session_address)
    WHERE xe.name = 'Backup trace'),
b AS (SELECT d.n.value('(@timestamp)[1]', 'datetime2') AS [timestamp],
           ISNULL(db.name, d.n.value('(data[@name="database_name"]/value)[1]', 'varchar(200)')) AS database_name,
           d.n.value('(data[@name="trace_message"]/value)[1]', 'varchar(4000)') AS trace_message
    FROM a
CROSS APPLY xed.nodes('/RingBufferTarget/event') AS d(n)
         LEFT OUTER JOIN master.sys.databases AS db
             ON db.physical_database_name = d.n.value('(data[@name="database_name"]/value)[1]', 'varchar(200)'))
SELECT * FROM b;

Poniższy zrzut ekranu przedstawia przykładowe dane wyjściowe poprzedniego zapytania:

Zrzut ekranu przedstawiający dane wyjściowe XEvent.

W tym przykładzie kopia zapasowa pięciu baz danych została automatycznie utworzona w ciągu 2 godzin i 30 minut, a w sesji XEvent znajduje się 130 wpisów.

Pełne śledzenie

Poniższy kod T-SQL wysyła zapytanie do szczegółowej sesji XEvent i zwraca nazwę bazy danych, a także początek i zakończenie tworzenia kopii zapasowych pełnych, różnicowych i dzienników.

WITH
a AS (SELECT CAST (xet.target_data AS XML) AS xed
    FROM sys.dm_xe_session_targets AS xet
         INNER JOIN sys.dm_xe_sessions AS xe
             ON (xe.address = xet.event_session_address)
    WHERE xe.name = 'Verbose backup trace'),
b AS (SELECT d.n.value('(@timestamp)[1]', 'datetime2') AS [timestamp],
           ISNULL(db.name, d.n.value('(data[@name="database_name"]/value)[1]', 'varchar(200)')) AS database_name,
           d.n.value('(data[@name="trace_message"]/value)[1]', 'varchar(4000)') AS trace_message
    FROM a
CROSS APPLY xed.nodes('/RingBufferTarget/event') AS d(n)
         LEFT OUTER JOIN master.sys.databases AS db
             ON db.physical_database_name = d.n.value('(data[@name="database_name"]/value)[1]', 'varchar(200)'))
SELECT * FROM b;

Poniższy zrzut ekranu przedstawia przykład pełnej kopii zapasowej w sesji XEvent:

Zrzut ekranu przedstawiający dane wyjściowe XEvent z pełnymi kopiami zapasowymi.

Poniższy zrzut ekranu przedstawia przykład danych wyjściowych różnicowej kopii zapasowej w sesji XEvent:

Zrzut ekranu przedstawiający dane wyjściowe XEvent z różnicowymi kopiami zapasowymi.