Một số bản phát hành gần đây nhất của SQL Server đã giới thiệu một loạt các tính năng mới, cũng như các cải tiến trong chức năng hiện có. Một lĩnh vực dễ bị bỏ qua của động cơ là số liệu thống kê. Rốt cuộc, thống kê vẫn được tạo theo cùng một cách, chúng vẫn cho bạn biết về việc phân phối dữ liệu, chúng vẫn được Trình tối ưu hóa truy vấn sử dụng… có gì khác biệt? Chức năng cơ bản của thống kê vẫn giống nhau - nhưng cách chúng được Trình tối ưu hóa truy vấn sử dụng sẽ thay đổi tùy thuộc vào Công cụ ước tính tổng số bạn đang sử dụng. Ngoài ra còn có một số thay đổi đáng chú ý liên quan đến cập nhật số liệu thống kê và chức năng mới đã được thêm vào xung quanh việc xem thông tin thống kê. Nhìn chung, những thay đổi này trên các bản phát hành mới nhất có thể gây ra sự thay đổi trong hành vi của Máy chủ SQL mà bạn không mong đợi.
Lưu ý:Bài đăng này có thể áp dụng nhiều nhất cho SQL Server 2012 trở lên, nhưng một số chi tiết cho các bản phát hành trước được bao gồm để tham khảo (và vui).
SQL Server 7.0
- Số bước trong biểu đồ được giới hạn ở 300. Trong SQL Server 6.5 trở về trước, biểu đồ sẽ có số bước có thể vừa với trang 2K, dựa trên kích thước của cột đầu tiên trong khóa.
- Tùy chọn cơ sở dữ liệu 'tự động cập nhật số liệu thống kê' được giới thiệu; các thống kê trước đây chỉ được cập nhật theo cách thủ công.
SQL Server 2000
- Số bước trong biểu đồ giảm từ 300 xuống 200 (về mặt kỹ thuật là 201, nếu bạn bao gồm bước cho NULL, giả sử cột đầu tiên trong khóa cho phép NULL).
SQL Server 2005
- Các bản cập nhật cho thống kê sử dụng FULLSCAN có thể chạy song song.
- Cờ theo dõi 2389 và 2390 được giới thiệu trong SP1 để trợ giúp về vấn đề Khóa tăng dần, được mô tả trong bài đăng, Phím tăng dần và Thống kê tự động sửa nhanh. Ví dụ chi tiết về trường hợp này được cung cấp trong bài đăng của tôi Cờ theo dõi 2389 và Công cụ ước tính số lượng thẻ mới.
- Tùy chọn phiên bản 'Tự động cập nhật không đồng bộ số liệu thống kê' được giới thiệu. Lưu ý rằng để điều này có hiệu lực, tùy chọn 'Tự động cập nhật thống kê' cũng phải được bật. Nếu bạn không rõ tùy chọn này có tác dụng gì, hãy xem lại tài liệu trong Tùy chọn cài đặt cơ sở dữ liệu thay thế. Đây là cài đặt mà Glenn đề xuất (như đã lưu ý trong bài đăng của anh ấy được tham chiếu bên dưới), nhưng tôi nghĩ điều quan trọng là phải nhận thức được các vấn đề tiềm ẩn, như đã lưu ý trong Cách cập nhật tự động cho thống kê có thể ảnh hưởng đến hiệu suất truy vấn.
Lưu ý: Có một rò rỉ bộ nhớ liên quan đến cài đặt này trong SQL Server 2008 đến SQL Server 2012; vui lòng xem bài đăng của Glenn Bản vá lỗi quan trọng cho SQL Server 2008 để biết thêm chi tiết.
SQL Server 2008
- Thống kê đã lọc được giới thiệu và những thống kê này có thể được tạo riêng biệt với chỉ mục đã lọc. Có một số hạn chế xung quanh các chỉ mục được lọc liên quan đến Trình tối ưu hóa truy vấn (xem bài đăng của Tim Chapman Những điều đáng tiếc của chỉ mục được lọc và bài đăng của Paul White về Hạn chế của trình tối ưu hóa với chỉ mục được lọc) và điều quan trọng là phải hiểu hoạt động của bộ đếm theo dõi các sửa đổi (và do đó có thể kích hoạt cập nhật tự động). Xem bài đăng của Kimberly Chỉ mục được lọc và số liệu thống kê đã lọc có thể trở nên lỗi thời nghiêm trọng để biết thêm chi tiết và tôi cũng khuyên bạn nên xem quy trình được lưu trữ của cô ấy để phân tích dữ liệu lệch và đề xuất nơi bạn có thể tạo thống kê đã lọc để cung cấp thêm thông tin cho Trình tối ưu hóa truy vấn. Tôi đã triển khai điều này cho một số khách hàng lớn có VLT và phân phối lệch trên các cột thường được sử dụng trong các vị từ.
- Hai chế độ xem danh mục mới, sys.stats và sys.stats_columns, được thêm vào để cung cấp thông tin chi tiết dễ dàng hơn về thống kê và các cột được bao gồm. Sử dụng hai chế độ xem này thay vì sp_helpstats, chế độ này không được dùng nữa và cung cấp ít thông tin hơn.
SQL Server 2008R2 SP1
- Cờ theo dõi 2371 được cung cấp, có thể được sử dụng để giảm số lượng sửa đổi cần thiết để các thống kê tự động cập nhật xảy ra. Xin nhắc lại, tôi là người thích cập nhật số liệu thống kê một cách thường xuyên thông qua công việc đã lên lịch và để tính năng tự động cập nhật được bật như một sự an toàn.
SQL Server 2008R2 SP2
- Hàm sys.dm_db_stats_properties được bao gồm, cung cấp cùng một thông tin được tìm thấy trong tiêu đề của DBCC SHOW_STATISTICS, cũng như một cột sửa đổi có thể được sử dụng để theo dõi các thay đổi và xác định theo chương trình xem có cần cập nhật hay không. Hãy nhớ sở thích của tôi khi sử dụng một công việc để cập nhật số liệu thống kê? Công việc đó trở nên thông minh hơn rất nhiều với DMF này… bây giờ tôi có thể xem có bao nhiêu dữ liệu đã được sửa đổi và CHỈ cập nhật thống kê nếu một phần trăm dữ liệu nhất định đã thay đổi. Bóng bẩy.
SQL Server 2012
- Việc cập nhật thống kê sẽ không làm cho các kế hoạch bị vô hiệu NẾU không có hàng nào thay đổi. Đây là một điều khiến nhiều người ngạc nhiên và Kimberly có một bài đăng thú vị, Điều gì đã khiến kế hoạch đó trở nên sai lầm khủng khiếp - bạn có nên cập nhật số liệu thống kê không ?, trải qua cuộc phiêu lưu của cô ấy trong việc tìm ra điều này.
SQL Server 2012 SP1
- DBCC SHOW_STATISTICS chỉ yêu cầu quyền SELECT - trước đây quyền này yêu cầu người dùng phải là thành viên của sysadmin hoặc thành viên của vai trò cơ sở dữ liệu db_owner hoặc db_ddladmin. Điều này có thể bị vô hiệu hóa trên toàn cầu với cờ theo dõi 9485.
- Bao gồm sys.dm_db_stats_properties (xem ghi chú 2008R2 SP2 ở trên)
SQL Server 2012 SP2
- Bản cập nhật tích lũy 1 giới thiệu một bản sửa lỗi liên quan đến các khóa tăng dần không được xác định đúng cách ngay cả với các cờ theo dõi 2389 và 2390 đang được sử dụng. Điều này yêu cầu cờ theo dõi 4139 ngoài CU1, như được lưu ý trong KB 2952101.
SQL Server 2014
- Công cụ ước tính số lượng mới được giới thiệu, được triển khai bằng cách đặt chế độ tương thích cơ sở dữ liệu thành 120 hoặc bằng cách sử dụng cờ theo dõi 2312. Nếu bạn chưa đọc bất kỳ điều gì về CE mới, tôi khuyên bạn nên bắt đầu với tài liệu Ước tính số lượng và sau đó đọc Joe Sách trắng của Sack, Tối ưu hóa Kế hoạch Truy vấn của Bạn với Công cụ Ước tính Cardinality của SQL Server 2014, để biết chi tiết chuyên sâu.
- Hành vi từ Cờ theo dõi 2389 và 2390 cho các khóa tăng dần hiện được triển khai thông qua chế độ tương thích cơ sở dữ liệu. Nếu chế độ tương thích cơ sở dữ liệu của bạn được đặt thành 120 (hoặc cao hơn trong các bản phát hành mới hơn), bạn không cần sử dụng Dấu vết 2389 và 2390 cho SQL Server để xác định thống kê có khóa tăng dần.
- Số liệu thống kê tăng dần được giới thiệu cho các phân vùng và có thể được xem qua DMF sys.dm_db_incremental_stats_properties mới. Số liệu thống kê tăng dần cung cấp một cách để cập nhật số liệu thống kê cho một phân vùng mà không cần cập nhật chúng cho toàn bộ bảng. Tuy nhiên, thông tin thống kê bổ sung từ thống kê gia tăng không được Trình tối ưu hóa truy vấn sử dụng, nhưng nó được xếp vào biểu đồ chính cho bảng.
- CU2 bao gồm bản sửa lỗi tương tự được đề cập ở trên cho SQL Server 2012 SP2 cũng yêu cầu cờ theo dõi 4139.
SQL Server 2014 SP1
- Cờ theo dõi 7471 được chuyển tiếp sang CU6, ban đầu có sẵn trong SQL Server 2016 như đã lưu ý bên dưới.
SQL Server 2016
- Cờ theo dõi 2371 không còn cần thiết để giảm ngưỡng cập nhật tự động cho thống kê nếu chế độ tương thích cơ sở dữ liệu được đặt thành 130. Xem phần Kiểm soát hành vi Tự động đăng (AUTO_UPDATE_STATISTICS) trong SQL Server.
- Các cập nhật cho thống kê có thể chạy song song khi sử dụng SAMPLE, không chỉ FULLSCAN. Điều này được gắn với chế độ tương thích (phải là 130), nhưng có khả năng cung cấp các bản cập nhật nhanh hơn và do đó giảm thời gian bảo trì. Aaron Bertrand nói về cải tiến này trong bài đăng của mình, Một cải tiến tiềm năng cho các bản cập nhật thống kê:MAXDOP.
- Cờ theo dõi 7471 được giới thiệu trong CU1 để cho phép nhiều lệnh CẬP NHẬT THỐNG KÊ chạy đồng thời cho một bảng duy nhất và Jonathan cung cấp một số ví dụ tuyệt vời về cách có thể sử dụng điều này trong bài đăng của anh ấy. Hỗ trợ cải tiến cho xây dựng lại thống kê song song.
SQL Server 2016 SP1
- Tùy chọn gợi ý truy vấn ENABLE_HIST_AMENDMENT_FOR_ASC_KEYS được giới thiệu cùng với đối số FOR HINT, tương đương với cờ theo dõi 4139.
- Biểu đồ DMF sys.dm_db_stats_histogram được hiển thị trong CU2, là một thay thế cho kết quả biểu đồ từ DBCC SHOW_STATISTICS. Thông tin trong cả hai đều giống nhau, hãy sử dụng thông tin nào dễ dàng hơn cho bạn hoặc phù hợp hơn với vấn đề bạn cần giải quyết.
- Tùy chọn PERSIST_SAMPLE_PERCENT được giới thiệu trong CU4, có thể được sử dụng để buộc sử dụng cùng một tốc độ lấy mẫu mỗi khi thống kê được cập nhật về sau và bạn có thể tìm thấy các ví dụ về hành vi này trong bài đăng, Tốc độ lấy mẫu thống kê liên tục.
SQL Server 2017
- Tùy chọn PERSIST_SAMPLE_PERCENT có sẵn trong CU1 (xem mục nhập SP1 2016 để biết thêm thông tin).
- Các thuộc tính StatsInfoType và OptimizerStatsUsageType được thêm vào Kế hoạch truy vấn, liệt kê các thống kê được sử dụng trong quá trình tối ưu hóa truy vấn. Điều này có sẵn trong CU3 và được gắn với phiên bản CE (120 trở lên). Cái này hay đấy! Tôi chưa có cơ hội chơi với cái này, nhưng để có được thông tin này, trước đây bạn phải sử dụng cờ theo dõi không có giấy tờ.
- CU3 cũng giới thiệu tùy chọn MAXDOP để TẠO THỐNG KÊ và CẬP NHẬT THỐNG KÊ, có thể được sử dụng để ghi đè giá trị MAXDOP cho phiên bản hoặc cơ sở dữ liệu.
- Một bổ sung khác trong CU3:các thuộc tính UdfCpuTime và UdfElapsedTime có thể được tìm thấy trong Kế hoạch truy vấn, biểu thị thống kê thực thi cho các UDF có giá trị vô hướng.
Tóm tắt
Nếu bạn đang muốn nâng cấp lên bản phát hành mới hơn hoặc nếu bạn mới nâng cấp, hãy lưu ý xem những thay đổi này ảnh hưởng như thế nào đến giải pháp của bạn. Chúng tôi đã có nhiều khách hàng liên hệ với chúng tôi sau khi nâng cấp từ 2005/2008 / 2008R2 lên 2014 hoặc 2016, phàn nàn về các vấn đề hiệu suất. Trong nhiều trường hợp, việc kiểm tra đầy đủ không được hoàn thành trước khi nâng cấp.
Đây là điều chúng tôi thực sự chú trọng khi giúp khách hàng nâng cấp. Ngoài các bước để chuyển một phiên bản sản xuất từ phiên bản này sang phiên bản khác với ít thời gian ngừng hoạt động, chúng tôi muốn đảm bảo rằng ngày sau khi nâng cấp là một ngày nhàm chán đối với các DBA và nhà phát triển.
Chúng tôi không chỉ kiểm tra quá trình nâng cấp mà còn kiểm tra hệ thống trông như thế nào sau khi nâng cấp. Các cờ theo dõi tương tự từ môi trường cũ có cần thiết trong môi trường mới không? Những cài đặt cơ sở dữ liệu nào cần được điều chỉnh? Hiệu suất truy vấn có thay đổi - tốt hơn hay tệ hơn? Nếu bạn không biết câu trả lời cho những câu hỏi đó trước khi nâng cấp sản xuất, thì bạn đang chuẩn bị cho mình một đến nhiều ngày chữa cháy, cuộc gọi Sev 1, bữa ăn tại bàn làm việc, ngủ không đủ giấc và ai biết được điều gì khác .
Hãy dành thời gian trước để hiểu tác động của các tính năng mới và những thay đổi trong chức năng được liệt kê ở trên, lập kế hoạch nâng cấp và kiểm tra càng nhiều càng tốt.