Meningkatkan performa throughput ke Azure SQL Database dari Azure Stream Analytics

Artikel ini membahas tips untuk mencapai performa throughput tulis yang lebih baik saat Anda memuat data ke Azure SQL Database menggunakan Azure Stream Analytics.

Output SQL di Azure Stream Analytics mendukung penulisan secara paralel sebagai opsi. Opsi ini memungkinkan topologi pekerjaan sepenuhnya paralel, di mana beberapa partisi output menulis ke tabel tujuan secara paralel. Namun, mengaktifkan opsi ini di Azure Stream Analytics mungkin tidak cukup untuk mencapai throughput yang lebih tinggi, karena sangat bergantung pada konfigurasi database dan skema tabel Anda. Pilihan indeks, kunci pengelompokan, faktor pengisian indeks, dan kompresi berdampak pada waktu untuk memuat tabel. Untuk informasi selengkapnya tentang cara mengoptimalkan database Anda guna meningkatkan kueri dan memuat performa berdasarkan tolok ukur internal, lihat panduan performa SQL Database. Pengurutan penulisan tidak dijamin saat menulis secara paralel ke SQL Database.

Berikut adalah beberapa konfigurasi dalam setiap layanan yang dapat membantu meningkatkan throughput solusi Anda secara keseluruhan.

Azure Stream Analytics

  • Mewarisi Partisi – Opsi konfigurasi output SQL ini memungkinkan pewarisan skema partisi dari langkah atau input kueri sebelumnya. Dengan mengaktifkan hal ini, menulis ke tabel berbasis disk dan memiliki topologi sepenuhnya paralel untuk pekerjaan Anda, diharapkan dapat menghasilkan throughput yang lebih baik. Pemartisian ini sudah terjadi secara otomatis untuk banyak output lainnya. Penguncian tabel (TABLOCK) juga dinonaktifkan untuk sisipan massal yang dibuat dengan opsi ini.

    Catatan

    Ketika ada lebih dari 8 partisi input, mewarisi skema pemartisian input mungkin bukan pilihan yang tepat. Batas atas ini diamati pada tabel dengan kolom identitas tunggal dan indeks berkluster. Dalam hal ini, pertimbangkan untuk menggunakan INTO 8 dalam kueri Anda, untuk secara eksplisit menentukan jumlah penulis output. Berdasarkan skema dan pilihan indeks Anda, pengamatan Anda mungkin berbeda.

  • Ukuran Batch - Konfigurasi output SQL memungkinkan Anda menentukan ukuran batch maksimum dalam output SQL Azure Stream Analytics berdasarkan sifat tabel/beban kerja tujuan Anda. Ukuran batch adalah jumlah maksimum catatan yang dikirim dengan setiap transaksi penyisipan massal. Dalam indeks penyimpanan kolom berkluster, ukuran batch sekitar 100K memungkinkan lebih banyak paralelisasi, pencatatan log minimal, dan pengoptimalan penguncian. Dalam tabel berbasis disk, 10K (default) atau lebih rendah mungkin optimal untuk solusi Anda, karena ukuran batch yang lebih tinggi dapat memicu eskalasi kunci selama penyisipan massal.

  • Penyetelan Pesan Input – Jika Anda telah mengoptimalkan menggunakan partisi bawaan dan ukuran batch, meningkatkan jumlah peristiwa input per pesan per partisi akan membantu meningkatkan throughput tulis Anda lebih baik. Penyetelan pesan input memungkinkan ukuran batch dalam Azure Stream Analytics mencapai Ukuran Batch yang ditentukan, sehingga meningkatkan throughput. Hal ini dapat dicapai dengan menggunakan kompresi atau meningkatkan ukuran pesan input di EventHub atau Blob.

SQL Azure

  • Tabel dan Indeks yang Dipartisi – Menggunakan tabel SQL yang dipartisi dan indeks yang dipartisi pada tabel dengan kolom yang sama dengan kunci partisi Anda (misalnya, PartitionId) dapat secara signifikan mengurangi pertikaian di antara partisi selama penulisan. Untuk tabel yang dipartisi, Anda harus membuat fungsi partisi dan skema partisi pada grup file PRIMARY. Hal ini juga akan meningkatkan ketersediaan data yang ada saat data baru sedang dimuat. Batas IO log dapat dicapai berdasarkan jumlah partisi, yang dapat ditingkatkan dengan meningkatkan SKU.

  • Hindari pelanggaran kunci unik – Jika Anda mendapatkan beberapa pesan peringatan pelanggaran kunci di Log Aktivitas Azure Stream Analytics, pastikan pekerjaan Anda tidak terpengaruh oleh pelanggaran batasan unik yang mungkin terjadi selama kasus pemulihan. Hal ini dapat dihindari dengan mengatur opsi IGNORE_DUP_KEY pada indeks Anda.

Azure Data Factory dan Tabel In-Memory

  • Tabel In-Memory sebagai tabel sementaraTabel In-Memory memungkinkan pemuatan data berkecepatan sangat tinggi dengan syarat data harus sesuai dengan memori. Tolok ukur menunjukkan pemuatan massal dari tabel In-Memory ke tabel berbasis disk sekitar 10 kali lebih cepat daripada penyisipan massal secara langsung menggunakan penulis tunggal ke tabel berbasis disk dengan kolom identitas dan indeks berkluster. Untuk memanfaatkan performa penyisipan massal ini, siapkan pekerjaan salin menggunakan Azure Data Factory yang menyalin data dari tabel In-Memory ke tabel berbasis disk.

Menghindari Jebakan Performa

Penyisipan data secara massal jauh lebih cepat daripada memuat data dengan sisipan tunggal karena overhead berulang untuk mentransfer data, menguraikan pernyataan penyisipan, menjalankan pernyataan, dan mengeluarkan catatan transaksi dapat dihindari. Sebagai gantinya, jalur yang lebih efisien digunakan ke mesin penyimpanan untuk mengalirkan data. Namun biaya penyiapan jalur ini jauh lebih tinggi daripada pernyataan penyisipan tunggal dalam tabel berbasis disk. Titik impas biasanya sekitar 100 baris, di luar itu pemuatan massal hampir selalu lebih efisien.

Jika tingkat peristiwa yang masuk rendah, hal ini dapat dengan mudah membuat ukuran batch lebih rendah dari 100 baris, yang membuat penyisipan massal tidak efisien dan menggunakan terlalu banyak ruang disk. Untuk mengatasi batasan ini, Anda dapat melakukan salah satu tindakan berikut:

  • Buat pemicu INSTEAD OF untuk menggunakan sisipan sederhana pada setiap baris.
  • Gunakan tabel sementara In-Memory seperti yang dijelaskan di bagian sebelumnya.

Skenario lain seperti itu terjadi saat menulis ke dalam indeks penyimpan kolom non-cluster (NCCI), di mana penyisipan massal yang lebih kecil dapat membuat terlalu banyak segmen, yang dapat merusak indeks. Dalam hal ini, rekomendasinya adalah menggunakan indeks penyimpan kolom sebagai gantinya.

Ringkasan

Singkatnya, dengan fitur output yang dipartisi di Azure Stream Analytics untuk output SQL, paralelisasi pekerjaan Anda yang selaras dengan tabel yang dipartisi di SQL Azure akan memberi Anda peningkatan throughput yang signifikan. Memanfaatkan Azure Data Factory untuk mengatur pergerakan data dari tabel In-Memory ke tabel berbasis Disk dapat memberikan urutan besarnya peningkatan throughput. Jika memungkinkan, meningkatkan kepadatan pesan juga dapat menjadi faktor utama dalam meningkatkan throughput secara keseluruhan.

Langkah berikutnya