Apa sebenarnya yang bisa dijalankan oleh SQL Server 2014 dalam mode batch?

21

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):

masukkan deskripsi gambar di sini

(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?

usr
sumber
5
Mengapa SQL Server juga tidak menggunakan mode batch untuk permintaan baris saja? Karena CS hanya mendukung mode batch seperti yang sekarang. Bisa bermanfaat bagi sebagian dari mereka. Apakah menggunakan indeks columnstore persyaratan formal yang diperlukan untuk membuat SQL Server mempertimbangkan mode batch? Ya CS adalah persyaratan. Ada item terhubung yang masih aktif. Menerapkan Dukungan Mode Batch untuk Row Store dibuka oleh Neugebauer.
Kin Shah
2
Pada tahun 2016 ada trik baru yang memungkinkan untuk mendapatkan mode batch yang dianggap BTW sqlmag.com/sql-server/…
Martin Smith

Jawaban:

30

Apa sebenarnya yang bisa dijalankan dalam mode batch pada SQL Server 2014?

SQL Server 2014 menambahkan yang berikut ini ke daftar asli dari operator mode batch:

  • Hash Outer join (termasuk gabung penuh)
  • Hash Semi Bergabung
  • Hash Anti Semi Join
  • Union All (Khusus Concatenation)
  • Kumpulan hash skalar (tidak ada grup oleh)
  • Batch Hash Table Build dihapus

Tampaknya data dapat beralih ke mode batch walaupun tidak berasal dari indeks columnstore.

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:

Adaptor baris ke Batch ke Row

Apakah menggunakan indeks columnstore persyaratan formal yang diperlukan untuk membuat SQL Server mempertimbangkan mode batch?

Hari ini ya. Salah satu alasan yang mungkin untuk pembatasan ini adalah bahwa itu secara alami membatasi pemrosesan mode batch ke Edisi Perusahaan.

Bisakah kita menambahkan tabel dummy baris nol dengan indeks toko kolom untuk menginduksi mode batch?

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.

-- Demo the technique (no performance advantage in this case)
--
-- Row mode everywhere
SELECT COUNT_BIG(*) FROM dbo.FactOnlineSales AS FOS;
GO
-- Dummy columnstore table
CREATE TABLE dbo.Dummy (c1 int NULL);
CREATE CLUSTERED COLUMNSTORE INDEX c ON dbo.Dummy;
GO
-- Batch mode for the partial aggregate
SELECT COUNT_BIG(*) 
FROM dbo.FactOnlineSales AS FOS
LEFT OUTER JOIN dbo.Dummy AS D ON 0 = 1;

Paket dengan dummy left outer join:

Mode batch dengan tabel dummy

Dokumentasi tipis

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.

Paul White mengatakan GoFundMonica
sumber