Boa tarde a todos,
como estão?
Já precisaram monitorar os backups que o próprio Managed Instance faz da instancia?
Para quem não sabe: O Banco de Dados SQL do Azure e a Instância Gerenciada de SQL do Azure utilizam a tecnologia de SQL Server para criar backups completos toda semana, backups diferenciais a cada 12-24 horas e backups de log de transações a cada 5 a 10 minutos. A frequência dos backups de logs de transações é baseada no tamanho da computação e na quantidade de atividade do banco de dados.
Para mais informações do que é o Managed instancia, segue uma série do Fabricio Lima explicando vários conceitos:
Pois bem, no errorlog da instancia conseguimos ter algumas informações.. mas nada muito específico, então validei essa informação via extend event, script a seguir da criação:
CREATE EVENT SESSION [Acompanhamento 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 [Acompanhamento backup trace] ON SERVER
STATE = start;
Após criar basta habilitar o Watch Live Data, conforme imagem abaixo:

Assim que iniciar os backups, conforme a frequência de cada um explicada no inicio do post, podemos monitorar em tempo de execução.

Caso a imagem acima não atenda suas necessidades, podemos ver as informações do trace dessa forma.
WITH
a AS (SELECT xed = CAST(xet.target_data AS xml)
FROM sys.dm_xe_session_targets AS xet
JOIN sys.dm_xe_sessions AS xe
ON (xe.address = xet.event_session_address)
WHERE xe.name = 'Acompanhamento 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') d(n)
LEFT JOIN master.sys.databases db
ON db.physical_database_name = d.n.value('(data[@name="database_name"]/value)[1]', 'varchar(200)'))
SELECT * FROM b
E caso precise, é só persistir isso em uma tabela para acompanhamento.
Dúvidas? Só mandar ai!
Links utilizados: