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

Điểm kiểm tra cơ sở dữ liệu trong SQL Server

Trong bài viết này, chúng ta sẽ nói về các Điểm kiểm tra SQL Server.

Để nâng cao hiệu suất, SQL Server áp dụng các sửa đổi cho các trang cơ sở dữ liệu trong bộ nhớ. Thông thường, bộ nhớ này được gọi là bộ đệm đệm hoặc vùng đệm. SQL Server không chuyển các trang này vào đĩa sau mỗi lần thay đổi. Thay vào đó, công cụ cơ sở dữ liệu thực hiện hoạt động điểm kiểm tra trên mỗi cơ sở dữ liệu theo thời gian. CHECKPOINT hoạt động ghi các trang bẩn (các trang được sửa đổi trong bộ nhớ hiện tại) và cũng ghi chi tiết về nhật ký giao dịch.

SQL Server hỗ trợ bốn loại điểm kiểm tra:

1. Tự động - Loại điểm kiểm tra này xảy ra ở hậu trường và phụ thuộc vào cấu hình máy chủ khoảng thời gian khôi phục. Giá trị được đo bằng phút và giá trị mặc định là 1 phút (không thể đặt thấp hơn). Điểm kiểm tra sẽ hoàn thành trong thời gian giảm thiểu tác động đến hiệu suất.

EXEC sp_configure 'recovery interval', 'seconds'

Trong mô hình khôi phục SIMPLE, một điểm kiểm tra tự động cũng được kích hoạt khi nhật ký giao dịch đầy 70%.

2. Gián tiếp - Loại điểm kiểm tra này cũng xảy ra ở hậu trường theo cài đặt thời gian khôi phục cơ sở dữ liệu do người dùng chỉ định. Bắt đầu từ SQL Server 2016 CTP2, giá trị mặc định cho loại điểm kiểm tra này là 1 phút. Nó có nghĩa là một cơ sở dữ liệu sẽ sử dụng các trạm kiểm soát gián tiếp. Đối với các phiên bản SQL Server cũ hơn, mặc định là 0. Điều này có nghĩa là cơ sở dữ liệu sẽ sử dụng các điểm kiểm tra tự động, có tần suất phụ thuộc vào cài đặt khoảng thời gian khôi phục của phiên bản SQL Server. Microsoft khuyến nghị 1 phút cho hầu hết các hệ thống.

ALTER DATABASE … SET TARGET_RECOVERY_TIME =
target_recovery_time { SECONDS | MINUTES }

Khi thiết lập điều này, hãy xem xét các khả năng của hệ thống con I / O cơ bản. Có thể hợp lý khi đặt để đặt mức này thấp hơn cho các hệ thống con I / O nhanh hơn (ví dụ:SSD). Hãy cẩn thận, cài đặt này vẫn tồn tại thông qua quá trình sao lưu và khôi phục, vì vậy việc khôi phục về phần cứng chậm hơn có thể gây ra các vấn đề về hiệu suất do tải quá nhiều I / O.

3. Hướng dẫn sử dụng - Xảy ra khi thực hiện lệnh T-SQL CHECKPOINT.

CHECKPOINT [ checkpoint_duration ]

checkpoint_duration là một số nguyên được sử dụng để xác định khoảng thời gian mà một điểm kiểm tra sẽ hoàn thành. Tham số này cũng điều chỉnh số lượng tài nguyên được chỉ định cho hoạt động của trạm kiểm soát. Nếu tham số không được chỉ định, điểm kiểm tra sẽ hoàn thành trong thời gian giảm thiểu tác động đến hiệu suất.

4. Nội bộ - Một số hoạt động của SQL Server đưa ra loại điểm kiểm tra này để đảm bảo rằng hình ảnh đĩa khớp với trạng thái nhật ký giao dịch hiện tại. Đây là những điểm kiểm tra được thực hiện khi một hoạt động nhất định diễn ra:

  • Một tệp dữ liệu được thêm vào hoặc bị xóa
  • Cơ sở dữ liệu bị tắt (vì bất kỳ lý do gì)
  • Một bản sao lưu hoặc ảnh chụp nhanh cơ sở dữ liệu được tạo
  • Lệnh DBCC được chạy để tạo ảnh chụp nhanh cơ sở dữ liệu ẩn (hoặc ví dụ:DBCC_CHECKDB, DBCC_CHECKTABLE).

Tại sao các trạm kiểm soát lại hữu ích?

Các điểm kiểm tra làm giảm thời gian khôi phục sự cố. Điều này xảy ra vì các trang tệp dữ liệu không được ghi vào đĩa cùng lúc với các bản ghi nhật ký. Có các trang tệp dữ liệu trong bộ nhớ được cập nhật nhiều hơn các trang tệp dữ liệu trên đĩa.

Các điểm kiểm tra giảm I / O vào đĩa và cải thiện hiệu suất. Lý do mà các trang tệp dữ liệu không được ghi vào đĩa tại thời điểm giao dịch cam kết là để giảm số lượng hoạt động I / O. Hãy tưởng tượng hàng ngàn giao dịch CẬP NHẬT cho một trang dữ liệu. Sẽ hiệu quả hơn nếu ghi một trang dữ liệu vào đĩa chỉ một lần, trong một lần kiểm tra, thay vì sau mỗi lần thay đổi.

Trang sạch và bẩn

Vùng đệm duy trì một số trang dữ liệu trong bộ nhớ. Có hai loại trang dữ liệu: sạch bẩn . Trang sạch là trang không bị thay đổi kể từ lần đọc cuối cùng từ đĩa hoặc được ghi vào đĩa. Trang bẩn là trang đã được thay đổi và các thay đổi chưa được ghi vào đĩa. Các trạm kiểm soát đề cập đến "các trang bẩn".

Bạn có thể xem thông tin về trang bằng cách sử dụng sys.dm_os_buffer_descriptors . Hãy xem hàm này trả về những gì:

SELECT
  *
FROM sys.dm_os_buffer_descriptors dobd;
GO

Mỗi trang có một cấu trúc điều khiển được liên kết với nó để theo dõi trạng thái trang:

  • Cơ sở dữ liệu có datdabase_id 32767 là Cơ sở dữ liệu tài nguyên chỉ đọc chứa tất cả các đối tượng hệ thống.
  • file_id , page_id , phân bổ_unit_id trang đó thuộc về.
  • Đây là loại trang gì:trang dữ liệu hoặc trang chỉ mục.
  • Số lượng hàng trên trang.
  • Dung lượng trống trên trang
  • Trang có bẩn hay không
  • numa_node mà trang cụ thể thuộc về
  • Một số thông tin về thuật toán được sử dụng gần đây nhất

Hãy tổng hợp thông tin này bằng cơ sở dữ liệu sử dụng mã sau:

SELECT
  *,
  [DirtyPageCount] * 8 / 1024 AS [DirtyPageMB],
  [CleanPageCount] * 8 / 1024 AS [CleanPageMB]
FROM (SELECT
  (CASE
    WHEN ([database_id] = 32767) THEN N'Resource Database'
    ELSE DB_NAME([database_id])
  END) AS [DatabaseName],
  SUM(CASE
    WHEN ([is_modified] = 1) THEN 1
    ELSE 0
  END) AS [DirtyPageCount],
  SUM(CASE
    WHEN ([is_modified] = 1) THEN 0
    ELSE 1
  END) AS [CleanPageCount]
FROM sys.dm_os_buffer_descriptors
GROUP BY [database_id]) AS [buffers]
ORDER BY [DatabaseName]
GO

Cơ chế điểm kiểm tra

Khi điểm kiểm tra xảy ra, nó sẽ ghi tất cả các trang bẩn vào đĩa. Các trang được đánh dấu là bẩn ngay sau khi có một số thay đổi. Không quan trọng việc giao dịch thực hiện thay đổi được cam kết hay không được cam kết tại thời điểm kiểm tra. Sau khi các trang đã được ghi vào đĩa, bit "bẩn" sẽ bị xóa. Khi trạm kiểm soát xảy ra, các hành động sau sẽ diễn ra:

  • Bản ghi nhật ký mới cho biết điểm bắt đầu của một điểm kiểm tra
  • Các bản ghi nhật ký bổ sung xuất hiện cùng với thông tin điểm kiểm tra (như trạng thái của nhật ký giao dịch tại thời điểm điểm kiểm tra được khởi động)
  • Tất cả các trang bẩn đều được ghi vào đĩa
  • Đánh dấu LSN của điểm kiểm tra trong trang khởi động cơ sở dữ liệu (trong dbi_checkptLSN), điều này rất quan trọng để khôi phục sự cố
  • Nếu sử dụng mô hình khôi phục SIMPLE, hãy thử xóa nhật ký
  • Bản ghi nhật ký cuối cùng cho biết rằng điểm kiểm tra đã hoàn thành

Có thể xảy ra song song các trạm kiểm soát của nhiều cơ sở dữ liệu. SQL Server 2000 được giới hạn ở một điểm kiểm tra tại một thời điểm. Khi trình quản lý bộ đệm viết một trang, nó sẽ tìm kiếm các trang bẩn liền kề có thể được đưa vào một thao tác ghi tập hợp duy nhất. Ngoài ra, vùng đệm sẽ cố gắng đảm bảo rằng nó không làm quá tải hệ thống phụ I / O. Nó theo dõi mất bao lâu để I / O hoàn thành. Nếu độ trễ ghi vượt quá 20 ms trong khi kiểm tra, nó sẽ tự điều chỉnh. Trong quá trình tắt máy, ngưỡng điều chỉnh tăng lên 100 ms. Bạn có thể tìm thấy một lời giải thích chi tiết hơn ở đây. Bạn có thể sử dụng tùy chọn khởi động “-kXX” không có giấy tờ để đặt tốc độ I / O của trạm kiểm soát ở XX MB / s.

Khi trang tệp dữ liệu được ghi vào đĩa bởi một điểm kiểm tra, ghi nhật ký ghi trước đảm bảo rằng tất cả các bản ghi nhật ký ảnh hưởng đến trang đó trước tiên phải được ghi vào nhật ký giao dịch trên đĩa. Tất cả các bản ghi nhật ký cho đến và bao gồm cả bản ghi cuối cùng ảnh hưởng đến trang đều được viết ra, bất kể chúng là một phần của giao dịch nào. Bản ghi nhật ký được viết ra theo ba cách:

  • Khi bất kỳ giao dịch nào được thực hiện hoặc hủy bỏ
  • Khi trang tệp dữ liệu được ghi vào đĩa
  • Khi khối nhật ký đạt đến kích thước tối đa là 60KB và buộc phải kết thúc

Bản ghi nhật ký trạm kiểm soát

Các điểm kiểm tra ghi nhiều bản ghi nhật ký vào nhật ký giao dịch:

  • LOP_BEGIN_CKPT - biểu thị rằng trạm kiểm soát đã bắt đầu
  • LOP_XACT_CKPT với ngữ cảnh NULL (chỉ khi có các giao dịch chưa được cam kết tại thời điểm điểm kiểm tra bắt đầu) - chứa số lượng các giao dịch chưa được cam kết. Nó cũng liệt kê các LSN của bản ghi nhật ký LOP_BEGIN_XACT của các giao dịch không được cam kết.
  • LOP_BEGIN_CKPT với ngữ cảnh LOP_BOOT_PAGE_CKPT (chỉ dành cho SQL Server 2012) - biểu thị rằng trang khởi động đã được cập nhật.
  • LOP_END_CKPT - biểu thị sự kết thúc của trạm kiểm soát.

Giám sát trạm kiểm soát

Có thể hữu ích nếu so sánh các điểm kiểm tra xảy ra với các đột biến trong I / O để có thể thực hiện các thay đổi đối với cơ sở dữ liệu cụ thể (đối với hệ thống con I / O) để giảm bớt sự đột biến I / O nếu nó làm quá tải hệ thống con I / O. Ví dụ:thực hiện các điểm kiểm tra thủ công, thường xuyên hơn hoặc định cấu hình khoảng thời gian khôi phục thấp hơn trên SQL Server 2012 với các điểm kiểm tra gián tiếp. Điều này sẽ tạo ra tải I / O liên tục hơn mà không có mức tăng đột biến cao làm quá tải hệ thống phụ I / O. Tuy nhiên, nguyên nhân gốc rễ có thể là do I / O được thực hiện nhiều hơn do có sự thay đổi ở đâu đó, vì vậy đừng chỉ chấp nhận sự gia tăng đột ngột của hoạt động trạm kiểm soát mà không tìm hiểu lý do tại sao nó xảy ra.

Trình quản lý bộ đệm / Bộ đếm trang / giây của Checkpoint không phải là cơ sở dữ liệu cụ thể, vì vậy việc xác định cơ sở dữ liệu nào có liên quan yêu cầu cờ theo dõi hoặc sự kiện mở rộng.

Cờ theo dõi 3502 ghi thông báo vào nhật ký lỗi về điểm kiểm tra cơ sở dữ liệu nào đang xảy ra.

Cờ theo dõi 3504 viết thông tin chi tiết hơn về số lượng trang đã được viết ra và độ trễ ghi trung bình.

Những dấu vết này an toàn để sử dụng trong sản xuất đối với một loại vôi hạn chế. Tất cả những gì họ làm là in thông báo trong nhật ký lỗi.

Nếu bạn muốn sử dụng các sự kiện mở rộng, có hai sự kiện bạn có thể sử dụng:checkpoint_begin và checkpoint_end.

Tóm tắt

Trong bài viết này, chúng ta đã nói về các điểm kiểm tra trong SQL Server - cơ chế chính để ghi các trang tệp dữ liệu vào đĩa sau khi chúng đã được thay đổi.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tự động tạo các cột sql

  2. Kết nối MSSQL CodeIgniter

  3. Cách sử dụng Từ dừng và Danh sách dừng để cải thiện Tìm kiếm toàn văn bản (FTS) của SQL Server

  4. Tham gia loại bỏ:Khi máy chủ SQL loại bỏ các bảng không cần thiết

  5. Chuyển đổi văn bản hộp văn bản thành số nguyên