Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cập nhật thống kê SQL Server bằng cách sử dụng kế hoạch bảo trì cơ sở dữ liệu

Sao lưu cơ sở dữ liệu, kiểm tra tính toàn vẹn và tối ưu hóa hiệu suất là những nhiệm vụ thường xuyên cốt lõi của DBA. Dữ liệu máy khách rất quan trọng đối với DBA để quản lý việc sao lưu cơ sở dữ liệu và đảm bảo tính toàn vẹn của các bản sao lưu. Vì vậy, nếu có sự cố xảy ra với cơ sở dữ liệu sản xuất, nó có thể được khôi phục với thời gian ngừng hoạt động tối thiểu. Việc kiểm tra tính toàn vẹn của cơ sở dữ liệu cũng rất quan trọng vì trong trường hợp cơ sở dữ liệu bị hỏng, nó có thể được sửa chữa với thời gian chết và mất dữ liệu tối thiểu. Quản lý hiệu suất cơ sở dữ liệu cũng rất quan trọng. Quản lý hiệu suất cơ sở dữ liệu là sự kết hợp của nhiều tác vụ.

  1. Xác định danh sách các truy vấn sử dụng nhiều tài nguyên và giúp các nhà phát triển viết lại chúng.
  2. Tạo và quản lý các chỉ mục trên bảng. Ngoài ra, hãy thực hiện chống phân mảnh chỉ mục để đảm bảo chúng vẫn ở trạng thái tốt.
  3. Cuối cùng là quản lý số liệu thống kê của các bảng.

Trong bài viết trước, tôi đã đề cập đến chủ đề Tự động tạo thống kê và Thống kê tự động cập nhật và cách chúng có thể giúp cải thiện hiệu suất. Trong bài viết này, tôi sẽ giải thích cách tạo và lập lịch kế hoạch bảo trì để cập nhật số liệu thống kê.

Trước tiên, hãy để tôi giải thích thống kê SQL Server là gì và nó có thể giúp tăng hiệu suất của máy chủ SQL như thế nào.

Thống kê máy chủ SQL và tầm quan trọng của chúng

Thống kê là siêu dữ liệu được sử dụng bởi trình tối ưu hóa truy vấn SQL Server, giúp xác định cách tốt nhất để truy xuất dữ liệu. Trình tối ưu hóa sử dụng thống kê để hiểu dữ liệu, sự phân phối của nó và số hàng mà một truy vấn nhất định có thể trả về từ các thống kê có sẵn. Dựa trên thông tin này, nó quyết định đường dẫn truy cập dữ liệu tối ưu. Nó cũng xác định xem có thực hiện quét bảng hay tìm kiếm chỉ mục, sử dụng phép nối vòng lặp lồng nhau hay phép nối băm, v.v.

Nếu số liệu thống kê đã lỗi thời hoặc nếu chúng không có sẵn, trình tối ưu hóa có thể chọn kế hoạch thực thi kém, điều này làm giảm đáng kể hiệu suất truy vấn. SQL Server có thể tự động duy trì số liệu thống kê và làm mới chúng dựa trên việc theo dõi các sửa đổi dữ liệu.

Thống kê có thể được tạo và cập nhật tự động bằng cách bật “Tự động tạo thống kê” và “Thống kê tự động cập nhật”. Tuy nhiên, đối với một số bảng, chẳng hạn như những bảng có thay đổi đáng kể trong phân phối dữ liệu, có thể cập nhật thống kê tự động của SQL Server sẽ không đủ để duy trì mức hiệu suất truy vấn cao nhất quán.

Trước khi tôi giải thích các cách tiếp cận khác nhau để cập nhật thống kê, hãy để tôi giải thích các cách khác nhau để xem lại thống kê được tạo trên bất kỳ bảng nào.

Cách xem lại thống kê

Chúng tôi có thể xem thống kê cột và thống kê chỉ mục

  1. Sử dụng SQL Server Management Studio.
  2. Sử dụng các thủ tục được lưu trữ trong Hệ thống và danh mục hệ thống cũng như các chế độ xem quản lý động

Xem thống kê bằng SQL Server Management Studio

Ví dụ:tôi muốn xem thống kê được tạo trên [Nguồn nhân lực]. [Nhân viên] bảng được tạo trong AdventureWorks2017 cơ sở dữ liệu. Để làm điều đó, hãy khởi chạy SQL Server Management Studio. Sau đó, mở rộng AdventureWorks2017 cơ sở dữ liệu, mở rộng [Nguồn nhân lực]. [Nhân viên] bàn. Xem hình ảnh sau:

Sử dụng các thủ tục được lưu trữ trong Hệ thống và các chế độ xem quản lý động

Nếu bạn đang sử dụng phiên bản SQL Server cũ hơn, bạn có thể sử dụng sp_helpstats thủ tục hệ thống để xem xét số liệu thống kê của các bảng. sp_helpstats sẽ hiển thị thống kê do SQL Server hoặc người dùng tạo. Nó sẽ không hiển thị các thống kê được tạo bởi Index. Để chứng minh điều đó, tôi đã tạo một thống kê có tên User_St Statistics_BirthDate trên [Nguồn nhân lực]. [Nhân viên] bảng.

Sau đây là ví dụ:

USE ADVENTUREWORKS2017 
GO
EXEC SP_HELPSTATS 
  'HUMANRESOURCES.EMPLOYEE'

Sau đây là đầu ra.

Bạn có thể xem lại thống kê bằng cách truy vấn sys.stats danh mục hệ thống. Nó cung cấp thông tin về thống kê được tạo bởi SQL Server, được tạo bởi chỉ mục và được tạo bởi người dùng.

Thực hiện truy vấn sau:

SELECT NAME         AS 'STATISTICS NAME', 
       AUTO_CREATED AS 'CREATED AUTOMATICALLY', 
       USER_CREATED AS 'CREATED BY USER' 
FROM   SYS.STATS 
WHERE  OBJECT_ID = OBJECT_ID('HUMANRESOURCES.EMPLOYEE')

Sau đây là kết quả:

Bây giờ, hãy tham gia bảng này với các danh mục hệ thống khác để nhận thông tin chi tiết về thống kê. Để làm điều đó, hãy thực hiện truy vấn sau:

SELECT [SCHEMAS].[NAME] + '.' + [OBJECTS].[NAME] AS [TABLE_NAME], 
       [INDEXES].[INDEX_ID]                      AS [INDEX ID], 
       [STATS].[NAME]                            AS [STATISTIC], 
       STUFF((SELECT ', ' + [COLUMNS].[NAME] 
              FROM   [SYS].[STATS_COLUMNS] [STATS_COLUMN] 
                     JOIN [SYS].[COLUMNS] [COLUMNS] 
                       ON [COLUMNS].[COLUMN_ID] = [STATS_COLUMN].[COLUMN_ID] 
                          AND [COLUMNS].[OBJECT_ID] = [STATS_COLUMN].[OBJECT_ID] 
              WHERE  [STATS_COLUMN].[OBJECT_ID] = [STATS].[OBJECT_ID] 
                     AND [STATS_COLUMN].[STATS_ID] = [STATS].[STATS_ID] 
              ORDER  BY [STATS_COLUMN].[STATS_COLUMN_ID] 
              FOR XML PATH('')), 1, 2, '')       AS [COLUMNS_IN_STATISTIC] 
FROM   [SYS].[STATS] [STATS] 
       JOIN [SYS].[OBJECTS] AS [OBJECTS] 
         ON [STATS].[OBJECT_ID] = [OBJECTS].[OBJECT_ID] 
       JOIN [SYS].[SCHEMAS] AS [SCHEMAS] 
         ON [OBJECTS].[SCHEMA_ID] = [SCHEMAS].[SCHEMA_ID] 
       LEFT OUTER JOIN [SYS].[INDEXES] AS [INDEXES] 
                    ON [OBJECTS].[OBJECT_ID] = [INDEXES].[OBJECT_ID] 
                       AND [STATS].[NAME] = [INDEXES].[NAME] 
WHERE  [OBJECTS].[OBJECT_ID] = OBJECT_ID(N'HUMANRESOURCES.EMPLOYEE') 
ORDER  BY [STATS].[USER_CREATED] 

GO

Truy vấn ở trên điền các chi tiết sau

  1. Bảng mà số liệu thống kê được tạo.
  2. ID chỉ mục.
  3. Tên thống kê.
  4. Các cột được bao gồm trong thống kê.

Sau đây là kết quả:

Trong phần tiếp theo, tôi sẽ giải thích các cách khác nhau để cập nhật số liệu thống kê.

Các cách tiếp cận khác nhau để cập nhật số liệu thống kê

Chúng tôi có thể cập nhật số liệu thống kê theo những cách sau:

  1. Tạo kế hoạch bảo trì Máy chủ SQL.
  2. Tạo bằng cách sử dụng tập lệnh tùy chỉnh.
  3. Thực hiện thủ công lệnh thống kê cập nhật trên một bảng riêng lẻ.

Đầu tiên, tôi sẽ giải thích cách chúng tôi có thể tạo một kế hoạch bảo trì để cập nhật số liệu thống kê.

Tạo kế hoạch bảo trì máy chủ SQL để cập nhật thống kê

Bây giờ, trong bản demo này, chúng tôi sẽ tạo một kế hoạch bảo trì số liệu thống kê cập nhật để cập nhật số liệu thống kê. Kế hoạch bảo trì sẽ thực hiện các nhiệm vụ sau:

Đầu tiên Tạo một kế hoạch bảo trì. Để làm điều đó, hãy mở SQL Server Management Studio. Mở rộng phiên bản máy chủ SQL>> Thư mục quản lý>> Trong Quản lý, bấm chuột phải vào Kế hoạch bảo trì và chọn Kế hoạch bảo trì mới. Xem hình ảnh sau:

Kế hoạch bảo trì mới hộp thoại mở ra. Trong hộp, cung cấp tên của kế hoạch bảo trì và nhấp vào OK. Xem hình ảnh sau:

Trình thiết kế kế hoạch bảo trì mở ra. Trong hộp công cụ của trình thiết kế kế hoạch bảo trì, hãy kéo và thả “Nhiệm vụ thống kê cập nhật” trong cửa sổ trình thiết kế. Xem hình ảnh sau:

Bây giờ, hãy nhấp đúp vào Cập nhật tác vụ thống kê . Nhiệm vụ cập nhật thống kê hộp thoại mở ra. Trong hộp thoại, có các tùy chọn có thể được sử dụng để tùy chỉnh kế hoạch bảo trì. Xem hình ảnh sau:

Chúng tôi có thể tùy chỉnh các tùy chọn sau khi sử dụng Kế hoạch bảo trì thống kê cập nhật.

  1. Cập nhật số liệu thống kê của tất cả các đối tượng của một cơ sở dữ liệu cụ thể. Xem hình ảnh sau:
  2. Các đối tượng cụ thể của cơ sở dữ liệu đã chọn. Bạn có thể cập nhật số liệu thống kê của Tất cả các bảng và chế độ xem / Các bảng và chế độ xem cụ thể. Xem hình ảnh sau:

    Nếu chúng ta chọn Bảng hoặc Chế độ xem hơn SQL sẽ điền tên của các dạng xem hoặc bảng trong lựa chọn hộp thoại. Xem hình ảnh sau:
  3. Tùy chọn thứ ba là Cập nhật . Chúng tôi có thể cập nhật tất cả thống kê của bảng / chế độ xem hoặc chúng tôi có thể chọn chỉ cập nhật thống kê cột (thống kê được tạo trên các cột không được lập chỉ mục) hoặc chúng tôi có thể chọn Chỉ thống kê (thống kê được tạo bởi chỉ mục). Xem hình ảnh sau:
  4. Chúng tôi cũng có thể chọn kiểu quét của bất kỳ thống kê nào. Chúng tôi có thể chọn Quét toàn bộ hoặc Mẫu của một tỷ lệ phần trăm được chỉ định hoặc các hàng được chỉ định. Xem hình ảnh sau:

Bây giờ, như tôi đã đề cập, chúng tôi sẽ tạo một nhiệm vụ bảo trì sẽ cập nhật thống kê của tất cả các bảng trong AdventureWorks2017 cơ sở dữ liệu với quá trình quét toàn bộ. Vì vậy, hãy lựa chọn các phương án cho phù hợp. Sau khi tác vụ bảo trì được định cấu hình, nó sẽ giống như sau:

Khi nhiệm vụ bảo trì được định cấu hình đúng cách, hãy đóng hộp thoại thống kê cập nhật. Sau khi cấu hình, kế hoạch bảo trì sẽ giống như sau:

Sau khi kế hoạch bảo trì được tạo, hãy để chúng tôi lập lịch kế hoạch bảo trì. Để làm điều đó, hãy nhấp vào biểu tượng lịch đối diện với Mô tả cột. Xem hình ảnh sau:

Khi bạn nhấp vào nút lịch, một hộp thoại để định cấu hình lịch công việc sẽ mở ra. Xem hình ảnh sau:

Như tôi đã đề cập, kế hoạch bảo trì thống kê cập nhật của chúng tôi sẽ thực hiện vào 4:00 sáng Chủ Nhật hàng tuần. Vì vậy chúng tôi sẽ cấu hình lịch trình công việc cho phù hợp. Lên lịch công việc rất đơn giản. Sau khi bạn định cấu hình lịch biểu, hộp thoại sẽ giống như sau:

Sau khi một lịch trình thực thi được cấu hình, toàn bộ kế hoạch bảo trì sẽ giống như hình sau. Lưu kế hoạch bảo trì và đóng cửa sổ.

Bây giờ, chúng ta hãy chạy kế hoạch bảo trì này bằng cách thực thi Công việc SQL được tạo bởi kế hoạch bảo trì. Để mở SQL Jobs, hãy mở rộng SQL Server Agent và mở rộng Việc làm . Bạn có thể thấy Công việc SQL được tạo bởi kế hoạch bảo trì SQL. Bây giờ để thực hiện công việc, hãy nhấp chuột phải vào Cập nhật số liệu thống kê hàng tuần.Weekly.Subplan_1 và nhấp vào Bắt đầu công việc tại bước . Xem hình ảnh sau đây.

Sau khi hoàn thành công việc, bạn có thể thấy hộp thoại Thực hiện công việc thành công sau đây.

Tóm tắt

Trong bài viết này, tôi đã đề cập đến:

  1. Giải thích chi tiết về Thống kê máy chủ SQL và tầm quan trọng của nó.
  2. Các tùy chọn khác nhau để cập nhật số liệu thống kê.
  3. Một ví dụ hoạt động về việc tạo kế hoạch Bảo trì SQL để cập nhật số liệu thống kê.

Trong bài viết tiếp theo của tôi, tôi sẽ giải thích các lệnh T-SQL khác nhau để cập nhật số liệu thống kê. Hơn nữa, tôi sẽ giải thích về T-SQL Script sẽ cập nhật thống kê dựa trên khối lượng thay đổi dữ liệu xảy ra sau khi chèn / cập nhật / xóa xảy ra trên bảng.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tính tổng số giờ đi lại giữa thành phố x, y và ngược lại

  2. Cách tách một chuỗi sau ký tự cụ thể trong SQL Server và cập nhật giá trị này vào cột cụ thể

  3. DATALENGTH () trong SQL Server là gì?

  4. T-SQL lấy số ngày làm việc giữa 2 ngày

  5. Cách cài đặt sqlcmd &bcp trên SUSE