Sao lưu dự phòng - Điều gì xảy ra khi một công việc sao lưu đang chạy - về mặt khóa và chi phí hiệu năng trong SQL Server?


13

Đối với MySQL Tôi biết cơ sở dữ liệu được sao lưu từng bảng trong Báo cáo SQL, điều này dẫn đến việc khóa và nếu bạn cập nhật các cột trong khi sao lưu, bạn có thể gặp phải các vấn đề về tính toàn vẹn.

Theo hiểu biết của tôi, điều này không áp dụng cho Microsoft SQL Server, nhưng SQL Server xử lý việc này như thế nào? Có một số đóng băng nội bộ để giữ db nhất quán?

Ngoài ra tôi nghe nói rằng sao lưu là một luồng có nghĩa là nó chỉ sử dụng một lõi, giả sử bạn sao lưu vào một tệp duy nhất. Ngoài ra, giả sử bạn có một máy đa lõi, ví dụ 16 lõi hoặc ít nhất là một số lượng lớn hơn đáng kể so với một.

Từ kinh nghiệm cá nhân của tôi, tôi không bao giờ gặp vấn đề khi thực hiện sao lưu, không khóa cũng không phải vấn đề trên cao, nhưng kinh nghiệm của tôi bị hạn chế. Đó là lý do tại sao tôi luôn khuyên bạn nên bật nén sao lưu trong thuộc tính máy chủ.

Vậy điều gì xảy ra khi một công việc sao lưu đang chạy? Và cũng có sự khác biệt đáng kể cho các phiên bản khác nhau? ví dụ 2008,2012 và 2014 (không phải giấy phép).


4
Bài viết này của Paul Randall là một khởi đầu tuyệt vời cho thông tin về các bản sao lưu technet.microsoft.com/en-us/magazine/2009.07.sqlbackup.aspx
James Anderson

Câu trả lời:


9

Tất cả các điểm của bạn được bao phủ trong các huyền thoại dự phòng - bởi Paul Randal

30-01) hoạt động sao lưu gây ra chặn

Không. Hoạt động sao lưu không mất khóa trên các đối tượng người dùng . Sao lưu gây ra tải đọc thực sự nặng trên hệ thống con I / O nên có thể có vẻ như khối lượng công việc đang bị chặn, nhưng thực sự không phải vậy. Nó chỉ bị chậm lại. Có một trường hợp đặc biệt trong đó một bản sao lưu phải nhận các khu vực được ghi nhật ký hàng loạt sẽ bị khóa tệp có thể chặn hoạt động của điểm kiểm tra - nhưng DML không bao giờ bị chặn.

Ngoài ra tôi nghe nói rằng sao lưu là một luồng có nghĩa là nó chỉ sử dụng một lõi, giả sử bạn sao lưu vào một tệp duy nhất.

Một bản sao lưu khi được thực hiện cho một tập tin hoặc thiết bị sẽ sử dụng 1 luồng văn bản. Vì vậy, nếu bạn đang sao lưu nhiều tệp / thiết bị (có thể là nhiều tệp .bak) sẽ có một luồng trình ghi cho mỗi tệp / thiết bị.

Cách dễ nhất để cải thiện hiệu suất sao lưu là cho phép hoạt động sao lưu song song, được gọi là phân vùng sao lưu. Theo mặc định, có một luồng trình đọc dữ liệu duy nhất cho mỗi ký tự ổ đĩa hoặc điểm gắn kết được đọc từ đó và một luồng trình ghi dữ liệu duy nhất cho mỗi thiết bị sao lưu được ghi vào.

Kiểm tra

  1. SQL Server 2008 Microsoft Certified Master (MCM) Các video sẵn sàng đặc biệt là Sao lưu dự phòng.
  2. Một cái nhìn về các bộ phận sao lưu và cách theo dõi thông lượng sao lưu và khôi phục (Phần 1) - Tác giả: Jonathan Kehayias
  3. Cái nhìn về các bộ phận sao lưu và cách theo dõi thông lượng sao lưu và khôi phục (Phần 2) - Tác giả: Jonathan Kehayias

7

Bài viết được viết bởi Paul liên quan đến nội bộ dự phòng là một bài tuyệt vời và bạn phải đọc nó. Thêm vào những gì người khác đã nói và nhấn mạnh vào phần cụ thể của câu hỏi của bạn

Ngoài ra tôi nghe nói rằng sao lưu là một luồng có nghĩa là nó chỉ sử dụng một lõi, giả sử bạn sao lưu vào một tệp duy nhất. Ngoài ra, giả sử bạn có một máy đa lõi, ví dụ 16 lõi hoặc ít nhất là một số lượng lớn hơn đáng kể so với một.

Hoạt động sao lưu can use parallelismnhưng hãy nhớ rằng đây không phảisự song song được điều khiển bởi Trình tối ưu hóa trong SQL Server, nó được điều khiển bởi số lượng đĩa liên quan từ nơi sao lưu phải đọc tệp dữ liệu và nơi sao lưu ghi tệp dữ liệu và số lượng tệp sao lưu được tạo.

Bạn không thể sử dụng MAXDOPgợi ý trong khi thực hiện sao lưu SQL Server

Bạn không thể tạo kế hoạch thực hiện trong SSMS cho hoạt động sao lưu TSQL đơn giản.

Tính song song được điều khiển bởi trình tối ưu hóa truy vấn trong SQL Server về cơ bản là dành cho các toán tử tham gia (thực ra nó phức tạp hơn nhưng vì đơn giản bạn có thể thực hiện điều này) vì hoạt động sao lưu không liên quan đến bất kỳ toán tử nào vì vậy nó không thể sử dụng song song được điều khiển bởi trình tối ưu hóa.

Tôi đã viết một bài viết trên Technet Wiki về Sao lưu và song song trong đó tôi đã sử dụng các ví dụ đơn giản để giải thích sự song song trong quá trình sao lưu SQL Server. Sau đây là kết luận

  1. Nếu các tệp cơ sở dữ liệu nằm trên nhiều đĩa, hoạt động sao lưu sẽ bắt đầu trên luồng trên mỗi ổ đĩa thiết bị để đọc dữ liệu. Theo cách tương tự, nếu khôi phục được thực hiện trên nhiều ổ đĩa / điểm gắn kết hoạt động sao lưu sẽ bắt đầu một luồng trên mỗi ổ đĩa / điểm gắn kết

  2. Ngay cả khi bạn đổ nhiều bản sao lưu trên cùng một ổ đĩa, chúng tôi sẽ có một luồng cho mỗi tệp sao lưu bị đổ.

  3. Sự song song liên quan đến sao lưu có liên quan đến các sọc. Mỗi sọc có luồng xử lý riêng của nó và đó thực sự là phần duy nhất của sao lưu / khôi phục mà người ta nên coi là các hoạt động song song.

  4. Mức độ song song tối đa không ảnh hưởng đến hoạt động sao lưu.

Tôi có một số ý kiến ​​chuyên gia về điều này từ Paul và Bob Dorr.

Vậy điều gì xảy ra khi một công việc sao lưu đang chạy? Và cũng có sự khác biệt đáng kể cho các phiên bản khác nhau? ví dụ 2008,2012 và 2014 (không phải giấy phép).

Tôi muốn đề nghị bạn đọc bài viết blog.msd này của Bob Dorr. Một số điểm quan trọng ông nhấn mạnh là

  1. Khi một bản sao lưu bắt đầu, nó tạo ra một loạt các bộ đệm, được phân bổ từ bộ nhớ bên ngoài vùng đệm. Mục tiêu thường là 4 MB cho mỗi bộ đệm dẫn đến khoảng 4 đến 8 bộ đệm. Chi tiết về tính toán được đặt tại: http://support.microsoft.com/kb/904804/en-us

  2. Bộ đệm được chuyển đổi giữa hàng đợi dữ liệu và miễn phí. Trình đọc kéo một bộ đệm miễn phí, điền nó với dữ liệu và đặt nó vào hàng đợi dữ liệu. Nhà văn kéo các bộ đệm dữ liệu đầy từ hàng đợi dữ liệu, xử lý bộ đệm và đưa nó trở lại danh sách miễn phí.

  3. Bạn nhận được một nhà văn trên mỗi thiết bị sao lưu, mỗi lần lấy từ hàng đợi dữ liệu. Vì vậy, một lệnh sao lưu với bốn (4) thông số kỹ thuật vào đĩa sẽ có bốn người viết và người đọc. Người đọc sử dụng I / O không đồng bộ để nó có thể theo kịp các nhà văn.

Bạn có thể kích hoạt trace flags 3213 and 3605, cả hai đều không có giấy tờ, vì vậy vui lòng sử dụng nó trên môi trường thử nghiệm và xem thông báo thú vị nào bị bỏ trong SQLlog errorlog. Một cái gì đó như dưới đây sẽ xuất hiện

Memory limit: 249MB
BufferCount:                7
Sets Of Buffers:            1
MaxTransferSize:            1024 KB
Min MaxTransferSize:        64 KB
Total buffer space:         7 MB
Tabular data device count:  1
Fulltext data device count: 0
Filestream device count:    0
TXF device count:           0
Filesystem i/o alignment:   512
Media Buffer count:            7
Media Buffer size:          1024KB

Tôi không biết về bất kỳ thay đổi đáng kể nào trong mã dự phòng cho các phiên bản khác nhau, những điều đó không được ghi lại. Tôi chỉ biết về cải tiến được giới thiệu trong SQL Server 2012 SP1 Cumulative Update 2,cho phép sao lưu và khôi phục từ dịch vụ lưu trữ Windows Azure Blob từ SQL Server bằng TSQL hoặc SMO. Đọc ở đây


4

Về cơ bản, SQL Server thực hiện một bản sao bẩn của tất cả các trang trên đĩa. Các trang đó có thể không nhất quán nếu có hoạt động đồng thời hoặc nếu trước đó có hoạt động không được kiểm tra.

Sau đó, SQL Server cũng sao chép phần cần thiết của nhật ký giao dịch cần thiết để đưa các trang lỗi thời lên phiên bản mới nhất và làm cho mọi thứ nhất quán khi khôi phục.

Tôi không thể nói đến tính đa luồng của hoạt động sao lưu. Tôi hy vọng nó sẽ được song song. Làm thế nào khác bạn có thể sao lưu cơ sở dữ liệu 10TB trên hệ thống con IO 10GB / giây?


Cảm ơn bạn usr cho câu trả lời, nhưng một số điều không rõ ràng. Điều gì xảy ra nếu tôi đã đặt mô hình khôi phục thành đơn giản hoặc chạy các câu lệnh như cắt ngắn trong công việc sao lưu. Điều đó không có nghĩa là máy chủ SQL không thể đưa điều này đến trạng thái nhất quán?
RayofCommand

Mô hình nhật ký hiệu quả trong quá trình sao lưu đã đầy. SQL Server cần có khả năng cuộn mọi thứ về phía trước, ngay cả khi bạn muốn SIMPLE. Các bảng rút gọn là một hoạt động được ghi lại và giao dịch, không có vấn đề ở đó. DDL là giao dịch.
usr
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.