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 parallelism
nhưng hãy nhớ rằng đây không phải là sự 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 MAXDOP
gợ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
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
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ị đổ.
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.
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à
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
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í.
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