Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:Azure SQL Database
Azure SQL Managed Instance
Sebagai bagian dari arsitektur High Availability, setiap database individu atau database dalam kumpulan elastis di tingkat layanan Premium dan Business Critical secara otomatis dilengkapi 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 sekunder Hyperscale yang dinamai menyediakan penskalaan independen, isolasi akses, isolasi beban kerja, dukungan untuk berbagai skenario peluasan skala baca, dan manfaat lainnya. Beberapa replika ketersediaan tinggi (HA) sekunder dapat digunakan untuk menyeimbangkan beban kerja baca-saja yang memerlukan lebih banyak sumber daya daripada yang tersedia pada satu replika HA sekunder.
Arsitektur Ketersediaan Tinggi tingkat layanan Dasar, Standar, serta Tujuan Umum tidak termasuk replika apa pun. Fitur penskalaan baca tidak tersedia di tingkatan 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 untuk grup failover dapat menyediakan fungsionalitas serupa.
Diagram berikut mengilustrasikan fitur untuk database Premium, database Business Critical, dan instans terkelola SQL.
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.
Khusus untuk Azure SQL Database, jika Anda ingin memastikan bahwa aplikasi tersambung ke replika utama terlepas dari pengaturan ApplicationIntent di string koneksi SQL, Anda harus secara eksplisit mematikan fitur read scale-out saat membuat database atau 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 data 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 tidak dapat diakses dan sesi tersambung kembali, kemungkinan besar sesi tersebut terhubung ke replika yang berada pada titik waktu 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 Monitor dan pecahkan masalah replika baca-saja.
Menyambungkan ke replika baca-saja
Ketika Anda mengaktifkan penyeimbangan baca untuk database, opsi ApplicationIntent dalam string koneksi yang disediakan oleh klien menentukan apakah koneksi diarahkan 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 ini menghubungkan klien ke replika baca-saja (gantikan item dalam kurung sudut dengan nilai yang benar untuk lingkungan Anda, lalu hapus kurung sudut tersebut).
Server=tcp:<server>.database.windows.net;Database=<mydatabase>;ApplicationIntent=ReadOnly;User ID=<myLogin>;Password=<password>;Trusted_Connection=False; Encrypt=True;
Untuk menyambungkan ke replika baca-saja menggunakan SQL Server Management Studio (SSMS), pilih Opsi:
Pilih Parameter Koneksi Tambahan dan masukkan ApplicationIntent=ReadOnly, lalu pilih Sambungkan:
Salah satu string koneksi berikut menyambungkan klien ke replika yang dapat dibaca dan ditulis (mengganti item dalam tanda kurung sudut dengan nilai yang tepat sesuai dengan lingkungan Anda serta menghapus tanda kurung tersebut):
Server=tcp:<server>.database.windows.net;Database=<mydatabase>;ApplicationIntent=ReadWrite;User ID=<myLogin>;Password=<password>;Trusted_Connection=False; Encrypt=True;
Server=tcp:<server>.database.windows.net;Database=<mydatabase>;User ID=<myLogin>;Password=<password>;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 terhubung ke replika hanya-baca.
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 yang hanya dapat dibaca.
Memantau dan memecahkan masalah replika baca-saja
Anda memiliki berbagai cara untuk memantau replika baca-saja, termasuk: DMVs, peristiwa diperluas, dan pengamat database (pratinjau).
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_resource_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 eksekusi kueri yang di-cache. |
| sys.dm_exec_sql_text() | Menyediakan teks kueri untuk rencana kueri yang di-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
DMV sys.resource_stats dan sys.elastic_pool_resource_stats dalam database logis master mengembalikan data penggunaan sumber daya dari replika utama.
Memantau replika baca-saja dengan Extended Events
Sesi peristiwa yang diperluas tidak dapat dibuat saat tersambung ke replika baca-saja. Namun, di Azure SQL Database dan Azure SQL Managed Instance, definisi sesi Peristiwa Diperluas yang berada dalam cakupan database dibuat dan diubah pada replika utama direplikasi ke replika baca-saja, termasuk replika geo, dan menangkap peristiwa pada replika baca-saja.
Di Azure SQL Database, 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.
Di Azure SQL Managed Instance, untuk memulai pelacakan pada replika baca-saja, Anda harus terlebih dahulu memulai pelacakan pada replika utama sebelum dapat memulai pelacakan pada replika baca-saja. Jika Anda tidak memulai pelacakan terlebih dahulu pada replika utama, Anda akan menerima kesalahan berikut saat mencoba memulai pelacakan pada replika hanya-baca:
Msg 3906, Level 16, State 2, Line 1 Gagal memperbarui database "master" karena database bersifat baca-saja.
Setelah memulai pelacakan terlebih dahulu pada replika utama, kemudian pada replika baca-saja, Anda dapat menghentikan pelacakan pada replika utama.
Untuk menghapus sesi peristiwa pada replika baca-saja, ikuti langkah-langkah berikut:
- Sambungkan SSMS Object Explorer atau jendela kueri ke replika baca-saja.
- 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. - Sambungkan Object Explorer atau jendela kueri ke replika utama.
- 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 transaksi di 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 lain, transaksi isolasi rekam jepret mungkin menerima kesalahan 3961, transaksi isolasi rekam jepret gagal dalam database 'database-name' karena objek yang diakses oleh pernyataan telah dimodifikasi oleh pernyataan DDL dalam transaksi bersamaan lain sejak awal transaksi ini. Ini tidak diizinkan karena metadata tidak diberi 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 hanya-baca menjadi tidak sinkron secara signifikan dengan replika utama. Untuk replika yang berpotensi menjadi target failover (replika sekunder di tingkat layanan Premium dan Kritis Bisnis, replika HA Hyperscale, dan semua geo-replika), ini juga akan menghambat pemulihan basis data jika terjadi failover, mengakibatkan waktu henti lebih lama dari yang diharapkan.
Jika kueri yang berjalan lama pada replika baca-saja secara langsung atau tidak langsung menyebabkan pemblokiran semacam ini, kueri 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 transaksi.
Karena transaksi di replika baca-saja selalu menggunakan tingkat isolasi transaksi snapshot, kueri pada replika baca-saja yang berjalan lama dapat memblokir pembersihan penyimpanan versi hantu atau persisten (PVS) pada replika utama jika membaca baris yang baru dihapus atau versi baris yang lebih lama. Penundaan pembersihan hantu atau PVS dapat memengaruhi beban kerja pada replika utama. Untuk informasi selengkapnya tentang pemecahan masalah penundaan pembersihan PVS, lihat Memantau dan memecahkan masalah pemulihan database yang dipercepat.
Sebaliknya, jika kueri yang berjalan lama pada replika baca-saja membaca baris yang baru dihapus atau versi baris yang lebih lama, dan baris atau versi ini mungkin tidak lagi tersedia di replika utama (misalnya, karena operasi penskalaan), kueri dihentikan dengan kesalahan 3948, Transaksi dihentikan karena perubahan konfigurasi/status replika ketersediaan atau karena catatan sementara sedang dihapus di replika ketersediaan utama dan sekunder yang mungkin diperlukan oleh kueri yang berjalan di bawah isolasi rekam jepret. Coba ulangi transaksi.
Catatan
Jika Anda menerima kesalahan 3961, 1219, 3947, atau 3948 saat menjalankan kueri terhadap replika baca-saja, coba lagi kueri. Atau, hindari operasi yang memodifikasi metadata objek (perubahan skema, pemeliharaan indeks, pembaruan statistik, dll.) pada replika utama, atau penskalaan replika utama saat kueri yang berjalan lama dijalankan pada replika sekunder.
Petunjuk
Di tingkat layanan Premium dan Bisnis Kritis, ketika terhubung ke replika hanya-baca, kolom redo_queue_size dan redo_rate dalam sys.dm_database_replica_states, DMV dapat digunakan untuk memantau proses sinkronisasi data, yang berfungsi sebagai indikator latensi penyebaran data pada replika hanya-baca.
Mengaktifkan dan menonaktifkan peluasan skala baca untuk SQL Database
Untuk SQL Managed Instance, memperluas skala pembacaan diaktifkan secara otomatis pada lapisan layanan Business Critical, dan tidak tersedia di lapisan layanan General Purpose. 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 fitur read-scale out 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 Kritis Bisnis.
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 PowerShell Azure Resource Manager (AzureRM) tidak lagi menerima perbaikan bug. 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 peluasan skala baca di Azure PowerShell memerlukan rilis Azure PowerShell Desember 2016 atau versi 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 penskalaan baca ke luar pada database yang ada (gantilah item di dalam tanda kurung sudut dengan nilai yang sesuai untuk lingkungan Anda dan kemudian hapus tanda kurung tersebut):
Set-AzSqlDatabase -ResourceGroupName <resourceGroupName> -ServerName <serverName> -DatabaseName <databaseName> -ReadScale Disabled
Untuk menonaktifkan pembacaan skala keluar pada database baru (gantikan item di dalam tanda kurung sudut dengan nilai yang benar untuk lingkungan Anda dan hapus tanda kurung sudut tersebut):
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.
Gunakan database tempdb pada replika hanya baca
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 yang hanya membaca bergantung pada penggunaan objek tempdb, Anda harus membuat objek ini sebagai bagian dari beban kerja yang sama ketika terhubung ke replika yang hanya membaca.
Menggunakan peluasan skala baca dengan database yang direplikasi secara geografis
Database sekunder yang direplikasi secara geografis memiliki arsitektur Ketersediaan yang Tinggi yang sama dengan database utama. Jika Anda menyambungkan ke database sekunder yang direplikasi secara geografis dengan read scale-out diaktifkan, sesi Anda dengan ApplicationIntent=ReadOnly akan dirutekan ke salah satu replika ketersediaan tinggi, dengan cara yang sama seperti bagaimana sesi tersebut 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 diimbangkan bebannya antara replika dari database sekunder yang direplikasi geo, kecuali untuk geo-replica Hyperscale dengan lebih dari satu replika ketersediaan tinggi. Dalam kasus ini, sesi dengan tujuan untuk membaca saja didistribusikan ke semua replika geo dengan ketersediaan tinggi.
Dukungan fitur pada replika baca-saja
Daftar perilaku dari beberapa fitur pada replika baca-saja adalah sebagai berikut:
- Pengauditan pada replika hanya-baca dinyalakan secara otomatis. Untuk informasi selengkapnya tentang hierarki folder penyimpanan, konvensi penamaan, dan format log, lihat format log audit SQL Database.
- Wawasan Performa Kueri untuk Azure SQL Database bergantung pada data dari Penyimpanan Kueri, yang saat ini tidak melacak aktivitas pada replika baca-saja. Wawasan Performa Kueri tidak menampilkan 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.