Sao chép giao dịch không gửi tất cả các lệnh


7

Tôi có một cấu trúc liên kết nhân rộng giao dịch như sau:

NY Publication Database cùng một máy chủ giữ nhà phân phối

NY - Thuê bao
LON - Thuê bao
HK - Thuê bao

Chúng tôi đang sử dụng tiêu chuẩn bog, sao chép giao dịch một chiều. Tất cả các máy SQL 2008 R2

Ảnh chụp nhanh được áp dụng tốt cho tất cả các thuê bao, và sau đó bắt đầu phân phối các lệnh, như bạn mong đợi, nhưng chỉ với một thuê bao (London), toàn bộ 2000-4 triệu lệnh chỉ bị "kẹt". Bạn có thể thấy các lệnh trong msrepl_commands, bạn có thể thấy các giao dịch trong msrepl_transaction. Màn hình sao chép cho thấy có các lệnh xxxxx chưa được gửi. Tất cả các lệnh đang được gửi mà không có vấn đề cho 2 thuê bao khác.

Vấn đề là họ chỉ ở đó. Giám sát nhân rộng nói rằng không có gì để được sao chép, và không có gì xảy ra, họ chỉ ở lại nơi họ đang ở. Cách duy nhất tôi tìm thấy xung quanh nó, đó là phá bỏ đăng ký và khởi tạo lại!?!

Tôi biết rằng có những "cú hích" mạng giữa NY và Lon, và tôi có thể thấy trong msrepl_errors, rằng có một số lỗi giao tiếp. Tuy nhiên, tôi sẽ mong đợi nhân rộng để chọn chúng sao lưu? Các đại lý phân phối đang chạy tốt.

Làm cách nào để khắc phục sự cố này và buộc SQL Server chọn các lệnh này và phân phối chúng.

Câu trả lời:


1

Kiểm tra đầu ra của sp_helpsubscriptionerrors. Một vấn đề tôi đã thấy là với các lệnh DDL; chúng được xử lý khác nhau trong sao chép vì vậy nếu thay đổi lược đồ thủ công được thực hiện cho Nhà xuất bản, đôi khi chúng có thể thất bại. Cũng có thể có các lệnh DML cụ thể không thành công trên thuê bao do sự không nhất quán trong giao dịch. Nếu đây là trường hợp, bạn có thể sử dụng hồ sơ đại lý phân phối có tên "Tiếp tục lỗi liên tục dữ liệu" sẽ bỏ qua khóa trùng lặp và các lỗi khác.

Độ trễ có thể gây ra vấn đề (theo MS, độ trễ và thông lượng là những yếu tố quan trọng nhất trong sao chép giao dịch); bạn có thể theo dõi điều đó với sp_posttracertoken. Cả hai tác nhân Log Reader và phân phối đều có các tham số có thể được điều chỉnh để bù cho điều đó. Hãy thử hạ thấp các giá trị này, đặc biệt là trên Trình đọc nhật ký.

Đại lý phân phối (từ MSDN ):

MaxDeliveredTransilities Là số lượng giao dịch đẩy hoặc kéo tối đa được áp dụng cho Người đăng ký trong một đồng bộ hóa. Giá trị 0 chỉ ra rằng tối đa là số lượng giao dịch vô hạn. Các giá trị khác có thể được sử dụng bởi Người đăng ký để rút ngắn thời gian đồng bộ hóa được kéo từ Nhà xuất bản.

CommitBatchThrưỡng Là số lượng lệnh sao chép sẽ được cấp cho Người đăng ký trước khi đưa ra tuyên bố CAMIT . Mặc định là 1000.

Tác nhân đọc nhật ký (từ MSDN ):

MaxCmdsInTran Chỉ định số lượng câu lệnh tối đa được nhóm vào một giao dịch khi Trình đọc nhật ký ghi lệnh vào cơ sở dữ liệu phân phối. Sử dụng tham số này cho phép Tác nhân phân phối và Đại lý phân phối Log Reader chia các giao dịch lớn (bao gồm nhiều lệnh) tại Nhà xuất bản thành nhiều giao dịch nhỏ hơn khi được áp dụng tại Thuê bao. Chỉ định tham số này có thể giảm sự tranh chấp tại Nhà phân phối và giảm độ trễ giữa Nhà xuất bản và Người đăng ký. Do giao dịch ban đầu được áp dụng trong các đơn vị nhỏ hơn, Người đăng ký có thể truy cập vào các hàng của giao dịch Nhà xuất bản logic lớn trước khi kết thúc giao dịch ban đầu, phá vỡ tính nguyên tử giao dịch nghiêm ngặt. Mặc định là 0, duy trì ranh giới giao dịch của Nhà xuất bản.

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.