Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

Pengantar Pemrosesan Asinkron dengan Pialang Layanan

Saya suka memodifikasi kode SQL Server untuk meningkatkan kinerja, tetapi terkadang ada skenario di mana bahkan setelah menyetel kode, mengindeks, dan mendesain tugas pengguna dari aplikasi membutuhkan waktu lebih lama untuk diselesaikan daripada pengalaman pengguna akhir yang diharapkan. Ketika ini terjadi, antarmuka pengguna harus menunggu prosesnya selesai atau kita harus menemukan cara alternatif untuk menangani tugas tersebut. Pemrosesan asinkron yang disediakan oleh Service Broker cocok untuk banyak skenario ini dan memungkinkan pemrosesan latar belakang tugas yang berjalan lama dilakukan secara terpisah dari antarmuka pengguna, memungkinkan pengguna untuk terus bekerja segera tanpa menunggu tugas benar-benar dilakukan . Selama beberapa artikel saya berikutnya, saya berharap dapat membuat seri tentang bagaimana Anda dapat memanfaatkan Service Broker dengan penjelasan dan contoh kode yang sesuai untuk mempermudah dalam memanfaatkan kemampuan Service Broker tanpa masalah implementasi.

Metode Melakukan Pemrosesan Asinkron

Ada beberapa cara untuk menghadapi proses yang berjalan lama, tetapi sudah disetel. Kode aplikasi juga dapat ditulis ulang untuk menggunakan BackgroundWorker, ThreadPool latar belakang, atau solusi berbasis Thread yang ditulis secara manual di .NET yang melakukan operasi secara asinkron. Namun, ini memungkinkan jumlah yang tidak terbatas dari proses yang berjalan lama ini untuk dikirimkan oleh aplikasi, kecuali jika pekerjaan pengkodean tambahan dilakukan untuk melacak dan membatasi jumlah proses yang aktif. Ini berarti bahwa aplikasi akan memiliki potensi dampak kinerja, atau di bawah beban akan mencapai batas dan kembali ke penantian sebelumnya yang kami coba cegah semula.

Saya juga melihat jenis proses ini berubah menjadi pekerjaan Agen SQL yang diikat ke tabel yang digunakan untuk menyimpan informasi untuk diproses. Kemudian pekerjaan dijadwalkan untuk berjalan secara berkala, atau dimulai oleh aplikasi menggunakan sp_start_job ketika perubahan disimpan untuk diproses. Namun, ini hanya memungkinkan eksekusi serial dari proses yang berjalan lama, karena SQL Agent tidak mengizinkan pekerjaan dijalankan beberapa kali secara bersamaan. Pekerjaan juga harus dirancang untuk menangani skenario di mana beberapa baris masuk ke tabel pemrosesan sehingga urutan pemrosesan yang benar terjadi dan pengiriman selanjutnya diproses secara terpisah.

Memanfaatkan Service Broker untuk pemrosesan asinkron di SQL Server sebenarnya mengatasi keterbatasan dengan metode yang disebutkan sebelumnya untuk menangani pemrosesan asinkron. Implementasi broker memungkinkan tugas baru untuk diantrekan untuk pemrosesan asinkron di latar belakang, dan juga memungkinkan pemrosesan paralel tugas yang telah diantrekan hingga batas yang dikonfigurasi. Namun, tidak seperti tingkat aplikasi yang harus menunggu ketika batas tercapai, solusi broker hanya mengantrekan pesan baru yang diterima dan memungkinkannya diproses ketika salah satu tugas pemrosesan saat ini selesai — ini memungkinkan aplikasi untuk melanjutkan tanpa menunggu.

Konfigurasi Pialang Layanan Basis Data Tunggal

Meskipun konfigurasi Service Broker bisa menjadi rumit, untuk pemrosesan asinkron sederhana Anda hanya perlu mengetahui konsep dasar untuk membangun konfigurasi database tunggal. Konfigurasi database tunggal hanya membutuhkan:

  1. Membuat dua jenis pesan
    • Satu untuk meminta pemrosesan asinkron
    • Satu untuk pesan balasan saat pemrosesan selesai
  2. Kontrak menggunakan jenis pesan
    • Menentukan jenis pesan yang dikirim oleh layanan inisiator dan jenis pesan yang dikembalikan oleh layanan target
  3. Antrian, layanan, dan prosedur aktivasi untuk target
    • Antrian menyediakan penyimpanan pesan yang dikirim ke layanan target oleh layanan inisiator
    • Prosedur aktivasi mengotomatiskan pemrosesan pesan dari antrian
      • Mengembalikan pesan yang telah selesai ke layanan inisiator ketika menyelesaikan pemrosesan tugas yang diminta
      • Menangani http://schemas.microsoft.com/SQL/ServiceBroker/EndDialog dan http://schemas.microsoft.com/SQL/ServiceBroker/Jenis pesan sistem kesalahan
  4. Antrian, layanan, dan prosedur aktivasi untuk inisiator
    • Antrian menyediakan penyimpanan pesan yang dikirim ke layanan
    • Prosedur aktivasi bersifat opsional tetapi mengotomatiskan pemrosesan pesan dari antrian
      • Memproses pesan yang sudah selesai ke layanan target dan mengakhiri percakapan
      • Menangani http://schemas.microsoft.com/SQL/ServiceBroker/EndDialog dan http://schemas.microsoft.com/SQL/ServiceBroker/Jenis pesan sistem kesalahan

Selain komponen dasar ini, saya lebih suka menggunakan prosedur tersimpan pembungkus untuk membuat percakapan dan mengirim pesan antar layanan broker untuk menjaga kode tetap bersih, dan membuatnya lebih mudah untuk menskalakan seperlunya dengan menerapkan kembali percakapan atau trik percakapan 150 yang dijelaskan di buku putih tim SQLCAT. Untuk banyak konfigurasi pemrosesan asinkron sederhana, teknik penyetelan kinerja ini mungkin tidak perlu diterapkan. Namun, dengan menggunakan prosedur tersimpan pembungkus, menjadi lebih mudah untuk mengubah satu titik dalam kode, daripada mengubah setiap prosedur yang mengirim pesan di masa mendatang, jika diperlukan.

Jika Anda belum melihat Service Broker, ini mungkin memberikan metode alternatif untuk melakukan pemrosesan terpisah secara asinkron untuk menyelesaikan sejumlah kemungkinan skenario. Dalam posting saya berikutnya, kita akan membahas kode sumber untuk contoh implementasi dan menjelaskan di mana perubahan spesifik perlu dilakukan untuk memanfaatkan kode untuk pemrosesan asinkron.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kejutan dan Asumsi Kinerja :DATEDIFF

  2. Salesforce SOQL dari Java

  3. Ketuk dan Parkir:Model Data Aplikasi Parkir

  4. Pecah operasi penghapusan besar menjadi beberapa bagian

  5. Model Basis Data untuk Survei Online. Bagian 4