Pemulihan Database yang Dipercepat di Azure SQL
Berlaku untuk: Azure SQL Database Azure SQL Managed Instance
Pemulihan Database Dipercepat (ADR) adalah fitur mesin database SQL Server yang sangat meningkatkan ketersediaan database, terutama dengan adanya transaksi jangka panjang, dengan mendesain ulang proses pemulihan mesin database SQL Server.
Saat ini ADR tersedia untuk Azure SQL Database, Azure SQL Managed Instance, database di Azure Synapse Analytics, dan SQL Server di komputer virtual Azure dimulai dengan SQL Server 2019. Untuk informasi tentang ADR di SQL Server, lihat Mengelola pemulihan database yang dipercepat.
Catatan
ADR diaktifkan secara default di Azure SQL Database dan Azure SQL Managed Instance. Menonaktifkan ADR di Azure SQL Database dan Azure SQL Managed Instance tidak didukung.
Gambaran Umum
Keuntungan utama ADR adalah:
Pemulihan database yang cepat dan konsisten
Dengan ADR, transaksi jangka panjang tidak memengaruhi waktu pemulihan secara 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 dipotong secara agresif, bahkan saat ada transaksi aktif yang berjalan lama, yang mencegahnya tumbuh di luar kendali.
Proses pemulihan database standar
Pemulihan database mengikuti model pemulihan ARIES dan terdiri dari tiga fase, yang diilustrasikan dalam diagram berikut dan dijelaskan secara lebih rinci setelah diagram.
Fase Analisis
Meneruskan pemindaian log transaksi dari awal titik pemeriksaan terakhir yang berhasil (atau LSN halaman kotor terlama) sampai akhir, untuk menentukan keadaan setiap transaksi pada saat database berhenti.
Fase Pengulangan
Meneruskan pemindaian log transaksi dari transaksi terlama yang tak diterapkan sampai akhir, untuk membawa database ke kondisi saat mengalami crash dengan melakukan fase pengulangan pada semua operasi yang telah dilakukan.
Fase Pembatalan
Untuk setiap transaksi yang aktif pada saat crash, melintasi log mundur ke awal, membatalkan operasi yang telah dilakukan transaksi ini.
Berdasarkan desain ini, waktu yang dibutuhkan mesin database SQL Server untuk pulih dari penghidupan ulang yang tidak terduga (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 dapat memakan waktu lama dengan adanya transaksi yang berjalan lama (seperti operasi besar penyisipan massal atau operasi pembangunan indeks terhadap tabel besar).
Selain itu, pembatalan/pemutaran kembali transaksi besar berdasarkan desain ini juga dapat memakan waktu lama karena menggunakan fase pemulihan Pembatalan yang sama seperti yang dijelaskan di atas.
Selain itu, mesin database SQL Server tidak dapat memotong log transaksi ketika ada transaksi yang berjalan lama karena catatan log yang sesuai diperlukan untuk proses pemulihan dan pembatalan. Sebagai hasil dari desain mesin database SQL Server ini, beberapa pelanggan seringkali menghadapi masalah ukuran log transaksi yang tumbuh sangat besar dan memakan sejumlah besar ruang drive.
Proses Pemulihan Database yang Diakselerasi
ADR mengatasi masalah di atas dengan sepenuhnya mendesain ulang proses pemulihan mesin database SQL Server 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 (LSN) halaman kotor terlama). Akibatnya, waktu pemulihan tidak terpengaruh oleh transaksi yang berjalan lama.
- Meminimalkan ruang log transaksi yang diperlukan karena tidak perlu lagi 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 secara bersamaan.
Proses pemulihan ADR memiliki tiga fase yang sama dengan proses pemulihan saat ini. Bagaimana fase ini beroperasi dengan ADR diilustrasikan dalam diagram berikut dan dijelaskan secara lebih rinci setelah diagram.
Fase Analisis
Prosesnya tetap sama seperti sebelumnya dengan penambahan rekonstruksi sLog dan menyalin catatan log untuk operasi yang tidak dibuat salinan versinya.
Fase Pengulangan
Dibagi menjadi dua fase (P)
Fase 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.
Fase 2
Fase Pengulangan dari Log Transaksi dimulai dari titik pemeriksaan terakhir (bukan transaksi terlama yang belum dilakukan)
Fase Pembatalan
Fase Pembatalan dengan ADR selesai hampir spontan dengan menggunakan SLOG untuk membatalkan operasi non-versi dan Pervisted Version Store (PVS) dengan Pengembalian Logis untuk melakukan Pembatalan berbasis versi tingkat baris.
Komponen pemulihan ADR
Empat komponen utama ADR adalah:
Penyimpanan versi persisten (PVS)
Penyimpanan versi persisten adalah mekanisme mesin database SQL Server baru untuk mempertahankan versi baris yang dihasilkan dalam database itu sendiri alih-alih penyimpanan versi
tempdb
tradisional. PVS memungkinkan isolasi sumber daya serta meningkatkan ketersediaan sekunder yang dapat dibaca.Pengembalian 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. Pengembalian logis dicapai dengan:
- Melacak semua transaksi yang dibatalkan dan lalu ditandai tidak terlihat oleh transaksi lain.
- Melakukan pemutaran kembali dengan menggunakan PVS untuk semua transaksi pengguna, daripada memindai log transaksi secara fisik dan membatalkan perubahan satu per satu.
- Membuka semua kunci segera setelah transaksi dibatalkan. Karena pembatalan hanya melibatkan penandaan perubahan dalam memori, prosesnya sangat efisien dan oleh karena itu kunci tidak harus ditahan untuk waktu yang lama.
SLOG
SLOG adalah aliran log dalam memori sekunder yang menyimpan catatan log untuk operasi non-versi (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 fase pengulangan dan pembatalan dengan hanya memproses operasi non-versi
- Memungkinkan pemotongan log transaksi yang agresif dengan hanya mempertahankan catatan log yang diperlukan
Pembersih
Pembersih adalah proses asinkron yang aktif secara berkala dan membersihkan versi halaman yang tidak diperlukan.
Pola Pemulihan Database (ADR) yang Dipercepat
Jenis beban kerja berikut paling diuntungkan dari ADR:
- ADR direkomendasikan untuk beban kerja dengan transaksi jangka panjang.
- Beban kerja yang telah melihat kasus di mana transaksi aktif menyebabkan log transaksi tumbuh secara signifikan.
- Beban kerja yang telah mengalami periode panjang ketidaktersediaan database karena pemulihan yang berjalan lama (seperti penghidupan ulang layanan yang tidak terduga atau pemutaran kembali transaksi secara manual).
Praktik terbaik untuk Pemulihan Database yang Dipercepat
Hindari transaksi jangka panjang dalam database. Meskipun salah satu tujuan ADR adalah untuk mempercepat pemulihan database karena transaksi aktif yang panjang, transaksi yang telah berjalan lama dapat menunda pembersihan versi dan meningkatkan ukuran PVS.
Hindari transaksi besar dengan perubahan definisi data atau operasi DDL. ADR menggunakan mekanisme SLOG (system log stream) untuk melacak operasi DDL yang digunakan dalam pemulihan. SLOG hanya digunakan saat transaksi aktif. SLOG diperiksa, sehingga menghindari transaksi besar yang menggunakan SLOG dapat membantu kinerja secara keseluruhan. Skenario ini dapat menyebabkan SLOG mengambil lebih banyak ruang:
Banyak DDLs dieksekusi dalam satu transaksi. Misalnya, dalam satu transaksi, dengan cepat membuat dan menjatuhkan tabel temp.
Tabel memiliki jumlah partisi/indeks yang sangat besar yang dimodifikasi. Misalnya, operasi DROP TABLE pada tabel tersebut akan memerlukan reservasi besar memori SLOG, yang akan menunda pemotongan log transaksi dan menunda operasi undo/redo. Solusinya dapat menurunkan indeks secara individual dan bertahap, lalu jatuhkan tabel. Untuk informasi selengkapnya tentang SLOG, lihat komponen pemulihan ADR.
Mencegah atau mengurangi situasi yang tidak perlu dibatalkan. Tingkat abort yang tinggi akan memberi tekanan pada kinerja PVS yang lebih bersih dan ADR yang lebih rendah. Aborts mungkin berasal dari tingkat kebuntuan yang tinggi, kunci duplikat, atau pelanggaran kendala lainnya.
DMV
sys.dm_tran_aborted_transactions
menunjukkan semua transaksi yang dibatalkan pada instans SQL Server. Kolomnested_abort
menunjukkan bahwa transaksi dilakukan tetapi ada bagian yang dibatalkan (titik simpan atau transaksi bersarang) yang dapat memblokir proses pembersihan PVS. Untuk informasi selengkapnya, lihat sys.dm_tran_aborted_transactions (Transact-SQL).Untuk mengaktifkan proses pembersihan PVS secara manual antara beban kerja atau selama jendela pemeliharaan, gunakan
sys.sp_persistent_version_cleanup
. Untuk informasi selengkapnya, lihat sys.sp_persistent_version_cleanup.
Jika Anda mengamati masalah baik dengan penggunaan penyimpanan, transaksi abort tinggi dan faktor lainnya, lihat Pemecahan Masalah Accelerated Database Recovery (ADR) pada SQL Server.