Ketika indeks kolomstore sedang digunakan dalam kueri SQL Server dapat menggunakan mode batch. Dokumentasi tipis pada apa yang bisa berjalan dalam mode batch dan apa yang tidak bisa. Silakan lihat rencana permintaan berikut (memotivasi) di mana sejumlah hal mengejutkan dijalankan dalam mode batch (hijau):
(Ini adalah rencana perkiraan. Saya menggunakan rencana aktual untuk memverifikasi bahwa mode eksekusi sebenarnya memang batch.)
Perhatikan, bahwa hanya sisi build T1 yang menggunakan indeks columnstore. Semua input probe (T2 dan T3) adalah baris baris. Data mereka tampaknya beralih ke mode batch. Saya selalu berpikir bahwa mode batch digunakan untuk aliran data yang berjalan melalui sisi probe saja.
Tampaknya data dapat beralih ke mode batch walaupun tidak berasal dari indeks columnstore. Itu menimbulkan pertanyaan: Mengapa SQL Server tidak menggunakan mode batch untuk permintaan rowstore saja? Bisa bermanfaat bagi sebagian dari mereka. Apakah menggunakan indeks columnstore persyaratan formal yang diperlukan untuk membuat SQL Server mempertimbangkan mode batch? Bisakah kita menambahkan tabel dummy baris nol dengan indeks toko kolom untuk menginduksi mode batch dan mewujudkan keuntungan kinerja?
Apa sebenarnya yang bisa dijalankan dalam mode batch pada SQL Server 2014?
Jawaban:
SQL Server 2014 menambahkan yang berikut ini ke daftar asli dari operator mode batch:
SQL Server 2012 sangat terbatas dalam penggunaan operator batch. Paket mode kumpulan memiliki bentuk tetap, bergantung pada heuristik, dan tidak dapat memulai kembali mode batch setelah transisi ke pemrosesan mode baris dilakukan.
SQL Server 2014 menambahkan mode eksekusi (batch atau baris) ke kerangka kerja properti pengoptimal umum kueri, yang berarti dapat mempertimbangkan transisi ke dalam dan keluar dari mode batch di setiap titik dalam rencana. Transisi diimplementasikan oleh adapter mode eksekusi yang tidak terlihat dalam rencana. Adaptor ini memiliki biaya yang terkait dengannya untuk membatasi jumlah transisi yang diperkenalkan selama optimasi. Model fleksibel baru ini dikenal sebagai Eksekusi Mode Campuran.
Adaptor mode eksekusi dapat dilihat dalam output pengoptimal (meskipun sayangnya tidak dalam rencana eksekusi yang terlihat oleh pengguna) dengan TF 8607 yang tidak didokumentasikan. Misalnya, berikut ini ditangkap untuk kueri penghitungan baris di toko baris:
Hari ini ya. Salah satu alasan yang mungkin untuk pembatasan ini adalah bahwa itu secara alami membatasi pemrosesan mode batch ke Edisi Perusahaan.
Ya, ini berhasil. Saya juga melihat orang-orang bergabung dengan indeks kolomstore berkerumun baris tunggal hanya untuk alasan ini. Saran yang Anda buat di komentar untuk bergabung dengan tabel dummy kolomstore palsu itu hebat.
Paket dengan dummy left outer join:
Benar.
Sumber informasi resmi terbaik adalah Columnstore Indexes Dijelaskan dan Penyesuaian Kinerja SQL Server Columnstore .
SQL Server MVP Niko Neugebauer memiliki seri hebat di columnstore secara umum di sini .
Ada beberapa detail teknis yang baik tentang perubahan 2014 dalam makalah Microsoft Research, Enhancements to SQL Server Column Stores (pdf) meskipun ini bukan dokumentasi produk resmi.
sumber