Bagikan melalui


Memantau aktivitas pencadangan untuk Azure SQL Managed Instance

Berlaku untuk:Azure SQL Managed Instance

Artikel ini mengajarkan anda cara memantau aktivitas pencadangan untuk Azure SQL Managed Instance dengan mengkueri msdb database atau dengan mengonfigurasi sesi extended event (XEvent).

Gambaran Umum

Azure SQL Managed Instance menyimpan informasi cadangan dalam database msdb dan juga memancarkan peristiwa (juga dikenal sebagai Extended Events atau XEvents) selama aktivitas pencadangan, yang dapat digunakan untuk pelaporan. Konfigurasikan sesi XEvent untuk melacak informasi seperti status cadangan, jenis cadangan, ukuran, waktu, dan lokasi dalam msdb database. Informasi ini dapat diintegrasikan dengan perangkat lunak pemantauan cadangan dan juga digunakan untuk Audit Perusahaan.

Audit Perusahaan dapat memerlukan bukti keberhasilan salinan cadangan, waktu salinan cadangan, dan durasi salinan cadangan.

Kueri database msdb

Untuk melihat aktivitas pencadangan, jalankan kueri berikut dari database yang ditentukan pengguna:

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

Nota

Saat mengkueri msdb tabel sistem seperti dbo.backupmediaset atau dbo.backupset, Anda melihat bidang terkait enkripsi yang menunjukkan bahwa file cadangan tidak dienkripsi. Status ini hanya mencerminkan enkripsi tingkat mesin. Semua pencadangan otomatis dienkripsi saat tidak aktif.

Mengonfigurasi sesi XEvent

Gunakan acara yang diperluas backup_restore_progress_trace untuk merekam kemajuan instans SQL Terkelola Anda. Ubah sesi XEvent sesuai kebutuhan untuk melacak informasi yang Anda minati untuk bisnis Anda. Cuplikan T-SQL menyimpan sesi XEvent di ring buffer, tetapi juga dimungkinkan untuk menulis ke Azure Blob Storage. Sesi XEvent yang menyimpan data di buffer cincin memiliki batas sekitar 1.000 pesan sehingga hanya boleh digunakan untuk melacak aktivitas terbaru. Selain itu, data ring buffer hilang saat failover. Dengan demikian, untuk catatan historis cadangan, tulis ke file peristiwa sebagai gantinya.

Pelacakan dasar

Konfigurasikan sesi XEvent dasar untuk menangkap peristiwa tentang pencadangan penuh yang lengkap. Skrip ini mengumpulkan nama database, jumlah total byte yang diproses, dan waktu pencadangan selesai.

Gunakan Transact-SQL (T-SQL) untuk mengonfigurasi sesi XEvent dasar:

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;

Pelacakan verbose

Konfigurasikan sesi XEvent verbose untuk melacak detail yang lebih besar tentang aktivitas cadangan Anda. Skrip ini menangkap awal dan akhir dari pencadangan penuh, diferensial, dan log. Karena skrip ini lebih verbose, skrip mengisi buffer cincin lebih cepat, sehingga entri mungkin mendaur ulang lebih cepat daripada dengan skrip dasar.

Gunakan T-SQL untuk mengonfigurasi sesi XEvent verbose:

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;

Memantau kemajuan pencadangan

Setelah sesi XEvent dibuat, Anda dapat menggunakan T-SQL untuk mengkueri hasil buffer cincin dan memantau kemajuan cadangan. Setelah XEvent dimulai, ia mengumpulkan semua acara cadangan sehingga entri ditambahkan ke sesi kira-kira setiap 5-10 menit.

Pelacakan dasar

Kode T-SQL berikut mengkueri sesi XEvent dasar dan mengembalikan nama database, jumlah total byte yang diproses, dan waktu pencadangan selesai:

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;

Cuplikan layar berikut menunjukkan contoh output kueri sebelumnya:

Cuplikan layar output XEvent.

Dalam contoh ini, lima database secara otomatis dicadangkan selama 2 jam dan 30 menit, dan ada 130 entri dalam sesi XEvent.

Pelacakan verbose

Kode T-SQL berikut mengkueri sesi XEvent verbose dan mengembalikan nama database, serta awal dan akhir cadangan penuh, diferensial, dan log.

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;

Cuplikan layar berikut ini memperlihatkan contoh cadangan lengkap di sesi XEvent:

Cuplikan layar output XEvent memperlihatkan pencadangan penuh.

Cuplikan layar berikut ini memperlihatkan contoh output cadangan diferensial di sesi XEvent:

Cuplikan layar output XEvent memperlihatkan cadangan diferensial.