Apakah menjalankan kueri besar pada basis data sekunder di grup ketersediaan memengaruhi kinerja transaksi di basis data primer?

17

Saya perlu memberikan data real-time, atau hampir real-time, untuk pelaporan SSRS dan Tableau. Saya tidak ingin sistem OLTP produksi terkena dampak negatif oleh permintaan yang berjalan lama. Apakah menjalankan kueri besar pada basis data sekunder di grup ketersediaan memengaruhi kinerja transaksi di basis data primer?

Tarzan
sumber

Jawaban:

14

Apakah menjalankan kueri besar pada basis data sekunder di grup ketersediaan memengaruhi kinerja transaksi di basis data primer?

Itu tergantung pada mode sinkronisasi yang Anda gunakan saat mengonfigurasi grup Ketersediaan - Sinkronkan atau Async!

Pada replika sekunder , semua transaksi HANYA menggunakan tingkat Isolasi Snapshot dan semua petunjuk penguncian diabaikan juga. Itulah mengapa penting untuk menguji beban kerja Anda saat merangkul AlwaysON.

Dari: Meminimalkan pemblokiran utas REDO saat menjalankan pelaporan beban kerja pada Replika Sekunder

Sementara pemetaan melaporkan beban kerja ke isolasi snapshot menghilangkan pemblokiran antara beban kerja DML seperti yang diterapkan oleh utas REDO pada replika sekunder dan beban kerja baca atau pelaporan, itu tidak menghilangkan potensi pemblokiran benang REDO ketika menjalankan operasi DDL .

Jika menggunakan

  • Mode sinkron

    • Masalah pemblokiran pada replika sekunder Anda akan memengaruhi kinerja kueri Anda pada replika primer. Jadi beban kerja baca (pilih) yang berjalan pada sekunder mungkin memblokir ulangan untuk menerapkan perubahan yang berasal dari replika primer. Ini berarti bahwa replika primer harus menunggu agar perubahan diterapkan ke semua replika SYNC sekunder sebelum dilakukan secara lokal & mungkin berakhir dengan timeout atau pemblokiran atau kebuntuan.

      Utas REDO dapat dilihat pada Readable Secondary sebagai DB STARTUPperintah di sys.dm_exec_requests. Jika utas itu diblokir, maka beban kerja baca Anda pada sekunder dapat menyebabkan dampak pada primer.

      Untuk lebih jelasnya periksa - Skenario 1: REDO diblokir karena permintaan besar pada replika sekunder

  • Mode asinkron

    • Primer tidak menunggu pengakuan dari sekunder. Masalah pemblokiran pada sekunder hanya diisolasi ke sekunder di mana antrian redo akan tumbuh pada sekunder sampai kunci jelas dan benang redo mampu menerapkan blok log. Ini tidak akan memengaruhi replika utama.

Definisi Anda tentang "real-time atau hampir real-time" perlu lebih banyak pemikiran mengingat metode sinkronisasi yang digunakan, latensi jaringan dan seberapa sibuk replika primer dan aktivitas log yang perlu diangkut sekunder.

SQL Server 2016 telah melakukan beberapa peningkatan besar dalam bidang AlwaysON misalnya

Kin Shah
sumber
2
Utas REDO yang diblokir tidak memengaruhi "kinerja kueri Anda pada replika Primer". Pertentangan IO pada sekunder dapat menunda menyimpan catatan log pada sekunder, yang dapat memengaruhi waktu komit pada primer. Tapi ini tidak ada hubungannya dengan utas REDO. Primer tidak menunggu REDO menerapkan perubahan; hanya untuk itu ditulis ke file log. Lihat blogs.msdn.microsoft.com/sqlserverstorageengine/2011/12/22/…
David Browne - Microsoft