เหตุใดสถิติการปรับปรุงการสแกนแบบสมบูรณ์จึงใช้ 100% ของ CPU ใน SQL Server 2014 เมื่อใช้ CPU 20% ของ SQL Server 2008 R2 สำหรับตารางเดียวกันโดยมีความสามารถด้านฮาร์ดแวร์ที่คล้ายกัน
ฉันได้ดูMAXDOP
ทางเลือกอื่น ๆ และไม่เห็นอะไรที่ชัดเจน ฉันรู้ว่าอาจมีการตั้งค่าที่อาจทำให้เกิดปัญหานี้ แต่การตั้งค่าคล้ายกันมากสำหรับฐานข้อมูลทั้งสอง (ตัวอย่างเช่นMAXDOP
คือ 4 สำหรับทั้งคู่โดยที่ทั้งคู่มีหลายคอร์) ทั้งสองเป็น Enterprise Edition
มีบางสิ่งที่ "แตกต่าง" ใน SQL Server 2014 เทียบกับ SQL Server 2008 R2 ที่สามารถอธิบายสิ่งนี้ได้หรือไม่ ฉันมีตัวเลือกหน่วยความจำที่ 90% สำหรับเซิร์ฟเวอร์ทั้งสอง มีความคิดเกี่ยวกับสิ่งที่จะมองหา?
ฉันรันสถิติการอัพเดทด้วยการสแกนเต็มรูปแบบ (100%) สัปดาห์ละครั้งบนเซิร์ฟเวอร์สองเครื่องโดยใช้ SQL Server 2008 R2 / SP3 และ SQL Server 2014 / SP2 และฐานข้อมูลมีโครงสร้างเดียวกัน บนเซิร์ฟเวอร์ 2008 R2 สถิติการอัปเดตของสองตารางที่มีขนาดใหญ่มากใช้เวลาหลายชั่วโมงซึ่งเป็นสิ่งที่ฉันคาดหวัง แต่ CPU ยังคงต่ำกว่า 20% หรือการใช้ประโยชน์ตลอดเวลา บนเซิร์ฟเวอร์ 2014 แม้ว่า CPU จะไปที่ 100% เป็นเวลาประมาณ 40 นาที ตารางมีขนาดเล็กกว่าเล็กน้อยบนเซิร์ฟเวอร์ 2014 ฉันเห็นสิ่งนี้โดยใช้เมนูการวิเคราะห์ของ SQL Monitor
นี่คือผลลัพธ์ของ Ola log file บน 2014 SQL Server, CPU ไปที่ 100% จากประมาณ 2:10 ถึง 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
นี่คือผลลัพธ์ของไฟล์บันทึก Ola บน 2008 R2 SQL Server สำหรับสองสถานะด้านบน แต่ CPU อาจไปถึง 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
ฉันไม่สามารถเรียกใช้พวกเขาด้วยเซิร์ฟเวอร์ maxdop = 1 เพราะนั่นจะกำจัดการสร้างแผนคู่ขนานทั้งหมดและนั่นอาจทำให้แอปพลิเคชันเสียหาย ฉันวางแผนที่จะไปในทิศทางตรงกันข้ามและเพิ่มเป็น 8 (มี 16 แกนในกล่อง) และดูว่าเกิดอะไรขึ้น อาจไปเร็วขึ้นเพื่อลดระยะเวลาที่ซีพียูถูกตรึง งานนี้ทำงานในขณะที่ผู้ใช้ส่วนใหญ่หายไป
tempdb
กำหนดค่าเหมือนกันหรือไม่ มันสามารถใช้งานได้ในขณะที่UPDATE STATISTICS
กำลังทำงานดังนั้นอาจเป็นปัญหาได้เช่นกัน