Gunakan replika baca-saja untuk memindahkan beban kerja kueri baca-saja

Berlaku untuk:Azure SQL DatabaseAzure SQL Managed Instance

Sebagai bagian dari arsitektur Ketersediaan Tinggi, setiap database tunggal atau database kumpulan elastis di tingkat layanan Premium dan Business Critical secara otomatis disediakan dengan replika baca-tulis utama dan satu atau beberapa replika baca-saja sekunder. Replika sekunder disediakan dengan ukuran komputasi yang sama dengan replika utama. Fitur read scale-out memungkinkan Anda untuk membongkar beban kerja baca-saja menggunakan kapasitas komputasi salah satu replika baca-saja, alih-alih menjalankannya pada replika baca-tulis. Dengan cara ini, beberapa beban kerja baca-saja dapat diisolasi dari beban kerja baca-tulis, dan tidak memengaruhi performanya. Fitur ini ditujukan untuk aplikasi yang menyertakan beban kerja baca-saja yang dipisahkan secara logis, seperti analitik. Dalam tingkat layanan Premium dan Bisnis Penting, aplikasi bisa mendapatkan keuntungan performa menggunakan kapasitas tambahan ini tanpa biaya tambahan.

Fitur read scale-out juga tersedia di tingkat layanan Hyperscale jika setidaknya satu replika sekunder ditambahkan. Replika bernama sekunder Hyperscale menyediakan penskalaan independen, isolasi akses, isolasi beban kerja, dukungan untuk berbagai skenario peluasan skala baca, dan manfaat lainnya. Beberapa replika ketersediaan tinggi sekunder dapat digunakan untuk beban kerja baca-saja penyeimbangan beban yang memerlukan lebih banyak sumber daya daripada yang tersedia pada satu replika ketersediaan tinggi sekunder.

Arsitektur Ketersediaan Tinggi tingkat layanan Dasar, Standar, serta Tujuan Umum tidak termasuk replika apa pun. Fitur peluasan skala baca tidak tersedia di tingkat layanan ini. Namun, saat menggunakan Azure SQL Database, replika geografis dapat menyediakan fungsionalitas serupa di tingkat layanan ini. Saat menggunakan Azure SQL Managed Instance dan grup failover, pendengar baca-saja grup failover dapat menyediakan fungsionalitas serupa.

Diagram berikut mengilustrasikan fitur untuk database Premium dan Bisnis Penting serta instans terkelola.

Diagram showing readonly replicas.

Fitur read scale-out diaktifkan secara default pada database Premium, Bisnis Penting, dan Hyperscale baru.

Catatan

Peluasan skala baca selalu diaktifkan di tingkat layanan Business Critical dari SQL Managed Instance, dan untuk database Hyperscale dengan setidaknya satu replika sekunder.

Jika string koneksi SQL Anda dikonfigurasi dengan ApplicationIntent=ReadOnly, aplikasi dialihkan ke replika baca-saja dari database tersebut atau instans terkelola. Untuk informasi tentang cara menggunakan ApplicationIntent properti, lihat Menentukan Maksud Aplikasi.

Hanya untuk Azure SQL Database, jika Anda ingin memastikan bahwa aplikasi tersambung ke replika utama terlepas dari ApplicationIntent pengaturan di string koneksi SQL, Anda harus secara eksplisit menonaktifkan peluasan skala baca saat membuat database atau saat mengubah konfigurasinya. Misalnya, jika Anda meningkatkan database dari tingkat Standar atau Tujuan Umum ke Premium atau Bisnis Penting dan ingin memastikan semua koneksi terus masuk ke replika utama, nonaktifkan read scale-out. Untuk detail tentang cara menonaktifkannya, lihat Mengaktifkan dan menonaktifkan read scale-out.

Catatan

Fitur Penyimpanan Kueri dan SQL Profiler tidak didukung pada replika baca-saja.

Konsistensi data

Perubahan data yang dibuat di replika utama disimpan di replika baca-saja secara sinkron atau asinkron tergantung jenis replika. Namun, untuk semua jenis replika, pembacaan dari replika baca-saja selalu bersifat asinkron terkait dengan replika utama. Dalam sesi yang terhubung ke replika baca-saja, pembacaan selalu konsisten secara transaksional. Karena latensi penyebaran data bervariasi, replika yang berbeda dapat mengembalikan data pada titik waktu yang sedikit berbeda yang relatif terhadap replika utama dan satu sama lain. Jika replika baca-saja menjadi tidak tersedia dan sesi terhubung kembali, replika mungkin terhubung ke replika yang berada pada titik waktu yang berbeda dari replika asli. Demikian juga, jika aplikasi mengubah data menggunakan sesi baca-tulis pada primer dan segera membacanya menggunakan sesi baca-saja pada replika baca-saja, ada kemungkinan bahwa perubahan terbaru tidak segera terlihat.

Latensi propagasi data umum antara replika utama dan replika baca-saja bervariasi dalam rentang dari puluhan milidetik hingga satu digit detik. Namun, tidak ada batas atas tetap pada latensi propagasi data. Kondisi seperti pemanfaatan sumber daya yang tinggi pada replika dapat meningkatkan latensi secara substansial. Aplikasi yang memerlukan konsistensi data yang terjamin di seluruh sesi, atau memerlukan data yang dikomit agar dapat segera dibaca harus menggunakan replika utama.

Catatan

Latensi penyebaran data mencakup waktu yang diperlukan untuk mengirim dan mempertahankan (jika berlaku) catatan log ke replika sekunder. Ini juga mencakup waktu yang diperlukan untuk mengulangi (menerapkan) rekaman log ini ke halaman data. Untuk memastikan konsistensi data, perubahan tidak terlihat sampai catatan log penerapan transaksi diterapkan. Ketika beban kerja menggunakan transaksi yang lebih besar, latensi penyebaran data yang efektif akan ditingkatkan.

Untuk memantau latensi penyebaran data, lihat Memantau dan memecahkan masalah replika baca-saja.

Menyambungkan ke replika baca-saja

Ketika Anda mengaktifkan read scale-out untuk database, opsi ApplicationIntent dalam string koneksi yang disediakan oleh klien menentukan apakah koneksi dirutekan ke replika tulis atau ke replika baca-saja. Secara khusus, jika ApplicationIntent nilainya adalah ReadWrite (nilai default), koneksi diarahkan ke replika baca-tulis. Ini identik dengan perilaku ketika ApplicationIntent tidak disertakan dalam string koneksi. Jika nilai ApplicationIntent adalah ReadOnly, koneksi dirutekan ke replika baca-saja.

Misalnya, string koneksi berikut menyambungkan klien ke replika baca-saja (mengganti item dalam kurung sudut dengan nilai yang benar untuk lingkungan Anda dan menghilangkan kurung sudut):

Server=tcp:<server>.database.windows.net;Database=<mydatabase>;ApplicationIntent=ReadOnly;User ID=<myLogin>;Password=<myPassword>;Trusted_Connection=False; Encrypt=True;

Untuk menyambungkan ke replika baca-saja menggunakan SQL Server Management Studio (SSMS), pilih Opsi

Screenshot showing the SSMS Options button.

Pilih Parameter Koneksi ion tambahan lalu masukkan ApplicationIntent=ReadOnly lalu pilih Koneksi

Screenshot showing SSMS Additional Connection Parameters.

Salah satu string koneksi berikut menyambungkan klien ke replika baca-tulis (mengganti item dalam kurung sudut dengan nilai yang benar untuk lingkungan Anda dan menghilangkan kurung sudut):

Server=tcp:<server>.database.windows.net;Database=<mydatabase>;ApplicationIntent=ReadWrite;User ID=<myLogin>;Password=<myPassword>;Trusted_Connection=False; Encrypt=True;

Server=tcp:<server>.database.windows.net;Database=<mydatabase>;User ID=<myLogin>;Password=<myPassword>;Trusted_Connection=False; Encrypt=True;

Memverifikasi koneksi adalah ke replika baca-saja

Anda bisa memverifikasi apakah Anda tersambung ke replika baca-saja dengan menjalankan kueri berikut dalam konteks database Anda. Ini mengembalikan READ_ONLY saat Anda tersambung ke replika baca-saja.

SELECT DATABASEPROPERTYEX(DB_NAME(), 'Updateability');

Catatan

Dalam tingkat layanan Premium dan Bisnis Penting, hanya salah satu replika baca-saja yang dapat diakses pada waktu tertentu. Hyperscale mendukung beberapa replika baca-saja.

Memantau dan memecahkan masalah replika baca-saja

Saat tersambung ke replika baca-saja, Tampilan Manajemen Dinamis (DMV) mencerminkan kondisi replika, dan dapat dikueri untuk tujuan pemantauan dan pemecahan masalah. Mesin database menyediakan beberapa tampilan untuk mengekspos berbagai data pemantauan.

Tampilan berikut biasanya digunakan untuk pemantauan replika dan pemecahan masalah:

Nama Tujuan
sys.dm_db_sumberdaya_stats Menyediakan metrik pemanfaatan sumber daya selama satu jam terakhir, termasuk CPU, IO data, dan pemanfaatan penulisan log relatif terhadap batas tujuan layanan.
sys.dm_os_wait_stats Menyediakan statistik tunggu agregat untuk instans mesin database.
sys.dm_database_replica_states Menyediakan status kesehatan replika dan statistik sinkronisasi. Ukuran antrean ulang dan kecepatan pengulangan berfungsi sebagai indikator latensi propagasi data pada replika baca-saja.
sys.dm_os_performance_counters Menyediakan penghitung kinerja mesin database.
sys.dm_exec_query_stats Menyediakan statistik eksekusi per kueri seperti jumlah eksekusi, waktu penggunaan CPU, dll.
sys.dm_exec_query_plan() Menyediakan rencana kueri cache.
sys.dm_exec_sql_text() Menyediakan teks kueri untuk rencana kueri cache.
sys.dm_exec_query_profiles Menyediakan kemajuan kueri secara real time saat kueri sedang dalam eksekusi.
sys.dm_exec_query_plan_stats() Menyediakan rencana eksekusi aktual terakhir yang diketahui termasuk statistik runtime untuk kueri.
sys.dm_io_virtual_file_stats() Menyediakan statistik penyimpanan IOPS, throughput, dan latensi untuk semua file database.

Catatan

sys.resource_stats DMV dan sys.elastic_pool_resource_stats dalam database logis master mengembalikan data pemanfaatan sumber daya dari replika utama.

Memantau replika baca-saja dengan Kejadian yang Diperluas

Sesi peristiwa yang diperluas tidak dapat dibuat saat tersambung ke replika baca-saja. Namun, dalam Azure SQL Database, definisi sesi Kejadian yang Diperluas yang dicakup database dibuat dan diubah pada replika utama yang direplikasi menjadi replika baca-saja, termasuk geo-replikasi, dan peristiwa pengambilan pada replika baca-saja.

Sesi peristiwa yang diperluas pada replika baca-saja yang didasarkan pada definisi sesi dari replika utama dapat dimulai dan dihentikan secara independen dari sesi pada replika utama.

Untuk menghilangkan sesi peristiwa pada replika baca-saja, ikuti langkah-langkah berikut:

  1. Koneksi SSMS Object Explorer atau jendela kueri ke replika baca-saja.
  2. Hentikan sesi pada replika baca-saja, baik dengan memilih Hentikan Sesi pada menu konteks sesi di Object Explorer, atau dengan menjalankan ALTER EVENT SESSION [session-name-here] ON DATABASE STATE = STOP; di jendela kueri.
  3. Koneksi Object Explorer atau jendela kueri ke replika utama.
  4. Letakkan sesi pada replika utama, baik dengan memilih Hapus pada menu konteks sesi, atau dengan menjalankan DROP EVENT SESSION [session-name-here] ON DATABASE;

Tingkat isolasi pada replika baca-saja

Transaksi pada replika baca-saja selalu menggunakan tingkat isolasi transaksi rekam jepret, terlepas dari tingkat isolasi transaksi sesi dan petunjuk kueri apa pun. Isolasi rekam jepret menggunakan penerapan versi baris untuk menghindari pemblokiran skenario di mana pembaca memblokir penulis.

Dalam kasus yang jarang terjadi, jika transaksi isolasi rekam jepret mengakses metadata objek yang telah dimodifikasi dalam transaksi bersamaan lainnya, ini mungkin akan menerima kesalahan 3961, "Transaksi isolasi rekam jepret gagal dalam database '%.*ls' karena objek yang diakses oleh pernyataan telah dimodifikasi oleh pernyataan DDL dalam transaksi bersamaan lainnya sejak dimulainya transaksi ini. Hal ini dilarang karena metadata tidak dibuat versi. Pembaruan bersamaan ke metadata dapat menyebabkan inkonsistensi jika dicampur dengan isolasi rekam jepret."

Kueri yang berjalan lama pada replika baca-saja

Kueri yang berjalan pada replika baca-saja perlu mengakses metadata untuk objek yang direferensikan dalam kueri (tabel, indeks, statistik, dll.) Dalam kasus yang jarang terjadi, jika metadata objek diubah pada replika utama sementara kueri menahan kunci di objek yang sama pada replika baca-saja, kueri dapat memblokir proses yang menerapkan perubahan dari replika utama ke replika baca-saja. Jika kueri seperti itu berjalan untuk waktu yang lama, itu akan menyebabkan replika baca-saja secara signifikan tidak sinkron dengan replika utama. Untuk replika yang merupakan target failover potensial (replika sekunder di tingkat layanan Premium dan Bisnis Penting, replika ketersediaan tinggi Hyperscale, dan semua geo-replika), ini juga akan menunda pemulihan database jika terjadi failover, menyebabkan waktu henti yang lebih lama dari yang diperkirakan.

Jika kueri yang berjalan lama pada replika baca-saja secara langsung atau tidak langsung menyebabkan pemblokiran semacam ini, kueri tersebut dapat dihentikan secara otomatis untuk menghindari latensi data yang berlebihan dan potensi dampak ketersediaan database. Sesi menerima kesalahan 1219, "Sesi Anda telah terputus karena operasi DDL prioritas tinggi", atau kesalahan 3947, "Transaksi dibatalkan karena komputasi sekunder gagal mengejar pengulangan. Coba lagi transaksinya."

Catatan

Jika Anda menerima kesalahan 3961, 1219, atau 3947 saat menjalankan kueri terhadap replika baca-saja, coba lagi kueri. Atau, hindari operasi yang mengubah metadata objek (perubahan skema, pemeliharaan indeks, pembaruan statistik, dll.) pada replika utama sementara kueri yang berjalan lama dijalankan pada replika sekunder.

Tip

Di tingkat layanan Premium dan Kritis Bisnis, saat terhubung ke replika baca-saja, kolom redo_queue_size dan redo_rate di sys.dm_database_replica_states DMV dapat digunakan untuk memantau proses sinkronisasi data, yang berfungsi sebagai indikator latensi propagasi data pada replika baca-saja.

Mengaktifkan dan menonaktifkan peluasan skala baca untuk SQL Database

Untuk SQL Managed Instance, peluasan skala baca secara otomatis diaktifkan pada tingkat layanan Business Critical, dan tidak tersedia di tingkat layanan Tujuan Umum. Menonaktifkan dan mengaktifkan kembali peluasan skala baca tidak dimungkinkan.

Untuk SQL Database, peluasan skala baca diaktifkan secara default pada tingkat layanan Premium, Business Critical, dan Hyperscale. Peluasan skala baca tidak dapat diaktifkan di tingkat layanan Dasar, Standar, atau Tujuan Umum. Read scale-out dinonaktifkan secara otomatis pada database Hyperscale yang dikonfigurasi tanpa replika sekunder.

Untuk database tunggal dan terkumpul di Azure SQL Database, Anda dapat menonaktifkan dan mengaktifkan kembali peluasan skala baca di tingkat layanan Premium atau Business Critical dengan menggunakan portal Azure, dan Azure PowerShell. Opsi ini tidak tersedia untuk SQL Managed Instance karena peluasan skala baca tidak dapat dinonaktifkan.

Catatan

Untuk database tunggal dan database kumpulan elastis, kemampuan untuk menonaktifkan read scale-out disediakan untuk kompatibilitas mundur. Read scale-out tidak dapat dinonaktifkan pada instans terkelola Bisnis Penting.

Portal Azure

Untuk Azure SQL Database, Anda dapat mengelola pengaturan peluasan skala baca pada panel Database komputasi + penyimpanan, tersedia di bawah Pengaturan. Menggunakan portal Azure untuk mengaktifkan atau menonaktifkan read scale-out tidak tersedia untuk Azure SQL Managed Instance.

PowerShell

Penting

Modul Azure Resource Manager PowerShell masih didukung, tetapi semua pengembangan masa mendatang adalah untuk modul Az.Sql. Modul Azure Resource Manager akan terus menerima perbaikan bug hingga setidaknya Desember 2020. Argumen untuk perintah dalam modul Az dan dalam modul Azure Resource Manager secara substansial identik. Untuk informasi selengkapnya tentang kompatibilitas keduanya, lihat Memperkenalkan modul Azure PowerShell Az baru.

Mengelola read scale-out di Azure PowerShell memerlukan rilis Azure PowerShell Desember 2016 atau yang lebih baru. Untuk rilis PowerShell terbaru, lihat Azure PowerShell.

Di Azure SQL Database, Anda dapat menonaktifkan atau mengaktifkan kembali peluasan skala baca di Azure PowerShell dengan memanggil cmdlet Set-AzSqlDatabase dan meneruskan nilai yang diinginkan (Enabled atau Disabled) untuk -ReadScale parameter . Menonaktifkan peluasan skala baca untuk SQL Managed Instance tidak tersedia.

Untuk menonaktifkan read scale-out pada database yang ada (mengganti item di kurung sudut dengan nilai yang benar untuk lingkungan Anda dan menghilangkan kurung sudut):

Set-AzSqlDatabase -ResourceGroupName <resourceGroupName> -ServerName <serverName> -DatabaseName <databaseName> -ReadScale Disabled

Untuk menonaktifkan read scale-out pada database baru (mengganti item di kurung sudut dengan nilai yang benar untuk lingkungan Anda dan menghilangkan kurung sudut):

New-AzSqlDatabase -ResourceGroupName <resourceGroupName> -ServerName <serverName> -DatabaseName <databaseName> -ReadScale Disabled -Edition Premium

Untuk mengaktifkan kembali read scale-out pada database yang ada (mengganti item di kurung sudut dengan nilai yang benar untuk lingkungan Anda dan menghilangkan kurung sudut):

Set-AzSqlDatabase -ResourceGroupName <resourceGroupName> -ServerName <serverName> -DatabaseName <databaseName> -ReadScale Enabled

REST API

Untuk membuat database dengan read scale-out dinonaktifkan, atau untuk mengubah pengaturan untuk database yang sudah ada, gunakan metode berikut dengan properti readScale yang diatur ke Enabled atau Disabled, seperti dalam sampel permintaan berikut.

Method: PUT
URL: https://management.azure.com/subscriptions/{SubscriptionId}/resourceGroups/{GroupName}/providers/Microsoft.Sql/servers/{ServerName}/databases/{DatabaseName}?api-version= 2014-04-01-preview
Body: {
   "properties": {
      "readScale":"Disabled"
   }
}

Untuk informasi selengkapnya, lihat Database - Buat atau perbarui.

tempdb Menggunakan database pada replika baca-saja

Database tempdb pada replika utama tidak direplikasi ke replika baca-saja. Setiap replika memiliki database tempdb sendiri yang dibuat ketika replika dibuat. Ini memastikan bahwa tempdb dapat diperbarui dan dapat dimodifikasi selama eksekusi kueri Anda. Jika beban kerja baca-saja bergantung pada penggunaan objek tempdb, Anda harus membuat objek ini sebagai bagian dari beban kerja yang sama, saat tersambung ke replika baca-saja.

Menggunakan peluasan skala baca dengan database yang direplikasi secara geografis

Database sekunder yang direplikasi geo memiliki arsitektur Ketersediaan Tinggi yang sama dengan database utama. Jika Anda menyambungkan ke database sekunder yang direplikasi secara geografis dengan read scale-out diaktifkan, sesi Anda dengan dirutekan ke salah satu replika ketersediaan tinggi dengan ApplicationIntent=ReadOnly cara yang sama seperti dirutekan pada database utama yang dapat ditulis. Sesi tanpa ApplicationIntent=ReadOnly dirutekan ke replika utama sekunder yang direplikasi secara geografis, yang juga bersifat baca-saja.

Dengan cara ini, membuat geo-replika dapat menyediakan beberapa replika baca-saja tambahan untuk database utama baca-tulis. Setiap geo-replika tambahan menyediakan satu set replika baca-saja. Geo-replika dapat dibuat di wilayah Azure mana pun, termasuk wilayah database utama.

Catatan

Tidak ada round-robin otomatis atau perutean yang seimbang lainnya antara replika database sekunder yang direplikasi geo, dengan pengecualian geo-replika Hyperscale dengan lebih dari satu replika ketersediaan tinggi. Dalam kasus ini, sesi dengan niat baca-saja didistribusikan ke semua replika ketersediaan tinggi dari geo-replika.

Dukungan fitur pada replika baca-saja

Daftar perilaku beberapa fitur pada replika baca-saja berikut:

  • Audit pada replika baca-saja diaktifkan secara otomatis. Untuk informasi selengkapnya tentang hierarki folder penyimpanan, konvensi penamaan, dan format log, lihat Format Log Audit Database SQL.
  • Wawasan Performa Kueri bergantung pada data dari Penyimpanan Kueri, yang saat ini tidak melacak aktivitas pada replika baca-saja. Wawasan Performa Kueri tidak memperlihatkan kueri yang dijalankan pada replika baca-saja.
  • Penyetelan otomatis bergantung pada Penyimpanan Kueri, seperti yang dirinci dalam Kertas penyetelan otomatis. Penyetelan otomatis hanya berfungsi untuk beban kerja yang berjalan pada replika utama.

Langkah berikutnya