Mengapa statistik pembaruan pindai penuh menggunakan 100% CPU pada SQL Server 2014 ketika mungkin menggunakan 20% CPU pada SQL Server 2008 R2, untuk tabel yang sama, dengan kemampuan perangkat keras yang serupa?
Saya telah melihat MAXDOP
, opsi lain, dan benar-benar melihat tidak ada yang menonjol. Saya menyadari bahwa mungkin ada pengaturan yang dapat menyebabkan ini, tetapi pengaturannya sangat mirip untuk kedua basis data (misalnya, MAXDOP
adalah 4 untuk keduanya, dengan keduanya memiliki beberapa inti). Keduanya adalah Edisi Perusahaan.
Apakah ada sesuatu yang "berbeda" dalam SQL Server 2014 versus SQL Server 2008 R2 yang dapat menjelaskan hal ini? Saya memiliki opsi memori sebesar 90% untuk kedua server. Adakah pemikiran tentang apa yang harus dicari?
Saya menjalankan pembaruan statistik dengan pemindaian penuh (100%) seminggu sekali di dua server menggunakan SQL Server 2008 R2 / SP3 dan SQL Server 2014 / SP2, dan database memiliki struktur yang sama. Pada server R2 2008, statistik pembaruan dari dua tabel yang sangat besar membutuhkan waktu beberapa jam, itulah yang saya harapkan, tetapi CPU tetap di bawah 20% atau lebih pemanfaatan sepanjang waktu. Di server 2014, CPU berjalan ke 100% selama sekitar 40 menit. Tabel sedikit lebih kecil di server 2014. Saya melihat ini dengan menggunakan menu analisis Monitor SQL.
Berikut ini adalah output dari file log Ola pada SQL Server 2014, CPU menjadi 100% dari sekitar 2:10 hingga 2:45:
Date and time: 2017-06-24 02:10:20
Command: UPDATE STATISTICS [InVA].[dbo].[AuditField] [_WA_Sys_00000005_15502E78] WITH FULLSCAN
Outcome: Succeeded
Duration: 00:07:48
Date and time: 2017-06-24 02:18:08
Date and time: 2017-06-24 02:18:08
Command: UPDATE STATISTICS [InVA].[dbo].[AuditField] [_WA_Sys_00000006_15502E78] WITH FULLSCAN
Outcome: Succeeded
Duration: 00:32:22
Date and time: 2017-06-24 02:50:30
Berikut ini adalah output dari file log Ola pada 2008 R2 SQL Server untuk dua statistik di atas, tetapi CPU pergi ke mungkin 15%:
Date and time: 2017-06-24 03:30:32
Command: UPDATE STATISTICS [InGA].[dbo].[AuditField] [_WA_Sys_00000003_0425A276] WITH FULLSCAN
Outcome: Succeeded
Duration: 00:05:00
Date and time: 2017-06-24 03:35:32
Date and time: 2017-06-24 03:35:32
Command: UPDATE STATISTICS [InGA].[dbo].[AuditField] [_WA_Sys_00000004_0425A276] WITH FULLSCAN
Outcome: Succeeded
Duration: 00:52:31
Date and time: 2017-06-24 04:28:03
Saya tidak bisa menjalankannya dengan server maxdop = 1 karena itu menghilangkan semua pembuatan paket paralel, dan itu bisa merusak aplikasi. Saya berencana untuk pergi ke arah yang berlawanan dan meningkatkannya menjadi 8 (ada 16 core di kotak) dan melihat apa yang terjadi. Dapat berjalan lebih cepat untuk mengurangi lamanya waktu CPU dipatok. Pekerjaan ini berjalan saat sebagian besar pengguna pergi.
sumber
tempdb
konfigurasinya sama? Itu bisa digunakan saatUPDATE STATISTICS
sedang berjalan, sehingga bisa juga menjadi masalah.Jawaban:
Pembaruan statistik dapat dilakukan secara paralel berdasarkan banyak opsi berbeda di SQL Server:
Di versi SQL Server yang lebih baru (2016 & yang lebih baru), ini menjadi lebih rumit:
Seperti yang Anda catat, yang 2008R2 Anda akan single-threaded, sedangkan yang 2014 akan multi-threaded (sehingga selesai lebih cepat, tetapi memaksimalkan CPU saat berjalan.)
Untuk menemukan keseimbangan yang tepat untuk pekerjaan statistik Anda, pikirkan:
sumber
Jawaban wiki komunitas :
Tebakan terbaik: Paket yang dipilih untuk memperbarui statistik adalah paralel, atau lebih paralel, pada kotak 2014 daripada kotak 2008 R2.
Statistik pembaruan paralel untuk
fullscan
telah ada sejak 2005, dan untuk statistik sampel dimulai dengan 2016, lihat Penambahan Kueri Pengoptimal dalam SQL Server 2016 oleh Gjorgji Gjeorgjievski di SQL Server Database Engine Blog.Jika Anda memiliki Edisi Perusahaan, Anda bisa menggunakan Resource Governor untuk membatasi CPU yang digunakan oleh pekerjaan pemeliharaan Anda.
Pertimbangkan juga memberi suara untuk parameter Sambungkan saran Tambahkan
MAXDOP
ke Perbarui Statistik oleh Javier Villegas.Tanya Jawab Terkait: Pembaruan Statistik Paralel
sumber