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.
Aplikasi ke: SQL Server 2022 (16.x) dan versi yang lebih baru
Azure SQL Database
Azure SQL Managed Instance
Query Store pada replika sekunder yang dapat dibaca memungkinkan analisis Query Store untuk beban kerja yang dijalankan pada replika sekunder. Saat diaktifkan, replika sekunder mengalirkan informasi eksekusi kueri (seperti statistik runtime dan tunggu) ke replika utama, di mana data disimpan di Query Store dan dibuat terlihat di semua replika.
Nota
Penyimpanan kueri untuk replika sekunder yang dapat dibaca saat ini sedang dalam pratinjau di semua platform SQL Database Engine.
Availability
Query Store untuk replika sekunder yang dapat dibaca tersedia mulai SQL Server 2025 (17.x), serta Azure SQL Database dan Azure SQL Managed Instance dengan kebijakan pembaruan Selalu Mutakhir. Untuk SQL Server 2022 (16.x), Query Store untuk replika sekunder yang dapat dibaca memerlukan pengaktifan bendera pelacakan 12606 untuk menggunakan fitur tersebut. Untuk versi SQL Server dan Azure SQL Managed Instance yang lebih lama dengan kebijakan pembaruan lainnya, Query Store untuk replika sekunder yang dapat dibaca tidak tersedia.
Tabel berikut ini meringkas ketersediaan dan status Query Store yang diaktifkan untuk secondary yang dapat dibaca.
| Platform | Tersedia | Diaktifkan secara default |
|---|---|---|
| Azure SQL Database | Yes1 | Ya (selalu diaktifkan) |
| Database SQL di Microsoft Fabric | Yes | Ya (selalu diaktifkan) |
| Azure SQL Managed InstanceAUTD | Yes | Ya (selalu diaktifkan) |
| Azure SQL Managed Instance2025 | Tidak. | Tidak. |
| Azure SQL Managed Instance2022 | Tidak. | Tidak. |
| SQL Server 2025 (17.x) | Yes | Tidak (dapat diaktifkan, per database) |
| SQL Server 2022 (16.x) | Tidak ada2 | Tidak. |
1 Penyimpanan kueri untuk sekunder yang dapat dibaca saat ini tidak tersedia di tingkat layanan Hyperscale Azure SQL Database.
2 Query Store untuk sekunder yang dapat dibaca (readable secondaries) tetap dalam pratinjau untuk SQL Server 2022 (16.x), dan oleh karena itu, tidak didukung dalam produksi, dan dinonaktifkan secara bawaan. Untuk mengaktifkan Query Store untuk sekunder yang dapat dibaca pada SQL Server 2022 (16.x) saja, bendera pelacakan 12606 harus diaktifkan ke replika sekunder utama dan semua replika sekunder yang dapat dibaca. Tanda lacak 12606 tidak diperuntukkan untuk penerapan produksi yang didasarkan pada SQL Server 2022 (16.x). Untuk informasi selengkapnya, lihat catatan rilis SQL Server 2022.
Skenario ketersediaan tinggi yang didukung
Sebelum Anda menggunakan Query Store untuk replika sekunder yang dapat dibaca pada instans SQL Server 2025 (17.x), grup ketersediaan Always On harus dikonfigurasi.
Untuk Azure SQL Database, Query Store untuk replika sekunder yang dapat dibaca mendukung tingkat layanan berikut:
- Tujuan umum dengan replikasi geografis aktif atau konfigurasi grup failover (tidak ada replika ketersediaan tinggi bawaan; memerlukan replikasi geografis atau konfigurasi grup failover untuk dukungan sekunder)
- Premium (termasuk replika ketersediaan tinggi bawaan; replikasi geoaktif atau grup failover juga didukung)
- Bisnis kritis (termasuk replika ketersediaan tinggi bawaan; juga mendukung replikasi geografis aktif atau grup failover)
Untuk Azure SQL Managed Instance dengan kebijakan Always-up-to-date, Query Store untuk replika sekunder yang dapat dibaca mendukung tingkat layanan berikut:
- Tujuan umum dengan grup failover (tidak ada replika ketersediaan tinggi bawaan; memerlukan konfigurasi grup failover untuk dukungan sekunder)
- Bisnis krusial (termasuk replika bawaan dengan ketersediaan tinggi)
Mengaktifkan Query Store untuk replika sekunder yang dapat dibaca
Jika Query Store belum diaktifkan dan dalam mode READ_WRITE pada replika utama, Anda harus mengaktifkannya sebelum melanjutkan. Jalankan skrip berikut untuk setiap database yang diinginkan pada replika utama:
ALTER DATABASE [Database_Name]
SET QUERY_STORE = ON (OPERATION_MODE = READ_WRITE);
Untuk mengaktifkan Query Store pada semua replika sekunder yang dapat dibaca, sambungkan ke replika utama dan jalankan skrip berikut untuk setiap database yang akan terdaftar untuk menggunakan fitur tersebut.
ALTER DATABASE [Database_Name]
FOR SECONDARY
SET QUERY_STORE = ON
(OPERATION_MODE = READ_WRITE);
Nota
Sebelum SQL Server Management Studio (SSMS) versi 21, sintaks FOR SECONDARY valid tetapi tidak dikenali oleh IntelliSense. Untuk SQL Server 2022, SSMS IntelliSense tidak mengenali sintaks FOR SECONDARY sebagai valid, padahal sebenarnya sintaks tersebut valid.
Mengaktifkan koreksi rencana otomatis untuk replika sekunder
Aplikasi untuk: SQL Server 2022 (16.x) dan versi yang lebih baru, Azure SQL Database.
Setelah mengaktifkan Query Store untuk replika sekunder, Anda dapat secara opsional mengaktifkan penyetelan otomatis untuk memungkinkan fitur koreksi paket otomatis untuk memaksa rencana pada replika sekunder. Ini memungkinkan pengoptimal kueri untuk secara otomatis mengidentifikasi dan memperbaiki masalah performa kueri yang disebabkan oleh regresi rencana eksekusi pada replika sekunder.
Untuk mengaktifkan koreksi paket otomatis untuk replika sekunder, sambungkan ke replika utama dan jalankan skrip berikut untuk setiap database yang diinginkan:
ALTER DATABASE [Database_Name]
FOR SECONDARY
SET AUTOMATIC_TUNING (FORCE_LAST_GOOD_PLAN = ON);
Menonaktifkan Query Store untuk replika sekunder
Untuk menonaktifkan Query Store untuk fitur replika sekunder pada semua replika sekunder, sambungkan ke database master pada replika primary dan jalankan skrip berikut untuk setiap database yang diinginkan:
ALTER DATABASE [Database_Name]
FOR SECONDARY
SET QUERY_STORE = ON
(OPERATION_MODE = READ_ONLY);
Pastikan Query Store telah diaktifkan pada replika sekunder
Anda dapat memvalidasi bahwa Query Store diaktifkan pada replika secondary dengan menyambungkan ke database pada replika sekunder dan menjalankan pernyataan T-SQL berikut:
SELECT desired_state_desc,
actual_state_desc,
readonly_reason
FROM sys.database_query_store_options;
Hasil dari kueri pada tampilan katalog sys.database_query_store_options seharusnya menunjukkan bahwa status aktual Query Store adalah READ_CAPTURE_SECONDARY dengan nilai readonly_reason sebesar 8.
desired_state_desc |
actual_state_desc |
readonly_reason |
|---|---|---|
READ_CAPTURE_SECONDARY |
READ_CAPTURE_SECONDARY |
8 |
Komentar
Terminologi
Set replika didefinisikan sebagai replika baca/tulis database (utama) dan satu atau beberapa replika baca-saja (sekunder) yang diperlakukan sebagai unit logis. Peran dalam konteks ini mengacu pada peran replika tertentu. Ketika replika berfungsi dalam peran utama, replika baca/tulis adalah yang dapat melakukan modifikasi data dan aktivitas pembacaan. Ketika replika dikonfigurasi untuk hanya melakukan aktivitas baca-saja, replika tersebut berfungsi dalam peran sekunder (sekunder, geo sekunder, geo ha sekunder). Peran dapat berubah melalui peristiwa failover yang direncanakan atau tidak direncanakan, ketika ini terjadi, primer dapat menjadi sekunder atau sebaliknya.
Peran yang saat ini didukung adalah:
- Primary
- Secondary
- Geografi sekunder
- Geo HA sekunder
- Replika Teridentifikasi
Cara kerjanya
Data yang disimpan tentang kueri dapat dianalisis sebagai beban kerja berdasarkan peran. Query Store untuk replika sekunder terbaca memberi Anda kemampuan untuk memantau performa beban kerja unik baca saja yang mungkin dilakukan pada replika sekunder. Data diintegrasikan pada tingkat peran. Misalnya, konfigurasi grup ketersediaan terdistribusi SQL Server mungkin terdiri dari:
Satu replika utama, bagian dari Grup Ketersediaan 1 (AG1)
Dua replika sekunder lokal, juga bagian AG1
Satu replika utama jarak jauh di lokasi lain yang merupakan bagian dari grup ketersediaan terpisah (AG2). Dalam istilah SQL Server, istilah tersebut juga biasa disebut sebagai "global forwarder", namun fitur Query Store untuk replika sekunder yang dapat dibaca akan mengenali dan menyebutnya sebagai replika
Geo secondary, dengan asumsi bahwa replika tersebut didistribusikan secara geografis sebagai replika sekunder.
Jika AG1 dan AG2 dikonfigurasi untuk mengizinkan koneksi baca-saja saat beban kerja baca-saja dijalankan terhadap salah satu replika sekunder AG1, statistik eksekusi Query Store dikirim ke replika utama AG1 dan dikumpulkan dan disimpan sebagai data yang dihasilkan dari peran secondary sebelum data tersebut dikirim kembali ke semua replika sekunder termasuk penerus global di AG2. Ketika beban kerja terpisah dijalankan terhadap primer AG2, pengirim global, datanya dikirim kembali ke replika utama AG1 dan disimpan sebagai data yang dihasilkan dari peran Geo secondary.
Dari perspektif pengamatan, tampilan katalog sistem sys.query_store_runtime_stats diperluas untuk membantu mengidentifikasi peran asal statistik eksekusi. Ada hubungan antara tampilan ini dan tampilan katalog sistem sys.query_store_replicas , yang dapat memberikan nama peran yang lebih ramah. Di SQL Server, kolom replica_name adalah NULL. Meskipun begitu, kolom replica_name diisi dengan data untuk tingkat layanan Hyperscale jika ada replika bernama yang digunakan untuk beban kerja yang hanya dapat dibaca.
Contoh kueri T-SQL yang dapat digunakan untuk memberikan analisis keseluruhan dari 50 kueri teratas selama 8 jam terakhir, yang menggunakan sumber daya CPU dari semua replika adalah:
-- Top 50 queries by CPU across all replicas in the last 8 hours
DECLARE @hours AS INT = 8;
SELECT TOP 50 qsq.query_id,
qsp.plan_id,
CASE qrs.replica_group_id WHEN 1 THEN 'PRIMARY' WHEN 2 THEN 'SECONDARY' WHEN 3 THEN 'GEO SECONDARY' WHEN 4 THEN 'GEO HA SECONDARY' ELSE CONCAT('NAMED REPLICA_', qrs.replica_group_id) END AS replica_type,
qsq.query_hash,
qsp.query_plan_hash,
SUM(qrs.count_executions) AS sum_executions,
SUM(qrs.count_executions * qrs.avg_logical_io_reads) AS total_logical_reads,
SUM(qrs.count_executions * qrs.avg_cpu_time / 1000.0) AS total_cpu_ms,
AVG(qrs.avg_logical_io_reads) AS avg_logical_io_reads,
AVG(qrs.avg_cpu_time / 1000.0) AS avg_cpu_ms,
ROUND(TRY_CAST (SUM(qrs.avg_duration * qrs.count_executions) AS FLOAT) / NULLIF (SUM(qrs.count_executions), 0) * 0.001, 2) AS avg_duration_ms,
COUNT(DISTINCT qsp.plan_id) AS number_of_distinct_plans,
qsqt.query_sql_text
FROM sys.query_store_runtime_stats_interval AS qsrsi
INNER JOIN sys.query_store_runtime_stats AS qrs
ON qrs.runtime_stats_interval_id = qsrsi.runtime_stats_interval_id
INNER JOIN sys.query_store_plan AS qsp
ON qsp.plan_id = qrs.plan_id
INNER JOIN sys.query_store_query AS qsq
ON qsq.query_id = qsp.query_id
INNER JOIN sys.query_store_query_text AS qsqt
ON qsq.query_text_id = qsqt.query_text_id
WHERE qsrsi.start_time >= DATEADD(HOUR, -@hours, GETUTCDATE())
GROUP BY qsq.query_id, qsq.query_hash, qsp.query_plan_hash, qsp.plan_id, qrs.replica_group_id, qsqt.query_sql_text
ORDER BY SUM(qrs.count_executions * qrs.avg_cpu_time / 1000.0) DESC, AVG(qrs.avg_cpu_time / 1000.0) DESC;
Laporan Query Store dalam SQL Server Management Studio (SSMS) 21 dan versi selanjutnya menyediakan menu dropdown Replica, yang memberikan cara untuk melihat data Query Store di berbagai set/peran replika. Selain itu, di dalam tampilan Object, simpul Query Store mencerminkan status Query Store saat ini (yaitu, READ_CAPTURE) jika tersambung ke replika sekunder yang dapat dibaca.
Query Store untuk telemetri replika sekunder yang dapat dibaca di Azure SQL Database
Aplikasi ke: Azure SQL Database
Saat streaming Query Store statistik runtime melalui pengaturan diagnostik Azure, dua kolom termasuk untuk membantu mengidentifikasi sumber replika data telemetri.
-
is_primary_b: Nilai Boolean yang menunjukkan apakah data berasal dari replika utama (benar) atau replika sekunder (false) -
replica_group_id: Bilangan bulat yang sesuai dengan peran replika
Kolom ini sangat penting untuk membedakan metrik dan data performa saat menganalisis beban kerja di seluruh set replika. Saat mengonfigurasi pengaturan diagnostik untuk mengalirkan statistik runtime Query Store ke Log Analytics, Azure Event Hubs, atau Azure Storage, pastikan kueri dan dasbor Anda memperhitungkan kolom ini untuk mengelompokkan data dengan benar berdasarkan peran replika. Untuk informasi selengkapnya tentang mengonfigurasi pengaturan diagnostik dan metrik yang tersedia, lihat pengaturan Diagnostik di Azure Monitor.
Penting
Query Performance Insight for Azure SQL Database (QPI)does not saat ini mendukung konsep replica_group_id. Data yang ditampilkan dalam dasbor akan menggabungkan semua data statistik eksekusi dan waktu tunggu dari semua replika.
Pertimbangan performa untuk Query Store untuk replika sekunder yang dapat dibaca
Saluran yang digunakan oleh replika sekunder untuk mengirim informasi kueri kembali ke replika utama adalah saluran yang sama yang digunakan untuk menjaga replika sekunder tetap terbarui. Apa artinya channel di sini?
Dalam konfigurasi grup ketersediaan (HADR), replika disinkronkan satu sama lain menggunakan lapisan transportasi khusus yang membawa blok log, pengakuan, dan pesan status antara replika utama dan sekunder. Ini memastikan konsistensi data dan kesiapan failover.
Saat Query Store untuk replika sekunder yang dapat dibaca diaktifkan, replika tersebut tidak membuat titik akhir jaringan terpisah. Sebaliknya, ini menetapkan jalur komunikasi logis baru di atas lapisan transportasi yang ada:
Untuk Azure SQL Database (non-Hyperscale), Azure SQL Managed Instance, dan SQL Server, ini menggunakan lapisan transportasi Always On untuk ketersediaan tinggi dan pemulihan bencana (HADR).
Untuk Azure SQL Database Hyperscale, digunakan lapisan transport Remote Blob I/O yang berbeda. Lapisan transport Remote Blob I/O adalah saluran komunikasi antara simpul komputasi dan Server Layanan Log/Halaman. Lapisan transportasi I/O Blob Jarak Jauh menyediakan saluran terenkripsi yang andal untuk memindahkan rekaman log dan halaman data.
Jalur ini menggabungkan data eksekusi Query Store (teks kueri, rencana, statistik runtime/menunggu) bersama dengan lalu lintas rekaman log normal, menggunakan sesi terenkripsi yang sama. Fitur ini memiliki antrean pengambilan dan penerimaan sendiri, yang dapat dilihat dengan menjalankan kueri jendela tampilan dari perspektif berbagai replika:
SELECT pending_message_count,
messaging_memory_used_mb
FROM sys.database_query_store_internal_state;
Data dari replika sekunder disimpan dalam tabel Query Store yang sama pada tabel utama, yang dapat meningkatkan persyaratan penyimpanan. Di bawah beban berat, Anda mungkin mengamati latensi atau tekanan balik pada saluran transport. Batasan pengambilan kueri ad hoc yang sama yang berlaku untuk Query Store pada replika utama juga berlaku untuk replika sekunder. Untuk informasi dan panduan selengkapnya tentang mengelola ukuran dan kebijakan penangkapan Query Store, kunjungi Jaga data yang paling relevan di Query Store.
Keterlihatan ID kueri/ID rencana negatif
ID bernilai negatif menunjukkan penampung sementara dalam memori untuk kueri atau rencana pada replika sekunder sebelum dipersistenkan ke replika utama.
Sebelum data Query Store disimpan ke primer dari replika sekunder yang dapat diakses, kueri dan rencana eksekusi mungkin ditetapkan pengidentifikasi sementara di dalam representasi memori lokal Query Store - MEMORYCLERK_QUERYDISKSTORE_HASHMAP. KUERI dan ID paket dapat muncul sebagai angka negatif dan merupakan tempat penampung hingga replika utama menetapkan pengidentifikasi otoritatif, yang terjadi setelah Query Store menentukan bahwa kueri memenuhi persyaratan mode capture yang dikonfigurasi. Jika kebijakan penangkapan kustom diberlakukan, Anda dapat meninjau persyaratan yang harus dipenuhi dengan mengkueri sys.database_query_store_options tampilan katalog sistem.
SELECT query_capture_mode_desc,
capture_policy_execution_count,
capture_policy_total_compile_cpu_time_ms,
capture_policy_total_execution_cpu_time_ms
FROM sys.database_query_store_options;
Setelah kueri ditetapkan sebagai diambil, statistik runtime/tunggu dan rencananya dapat dipertahankan, dan ID sementara lokal diganti dengan ID positif. Ini juga memungkinkan Anda menggunakan kemampuan memaksa atau mengisyaratkan rencana.
Konten terkait
- ALTER DATABASE SET opsi (Transact-SQL)
- sys.query_store_replicas
- sys.query_store_plan_forcing_locations (Transact-SQL)
- sys.sp_query_store_force_plan (Transact-SQL)
- petunjuk Query Store
- Skenario Penggunaan Query Store
- sys.database_query_store_options (Transact-SQL)
- Praktik terbaik untuk memantau beban kerja dengan Query Store
- Praktik terbaik untuk mengelola Query Store
- Setel kinerja dengan Query Store