Cập nhật thống kê w / quét toàn bộ trên SQL Server 2014 sử dụng 100% cpu, trên 2008 R2, 15%


10

Tại sao thống kê cập nhật quét toàn bộ sử dụng 100% CPU trên SQL Server 2014 khi nó sử dụng có thể 20% CPU trên SQL Server 2008 R2, cho cùng một bảng, có khả năng phần cứng tương tự?

Tôi đã xem xét MAXDOP, các lựa chọn khác, và thực sự thấy không có gì nổi bật. Tôi nhận ra rằng có thể có các cài đặt có thể gây ra điều này, nhưng các cài đặt rất giống nhau cho cả hai cơ sở dữ liệu (ví dụ: MAXDOPlà 4 cho cả hai, với cả hai đều có nhiều lõi). Cả hai đều là phiên bản doanh nghiệp.

Có điều gì đó "khác biệt" trong SQL Server 2014 so với SQL Server 2008 R2 có thể giải thích điều này không? Tôi có tùy chọn bộ nhớ ở 90% cho cả hai máy chủ. Bất kỳ suy nghĩ về những gì để tìm kiếm?

Tôi chạy thống kê cập nhật với quét toàn bộ (100%) mỗi tuần một lần trên hai máy chủ sử dụng SQL Server 2008 R2 / SP3 và SQL Server 2014 / SP2 và các cơ sở dữ liệu có cùng cấu trúc. Trên máy chủ 2008 R2, số liệu thống kê cập nhật của hai bảng rất lớn mất vài giờ, đó là những gì tôi mong đợi, nhưng CPU vẫn ở mức dưới 20% hoặc sử dụng toàn bộ thời gian. Tuy nhiên, trên máy chủ 2014, CPU đạt 100% trong khoảng 40 phút. Các bảng nhỏ hơn một chút trên máy chủ 2014. Tôi thấy điều này bằng cách sử dụng các menu phân tích SQL Monitor.

Đây là đầu ra của tệp nhật ký Ola trên Máy chủ SQL 2014, CPU đạt 100% từ khoảng 2:10 đến 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  

Đây là đầu ra của tệp nhật ký Ola trên Máy chủ SQL 2008 R2 cho hai số liệu thống kê ở trên, nhưng CPU có thể đạt 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

Tôi không thể chạy chúng với máy chủ maxdop = 1 vì điều đó loại bỏ tất cả việc tạo kế hoạch song song và điều đó có thể làm tổn thương ứng dụng. Tôi dự định đi theo hướng ngược lại và tăng lên 8 (có 16 lõi trên hộp) và xem điều gì sẽ xảy ra. Có thể đi nhanh hơn để giảm thời gian CPU được chốt. Công việc này chạy trong khi người dùng hầu hết đã biến mất.


Bạn đã kiểm tra xem quy trình có bị ràng buộc IO trên máy chủ 2008 R2 không? Là tempdbcấu hình giống nhau không? Nó có thể được sử dụng trong khi UPDATE STATISTICSđang chạy, do đó cũng có thể là một vấn đề.
MicSim

1
Tôi cũng sẽ nghi ngờ rằng song song có lẽ là thủ phạm. Bạn đã kiểm tra Ngưỡng chi phí cho tính song song một cách tình cờ chưa? Ngoài ra, có thể là một ý tưởng tốt để có được danh sách sp_cool đầy đủ từ cả hai hộp và tìm chúng để xem những gì khác.
DBADon

Câu trả lời:


1

Các cập nhật thống kê có thể đi song song dựa trên rất nhiều tùy chọn khác nhau trong SQL Server:

  • Ngưỡng chi phí cho tính song song - một truy vấn phải cao đến mức này để đi tàu song song. Hai máy chủ của bạn có thể có các cài đặt CTFP khác nhau khiến bản cập nhật 2008R2 chuyển sang một luồng, trong khi phiên bản 2014 có thể đi đa luồng.
  • Mức độ song song tối đa - chỉ ra số lượng truy vấn có thể sử dụng tối đa bao nhiêu lõi, nếu SQL Server quyết định song song hóa nó đến mức đó. Hộp 2008R2 có thể có MAXDOP được đặt thành 1, trong khi hộp 2014 có thể được đặt thành mặc định là 0 (không giới hạn.)
  • Resource Governor - tính năng Enterprise Edition này cho phép bạn điều tiết các nhóm người dùng hoặc ứng dụng khác nhau đến các MAXDOP khác nhau.

Trong các phiên bản sau của SQL Server (2016 & mới hơn), điều này thậm chí còn phức tạp hơn:

  • Tùy chọn phạm vi mức cơ sở dữ liệu - bạn có thể nhấp chuột phải vào cơ sở dữ liệu, đi vào thuộc tính và đặt mức MAXDOP cho cơ sở dữ liệu đó.
  • Gợi ý song song thống kê - bắt đầu từ 2016 SP2, các câu lệnh tạo và cập nhật thống kê chấp nhận gợi ý MAXDOP

Như bạn đã lưu ý, phiên bản 2008R2 của bạn đang chạy một luồng, trong khi phiên bản 2014 sẽ đa luồng (do đó hoàn thành nhanh hơn, nhưng tối đa hóa CPU trong khi nó chạy.)

Để tìm sự cân bằng phù hợp cho công việc thống kê của bạn, hãy nghĩ về:

  • Những khối lượng công việc khác đang xảy ra trong cơ sở dữ liệu cùng một lúc? Bạn có đủ khả năng để thống trị hộp trong thời gian ngắn? Ví dụ, trong các kho dữ liệu không hoạt động trong hầu hết các giờ cuối tuần, tôi đã thấy mọi người rất khó khăn trong việc cập nhật số liệu thống kê khi họ không biết ai đang sử dụng máy chủ. Trong môi trường giao dịch nặng, bạn phải bắt đầu sử dụng ít tác động hơn cho các nhiệm vụ bảo trì nếu người dùng phàn nàn ngay cả trong thời gian nửa đêm.
  • Là fullscan thực sự cần thiết? Bạn có thấy các truy vấn chỉ nhận được các kế hoạch tốt khi bạn sử dụng tùy chọn fullscan hoặc bạn chỉ đang thực hiện nó như một cách thực hành tốt nhất? Khi cơ sở dữ liệu của bạn phát triển, nếu các khoản đầu tư phần cứng của bạn không theo kịp, bạn có thể phải bắt đầu thực hiện đánh đổi trong lấy mẫu thống kê thay vì thực hiện toàn màn hình.
  • Bạn có thể cập nhật số liệu thống kê ít thường xuyên hơn? Ví dụ: cập nhật 1/4 số liệu thống kê của bạn mỗi cuối tuần, và sau đó mỗi tháng, mọi thứ sẽ nhận được cập nhật số liệu thống kê?
  • Bạn có thể cập nhật ít đối tượng hơn? Thường thì tôi thấy mọi người cập nhật số liệu thống kê ngay cả trên các bảng lưu trữ hoặc kiểm toán khổng lồ chỉ vì vài chục lần chèn mới đã được thực hiện, nhưng những lần chèn đó không thực sự ảnh hưởng đến số liệu thống kê trên bảng (và dù sao cũng không ai truy vấn nó.)

0

Cộng đồng wiki trả lời :

Dự đoán tốt nhất: Gói được chọn để cập nhật số liệu thống kê là song song hoặc song song hơn trên hộp 2014 so với hộp 2008 R2.

Số liệu thống kê cập nhật song song fullscanđã có từ năm 2005 và để biết số liệu thống kê được lấy mẫu bắt đầu từ năm 2016, hãy xem Bổ sung tối ưu hóa truy vấn trong SQL Server 2016 của Gjorgji Gjeorgjievski trên Blog Công cụ cơ sở dữ liệu SQL Server.

Nếu bạn có Phiên bản doanh nghiệp, bạn có thể sử dụng Resource Governor để giới hạn CPU đang được sử dụng cho công việc bảo trì của bạn.

Cũng xem xét bỏ phiếu cho đề xuất Kết nối Thêm MAXDOPtham số vào Cập nhật số liệu thống kê của Javier Villegas.

Hỏi đáp liên quan: Cập nhật thống kê song song

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.