Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

T-SQL Selasa #67 :Pencadangan dan Pemulihan Baru Acara yang Diperpanjang

Untuk T-SQL Selasa bulan lalu, saya menulis tentang beberapa tanda jejak tidak berdokumen yang membantu Anda menjaga operasi pencadangan dan pemulihan yang berjalan lama. Bulan ini, topik Jes Borland adalah Acara yang Diperpanjang, dan saya pikir saya akan menunjukkan kemampuan baru di SQL Server 2016 yang sebagian besar membuat tanda pelacakan ini menjadi usang.

Jika Anda bermain dengan CTP2 (Anda dapat mengunduhnya di sini), Anda mungkin melihat kategori baru backup_restore dan acara baru backup_restore_progress_trace :

Menemukan acara baru dalam dialog Sesi Baru CTP2

Berikut adalah sesi XE cepat dan kotor untuk menangkap data untuk acara ini (Saya telah menambahkan komentar untuk memfilter hanya untuk mencadangkan atau hanya memulihkan operasi; secara default, keduanya disertakan):

CREATE EVENT SESSION [Backup progress] ON SERVER 
ADD EVENT sqlserver.backup_restore_progress_trace
(
    ACTION(package0.event_sequence)
 
    -- to only capture backup operations:
    --WHERE [operation_type] = 0
 
    -- to only capture restore operations:
    --WHERE [operation_type] = 1 
)
ADD TARGET package0.event_file 
(
  SET filename = N'C:\temp\BackupProgress.xel'
); -- default options are probably ok
GO
 
ALTER EVENT SESSION [Backup progress] ON SERVER STATE = START;
GO

Sekarang, katakanlah saya menjalankan operasi berikut – buat database, masukkan kembali sedikit data, lepaskan, dan pulihkan:

USE [master];
GO
CREATE DATABASE floob;
GO
SELECT s1.* INTO floob.dbo.what 
  FROM sys.all_objects AS s1 
  CROSS JOIN sys.all_objects;
GO
BACKUP DATABASE floob TO DISK = 'c:\temp\floob.bak' 
  WITH INIT, COMPRESSION, STATS = 30;
GO
DROP DATABASE floob;
GO
RESTORE DATABASE floob FROM DISK = 'c:\temp\floob.bak' 
  WITH REPLACE, RECOVERY;

Sekarang, kita dapat meminta data dari file target acara:

;WITH x AS 
(
  SELECT ts,op,db,msg,es
  FROM 
  (
   SELECT 
    ts  = x.value(N'(event/@timestamp)[1]', N'datetime2'),
    op  = x.value(N'(event/data[@name="operation_type"]/text)[1]', N'nvarchar(32)'),
    db  = x.value(N'(event/data[@name="database_name"])[1]', N'nvarchar(128)'),
    msg = x.value(N'(event/data[@name="trace_message"])[1]', N'nvarchar(max)'),
    es  = x.value(N'(event/action[@name="event_sequence"])[1]', N'int')
   FROM 
   (
    SELECT x = CONVERT(XML, event_data) 
     FROM sys.fn_xe_file_target_read_file
          (N'c:\temp\Backup--Progress*.xel', NULL, NULL, NULL)
   ) AS y
  ) AS x 
  WHERE op = N'Backup' -- N'Restore'
  AND db = N'floob'
  AND ts > CONVERT(DATE, SYSUTCDATETIME())
)
SELECT /* x.db, x.op, x.ts, */ 
  [Message] = x.msg, 
  Duration = COALESCE(DATEDIFF(MILLISECOND, x.ts, 
             LEAD(x.ts, 1) OVER(ORDER BY es)),0)
FROM x
ORDER BY es;

Untuk pencadangan, bendera pelacakan 3226 tidak menekan keluaran apa pun yang ditangkap oleh Peristiwa yang Diperpanjang. Saya telah meninggalkan kolom keluaran, karena filter, untuk singkatnya:

Pesan Durasi
(Milidetik)
BACKUP DATABASE dimulai 0
Membuka database dengan kunci S 0
Mendapatkan kunci operasi massal pada database 0
Sinkronisasi dengan operasi lain pada database selesai 19
Membuka kumpulan media cadangan 7
Kumpulan media cadangan terbuka 0
Menyiapkan media set untuk menulis 0
Kumpulan media siap untuk dicadangkan 0
Opsi efektif:Checksum=0, Compression=1, Encryption=0, BufferCount=7, MaxTransferSize=1024 KB 0
Menghapus bitmap diferensial 4
Bitmap diferensial dihapus 0
Menulis pos pemeriksaan 6
Pos pemeriksaan selesai (berlalu =6 md) 0
Mulai LSN:101:111920:43, SERepl LSN:0:0:0 0
Memindai bitmap alokasi 4
Pemindaian bitmap alokasi selesai 0
Menghitung ukuran yang diharapkan dari total data 0
FID=1, ExpectedExtents=10047, IsDifferentialMapAccurate=0 0
TotalSize=658440192 byte 0
Perkiraan ukuran total =658460672 byte (ukuran data =658440192 byte, ukuran log =20480 byte) 0
Estimasi pekerjaan selesai 0
LSN Terakhir:101:111960:1 0
Menulis metadata terkemuka 0
BackupStream(0):Menulis metadata utama ke perangkat c:\temp\floob.bak 1
Menghitung ukuran yang diharapkan dari total data 0
FID=1, ExpectedExtents=10047, IsDifferentialMapAccurate=0 0
TotalSize=658440192 byte 1
Menyalin file data 2
Jumlah pembaca file data =1 0
Membaca file data D:\SQL Server\MSSQL13.SQL16\DATA\floob.mdf 0
BackupStream(0):Menulis MSDA ukuran 10048 luasan 391
30 persen (198180864/658460672 byte) diproses 554
60 persen (395313152/658460672 byte) diproses 576
90 persen (593494016/658460672 byte) diproses 184
Selesai membaca file data D:\SQL Server\MSSQL13.SQL16\DATA\floob.mdf 2
BackupStream(0):Mengisi MSDA dengan 65536 byte 0
BackupStream(0):Total ukuran MSDA =10048 luasan 0
InitialExpectedSize=658440192 byte, FinalSize=658440192 byte, ExcessMode=0 0
LSN Terakhir:101:111960:1 0
Penyalinan file data selesai 0
Menyalin log transaksi 0
MediaFamily(0):FID=2, VLFID=101, DataStreamSize=65536 byte 4
Penyalinan log transaksi selesai 0
Menulis metadata tambahan 0
BackupStream(0):Menulis metadata tambahan ke perangkat c:\temp\floob.bak 0
Menulis akhir set cadangan 30
Menulis catatan sejarah 12
Penulisan catatan riwayat selesai (berlalu =11 md) 0
BACKUP DATABASE selesai 0

Data peristiwa untuk operasi pencadangan

Untuk pemulihan, Anda akan melihat baris berikut:

Pesan Durasi
(Milidetik)
KEMBALIKAN DATABASE dimulai 0
Membuka kumpulan cadangan 3
Memproses metadata terkemuka 0
Perencanaan dimulai 23
Opsi efektif:Checksum=0, Compression=1, Encryption=0, BufferCount=6, MaxTransferSize=1024 KB 0
Perencanaan selesai 0
Memulai pemulihan OFFLINE 0
Database terlampir sebagai DB_ID=5 1
Menyiapkan wadah 534
Kontainer sudah siap 1097
Memulihkan kumpulan cadangan 0
Perkiraan ukuran total yang akan ditransfer =658460672 byte 0
Mentransfer data 1
BackupStream(0):Memproses MSDA berukuran 10048 perluasan 3282
BackupStream(0):MSDA Selesai 0
Menunggu log zeroing selesai 3
Log zeroing selesai 0
BackupStream(0):Memproses MSTL (FID=2, VLFID=101, size=65536 byte) 1024
Transfer data selesai 14
Set cadangan dipulihkan 45
Perputaran offline dimulai 1
Memproses 68 header VLF 69
Pemrosesan header VLF selesai 11
LSN Pertama:101:111920:43, LSN Terakhir:101:111960:1 0
Hentikan LSN:101:111960:1 4
Perputaran offline selesai 17
Perbaikan database selesai 2
Transisi database ke ONLINE 2
Memulai ulang basis data untuk ONLINE 87
PostRestoreContainerFixups dimulai 5
PostRestoreContainerFixups selesai 2
PostRestoreReplicationFixup dimulai 107
PostRestoreReplicationFixup selesai 2
Database dimulai ulang 9
Melanjutkan perayapan Teks Lengkap yang dihentikan 6
Menulis catatan sejarah 13
Penulisan catatan riwayat selesai (berlalu =13 md) 2
Pemeliharaan MSDB selesai 2
KEMBALIKAN DATABASE selesai 0

Data peristiwa untuk operasi pemulihan

Jika Anda memecahkan masalah operasi pencadangan atau pemulihan yang lambat, Anda dapat dengan mudah memfilter durasinya, sehingga Anda hanya melihat peristiwa yang memerlukan waktu lebih dari n milidetik, misalnya. Satu-satunya hal yang tidak saya lihat dalam keluaran ini adalah cara untuk mengetahui apakah inisialisasi file instan berlaku selama pemulihan – Anda mungkin masih memerlukan tanda pelacakan 3004, seperti yang dijelaskan dalam posting saya untuk T-SQL Selasa bulan lalu.

Jangan lupa untuk menghentikan sesi (tetapi jangan ragu untuk menyimpan definisi sesi di server, sehingga Anda dapat menggunakannya lagi):

ALTER EVENT SESSION [Backup progress] ON SERVER STATE = STOP;

Saya tidak melakukan tes kinerja atau analisis dampak, tetapi secara umum, saya akan mengatakan bahwa – seperti tanda pelacakan – ini bukan sesuatu yang Anda ingin jalankan sepanjang waktu, tetapi hanya ketika memecahkan masalah operasi tertentu. Sedikit lebih mudah untuk menyiapkan sesi ini dan menanyakan data, IMHO, daripada mengaktifkan tanda pelacakan dan mengurai semua output dari log kesalahan SQL Server.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Mengeksekusi SQL Mentah di SQLAlchemy

  2. Temukan Kebocoran Koneksi Database di Aplikasi Anda

  3. T-SQL Selasa #33 :Trick Shots :Skema Switch-A-Roo

  4. T-SQL Selasa #67 :Pencadangan dan Pemulihan Baru Acara yang Diperpanjang

  5. Pemrograman Database Python dengan SQL Express untuk Pemula