Pemulihan database dipercepat

Berlaku untuk: SQL Server 2019 (15.x) dan versi yang lebih baru Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

Pemulihan database yang dipercepat (ADR) meningkatkan ketersediaan database, terutama di hadapan transaksi yang berjalan lama, dengan mendesain ulang proses pemulihan mesin database SQL.

ADR diperkenalkan di SQL Server 2019 (15.x) dan ditingkatkan di SQL Server 2022 (16.x). ADR juga tersedia untuk database di Azure SQL Database, Azure SQL Managed Instance, dan Azure Synapse SQL. ADR diaktifkan secara default di SQL Database dan SQL Managed Instance dan tidak dapat dinonaktifkan. Untuk informasi selengkapnya tentang ADR di Azure SQL, lihat Pemulihan Database Yang Dipercepat di Azure SQL.

Artikel ini memberikan gambaran umum tentang fitur ADR. Untuk bekerja dengan ADR, tinjau Mengelola pemulihan database yang dipercepat.

Gambaran Umum

Keuntungan utama ADR adalah:

  • Pemulihan database yang cepat dan konsisten

    Dengan ADR, transaksi jangka panjang tidak memengaruhi waktu pemulihan keseluruhan, memungkinkan pemulihan database yang cepat dan konsisten terlepas dari jumlah transaksi aktif dalam sistem atau ukurannya.

  • Pemutaran kembali transaksi seketika

    Dengan ADR, pemutaran kembali transaksi dilakukan secara instan, terlepas dari durasi waktu aktif transaksi atau jumlah pembaruan yang telah dilakukan.

  • Pemotongan log agresif

    Dengan ADR, log transaksi secara agresif terpotong, bahkan di hadapan transaksi aktif yang berjalan lama, yang mencegahnya tumbuh di luar kendali.

Proses pemulihan database saat ini

Tanpa ADR, pemulihan database di SQL Server mengikuti model pemulihan ARIES dan terdiri dari tiga fase, yang diilustrasikan dalam diagram berikut dan dijelaskan secara lebih rinci mengikuti diagram.

Diagram of current recovery process.

  • Fase Analisis

    SQL Server melakukan pemindaian maju log transaksi dari awal titik pemeriksaan terakhir yang berhasil (atau LSN halaman kotor terlama) hingga akhir, untuk menentukan status setiap transaksi pada saat SQL Server berhenti.

  • Fase Pengulangan

    SQL Server melakukan pemindaian maju log transaksi dari transaksi terlama yang tidak dilakukan hingga akhir, untuk membawa database ke statusnya pada saat crash dengan mengulangi semua operasi yang dilakukan.

  • Fase Pembatalan

    Untuk setiap transaksi yang aktif pada saat crash, SQL Server melintasi log mundur, membatalkan operasi yang dilakukan transaksi ini.

Berdasarkan desain ini, waktu yang dibutuhkan mesin database untuk pulih dari hidupkan ulang yang tidak terduga adalah (kira-kira) sebanding dengan ukuran transaksi aktif terpanjang dalam sistem pada saat crash. Pemulihan membutuhkan pemutaran kembali semua transaksi yang tidak lengkap. Lamanya waktu yang dibutuhkan sebanding dengan pekerjaan yang telah dilakukan transaksi dan durasi waktu aktifnya. Oleh karena itu, proses pemulihan SQL Server dapat memakan waktu lama dengan adanya transaksi yang berjalan lama (seperti operasi penyisipan massal besar atau operasi build indeks terhadap tabel besar).

Selain itu, membatalkan, atau menggulung balik, transaksi besar berdasarkan desain ini juga dapat memakan waktu lama, karena menggunakan fase pemulihan urungkan yang sama seperti yang dijelaskan sebelumnya.

Selain itu, mesin database tidak dapat memotong log transaksi ketika ada transaksi yang berjalan lama karena catatan log yang sesuai diperlukan untuk proses pemulihan dan pembatalan. Akibatnya, beberapa log transaksi tumbuh sangat besar dan mengonsumsi ruang drive dalam jumlah besar.

Proses pemulihan database yang dipercepat

ADR mengatasi masalah sebelumnya dengan sepenuhnya mendesain ulang proses pemulihan mesin database untuk:

  • Membuat waktu konstan/instan dengan menghindari keharusan untuk memindai log dari/ke awal transaksi terlama yang aktif. Dengan ADR, log transaksi hanya diproses dari titik pemeriksaan terakhir yang berhasil (atau nomor urutan log halaman kotor terlama (LSN)). Akibatnya, waktu pemulihan tidak terpengaruh oleh transaksi yang berjalan lama.
  • Minimalkan ruang log transaksi yang diperlukan karena tidak ada lagi kebutuhan untuk memproses log untuk seluruh transaksi. Akibatnya, log transaksi dapat dipotong secara agresif saat titik pemeriksaan dan pencadangan terjadi.

Pada tingkat tinggi, ADR mencapai pemulihan database yang cepat dengan membuat versi semua modifikasi database fisik dan hanya membatalkan operasi logis, yang terbatas dan dapat dibatalkan hampir seketika. Setiap transaksi yang aktif pada saat crash ditandai sebagai dibatalkan dan, oleh karena itu, versi apa pun yang dihasilkan oleh transaksi ini dapat diabaikan oleh kueri pengguna bersamaan.

Proses pemulihan ADR memiliki tiga fase yang sama dengan proses pemulihan saat ini. Bagaimana fase ini beroperasi dengan ADR diilustrasikan dalam diagram berikut.

Diagram of ADR recovery process.

  • Fase Analisis

    Prosesnya tetap sama seperti saat ini dengan penambahan rekonstruksi SLOG (aliran log sistem) dan menyalin catatan log untuk operasi nonversi.

  • Fase Pengulangan

    Dipecah menjadi dua subfase

    • Subfase 1

      Fase pengulangan tindakan dari SLOG (transaksi terlama yang belum dilakukan hingga titik pemeriksaan terakhir). Fase pengulangan adalah operasi cepat karena hanya perlu memproses beberapa rekaman dari SLOG.

    • Sub fase 2

      Ulangi dari log transaksi dimulai dari titik pemeriksaan terakhir (bukan transaksi terlama yang tidak dilakukan).

  • Fase Pembatalan

    Fase urungkan dengan ADR selesai hampir seketika dengan menggunakan SLOG untuk membatalkan operasi nonversi dan penyimpanan versi yang dipertahankan (PVS) dengan kembali logis untuk melakukan pembatalan berbasis versi tingkat baris.

Anda juga dapat menonton video delapan menit ini yang menjelaskan Pemulihan Database Dipercepat:

Komponen pemulihan ADR

Empat komponen utama ADR adalah:

  • Penyimpanan versi persisten (PVS)

    Penyimpanan versi yang dipertahankan adalah mekanisme mesin database untuk mempertahankan versi baris yang dihasilkan dalam database itu sendiri alih-alih penyimpanan versi tradisional tempdb . PVS memungkinkan isolasi sumber daya dan meningkatkan ketersediaan sekunder yang dapat dibaca. Ada satu utas PVS per instans di SQL Server 2019 (15.x). Dimulai dengan SQL Server 2022 (16.x), SQL Server memiliki satu utas pembersih PVS per database.

  • Kembali logis

    Pengembalian logis adalah proses asinkron yang bertanggung jawab untuk melakukan pembatalan berbasis versi tingkat baris - menyediakan pembatalan transaksi instan dan membatalkan untuk semua operasi versi.

    • Melacak semua transaksi yang dibatalkan
    • Melakukan putar kembali menggunakan PVS untuk semua transaksi pengguna
    • Melepaskan semua kunci segera setelah transaksi dibatalkan
  • SLOG

    SLOG adalah aliran log dalam memori sekunder yang menyimpan rekaman log untuk operasi nonversi (seperti invalidasi cache metadata, akuisisi kunci, dan sebagainya). SLOG adalah:

    • Bervolume rendah dan di dalam memori
    • Bertahan di disk dengan diserialisasikan selama proses titik pemeriksaan
    • Dipotong secara berkala saat transaksi dilakukan
    • Mempercepat pengulangan dan pengurungan dengan hanya memproses operasi nonversi
    • Memungkinkan pemotongan log transaksi yang agresif dengan hanya mempertahankan catatan log yang diperlukan
  • Pembersih

    Pembersih adalah proses asinkron yang bangun secara berkala dan membersihkan versi baris usang dari PVS.

Peningkatan ADR di SQL Server 2022 (16.x)

Ada beberapa peningkatan untuk mengatasi penyimpanan penyimpanan versi persisten (PVS) dan meningkatkan skalabilitas keseluruhan. Untuk informasi selengkapnya tentang fitur baru SQL Server 2022 (16.x), lihat Apa yang baru di SQL Server 2022 (16.x).

  • Pembersihan transaksi pengguna

    Hapus halaman yang tidak dapat dibersihkan oleh proses reguler karena kegagalan penguncian.

    Fitur ini memungkinkan transaksi pengguna untuk menjalankan pembersihan pada halaman yang tidak dapat diatasi oleh proses pembersihan reguler karena konflik kunci tingkat tabel. Peningkatan ini membantu memastikan bahwa proses pembersihan ADR tidak gagal tanpa batas waktu karena beban kerja pengguna tidak dapat memperoleh kunci tingkat tabel.

  • Mengurangi jejak memori untuk pelacak halaman PVS

    Peningkatan ini melacak halaman penyimpanan versi (PVS) yang dipertahankan pada tingkat ekstensi, untuk mengurangi jejak memori yang diperlukan untuk mempertahankan halaman versi.

  • Peningkatan Pembersih Pemulihan Data Dipercepat (ADR)

    Pembersih Accelerated Data Recovery (ADR) telah meningkatkan efisiensi pembersihan versi untuk meningkatkan cara SQL Server melacak dan merekam versi halaman yang dibatalkan yang mengarah pada peningkatan memori dan kapasitas.

  • Penyimpanan versi persisten tingkat transaksi (PVS)

    Peningkatan ini memungkinkan ADR untuk membersihkan versi milik transaksi yang dilakukan terlepas dari apakah ada transaksi yang dibatalkan dalam sistem. Dengan peningkatan ini halaman penyimpanan versi terus-menerus (PVS) dapat dibatalkan alokasinya, bahkan jika pembersihan tidak dapat menyelesaikan pembersihan yang berhasil untuk memangkas peta transaksi yang dibatalkan.

    Hasil dari peningkatan ini adalah berkurangnya pertumbuhan penyimpanan versi persisten (PVS) bahkan jika pembersihan ADR lambat atau gagal.

  • Pembersihan versi multi-utas

    Di SQL Server 2019 (15.x), proses pembersihan adalah utas tunggal dalam instans SQL Server.

    Dimulai dengan SQL Server 2022 (16.x), proses ini menggunakan pembersihan versi multi-utas. Ini memungkinkan beberapa database dalam instans SQL Server yang sama dibersihkan secara paralel. Peningkatan ini sangat berharga ketika Anda memiliki beberapa database besar.

    Untuk menyesuaikan jumlah utas untuk skalabilitas pembersihan versi, atur ADR Cleaner Thread Count dengan sp_configure. Jumlah utas dibatasi pada jumlah inti untuk instans.

    Sebagai praktik terbaik, sebaiknya gunakan jumlah utas pembersih ADR yang sama dengan jumlah database Anda. Misalnya, jika Anda mengonfigurasi ADR Cleaner Thread Count untuk berada 4 di instans SQL Server dengan dua database, pembersih ADR masih hanya akan mengalokasikan satu utas per database, membiarkan dua utas yang tersisa menganggur.

    Contoh di bawah ini mengubah jumlah utas menjadi 4:

    EXEC sp_configure 'ADR Cleaner Thread Count', '4';
    RECONFIGURE WITH OVERRIDE; 
    
  • Kejadian baru yang diperluas

    Peristiwa baru yang diperluas, tx_mtvc2_sweep_stats, telah ditambahkan untuk telemetri pada pembersih versi multi-utas ADR PVS.

Praktik dan panduan terbaik

Untuk panduan tentang beban kerja yang dan tidak direkomendasikan untuk ADR, lihat Mengelola pemulihan database yang dipercepat.

Penting

Di Azure SQL Database, transaksi diam (transaksi yang belum ditulis ke log transaksi selama enam jam) secara otomatis dihentikan, untuk membebaskan sumber daya.