Pembaruan Statistik Paralel

14

Dalam SQL Server 2008 atau yang lebih baru, apakah UPDATE STATISTICS WITH FULLSCANoperasi berulir tunggal atau dapat menggunakan paralelisme? Bagaimana dengan memperbarui statistik dengan pengambilan sampel default - dapatkah menggunakan paralelisme? Saya tidak melihat opsi yang ditentukan MAXDOPdengan statistik pembaruan.

Pelajar SQL
sumber

Jawaban:

22

Pembaruan statistik paralel telah tersedia sejak SQL Server 2005. Ini didokumentasikan dalam artikel TechNet, "Statistik yang Digunakan oleh Pengoptimal Kueri di Microsoft SQL Server 2005" :

Ekstrak artikel

Di mana pemindaian penuh dilakukan (apakah secara eksplisit diminta atau tidak) permintaan internal yang dihasilkan untuk pengumpulan data memiliki bentuk umum:

SELECT
    StatMan([SC0])
FROM 
(
    SELECT TOP 100 PERCENT
        [Column] AS [SC0]
    FROM [Table] WITH (READUNCOMMITTED)
    ORDER BY [SC0]
) AS _MS_UPDSTATS_TBL
OPTION (MAXDOP 16)

Perhatikan MAXDOPpetunjuk di sana (meskipun tidak ada cara bagi pengguna untuk menentukan petunjuk secara manual). Di mana statistik sampel dikumpulkan, kueri internal menggunakan TABLESAMPLEklausa, yang mencegah paralelisme. Mesin juga menghasilkan MAXDOP 1petunjuk tentang permintaan internal, yang agak berlebihan.

Jika Anda perlu mengurangi paralelisme, MAXDOPpetunjuk dalam kueri internal dapat diganti menggunakan Resource Governor (Enterprise saja).

SQL Server 2016 menambahkan pembaruan statistik sampel paralel .

Paul White 9
sumber
1

Mulai dari SQL Server 2016 SP2 Anda bisa menggunakan MAXDOPopsi.

Pembaruan menambah dukungan untuk opsi MAXDOP untuk pernyataan CREATE STATISTICS dan UPDATE STATISTICS :

Pembaruan ini menambahkan dukungan untuk opsi MAXDOP untuk pernyataan CREATE STATISTICS dan STATISTIK UPDATE di Microsoft SQL Server 2016 dan 2017. Ini memungkinkan Anda untuk menimpa pengaturan default untuk derajat paralelisme maks (MAXDOP) yang ditentukan pada tingkat database atau server.

Catatan: Tingkat paralelisme yang dihasilkan dibatasi oleh pengaturan MAX_DOP grup beban kerja jika Resource Resource digunakan.

Misalnya, asumsikan bahwa tabel Sales.SalesOrderDetail digunakan dan beberapa statistik telah dibuat di atasnya. Dalam hal ini, skrip berikut memperbarui setiap statistik dengan tingkat paralelisme sama dengan 8.

UPDATE STATISTICS Sales.SalesOrderDetail WITH MAXDOP = 8
Lad2025
sumber
-3

STATISTIK PEMBARUAN tidak memiliki paralelisme internal apa pun. Tidak masalah jika Anda menjalankan FULLSCAN atau SAMPLING. Tentu saja, Anda dapat menjalankan beberapa perintah STATISTIK PEMBARUAN sekaligus, masing-masing pada koneksi yang berbeda, melalui beberapa pekerjaan SQL Agent atau beberapa penemuan lainnya. Bergantung pada situasi Anda yang sebenarnya dengan perangkat keras dan data, Anda mungkin menemukan bahwa dengan sederhana pengindeksan ulang tabel lebih cepat daripada UPDATE STATISTIK dengan FULLSCAN dan mungkin opsi yang lebih baik.

selat darin
sumber
Saya minta maaf karena telah menandai tetapi Anda tidak tahu apa yang Anda bicarakan. Dari whitepaper ini msdn.microsoft.com/en-us/library/dd535534(v=sql.100).aspx "Pengumpulan statistik paralel untuk fullscan: Untuk statistik yang dikumpulkan dengan fullscan, untuk pembuatan statistik objek fullscan, pembuatan objek statistik tunggal dapat dilakukan secara paralel untuk baik tabel nonpartitioned dan dipartisi. " Namun saya tidak dapat melihat paralelisme ketika saya menggunakan STATISTIK PEMBARUAN dengan pemindaian penuh pada tabel 30 juta baris
SQL Learner
Juga, pembaruan statistik mengambil kunci stabilitas skema sehingga jika Anda menjalankan statistik pembaruan lain itu akan menunggu sampai yang sebelumnya selesai.
SQL Learner
4
@ SQLLearner: Jangan tersinggung, tetapi terlepas dari kebenaran jawaban ini, mengapa Anda mengajukan pertanyaan ini jika Anda sudah membaca whitepaper itu? Ini memberi Anda jawaban untuk semua yang Anda minta. Jika Anda tidak melihat paralelisme untuk skenario spesifik Anda, silakan edit pertanyaan untuk menyatakan itu, dan detail relevan lainnya.
Jon Seigel
Jon Seigel, yang menemukan dan membaca whitepaper setelah memposting pertanyaan, tetapi web masih tidak yakin apakah pembaruan statistik dapat menggunakan paralelisme.
SQL Learner
4
Anda benar, sehubungan dengan kertas putih dan sql2008. Saya baru saja membaca kertas putih itu; info di kepala saya sudah ketinggalan zaman. Saya punya banyak masalah dengan sql2005 atau bahkan sql2000 sehubungan dengan pengindeksan kembali, STATISTIK PEMBARUAN, FULLSCAN vs SAMPLE, waktu yang diperlukan untuk pekerjaan dan kualitas stokastik data pada halaman statistik. Saya kira semua rasa sakit itu adalah air di bawah jembatan sekarang. Saya akan mengatakan bahwa Anda dapat menjalankan STATUS PEMBARUAN pada tabel yang berbeda secara paralel, tapi itu sepertinya lebih banyak masalah daripada nilainya dan Anda mungkin memiliki terlalu banyak pertentangan I / O untuk itu menjadi berharga.
Selat darin