cân nhắc khi sử dụng kích hoạt trên cơ sở dữ liệu nhân rộng (đích)


8

Cơ sở dữ liệu ứng dụng SQL Sever 2008 của chúng tôi được sao chép từ Máy chủ A sang Máy chủ B (sao chép đẩy). Chúng tôi sử dụng bản sao, hãy gọi nó là cơ sở dữ liệu_b, trên Máy chủ B để tạo báo cáo và chạy các truy vấn khác để báo cáo của chúng tôi không can thiệp vào ứng dụng. Hiện tại, chúng tôi tận dụng các chế độ xem không hiệu quả để kết hợp dữ liệu trên nhiều bảng trong cơ sở dữ liệu_b để việc viết báo cáo được đơn giản hóa cho người viết báo cáo của chúng tôi (những người có các kỹ năng SQL cơ bản).

99,9% hoạt động của cơ sở dữ liệu là INSERTS, vì vậy chúng tôi đang khám phá một cách để thay thế các khung nhìn không hiệu quả bằng các bảng mà chúng tôi có thể tối ưu hóa. Đây là một ví dụ đơn giản:

Có một appointmentbảng và một bảng location(tra cứu). Mỗi khi một cuộc hẹn mới được lên lịch, một hàng được thêm vào appointmentbảng. Mỗi lần XÁC NHẬN này xảy ra, tôi muốn lấy nó appointment_idvà chèn nó và tên vị trí tương ứng của nó (nối location_idtừ cả hai bảng) vào một bảng báo cáo.

Tôi đã thực hiện điều này với một kích hoạt trên bảng cuộc hẹn trong cơ sở dữ liệu_b trên Máy chủ B.

Câu hỏi của tôi là - có bất kỳ cân nhắc cụ thể nào được đưa ra rằng cơ sở dữ liệu_b là bản sao được sao chép không? Tôi có cần phải lo lắng về việc một trình kích hoạt thất bại làm hỏng toàn bộ quá trình sao chép (đẩy) không? Bất cứ điều gì khác tôi đang thiếu?

Thật không may, rất khó để kiểm tra điều này trong môi trường phát triển của chúng tôi, vì vậy tôi không có cơ hội cho nhiều thử nghiệm và sai sót.


bạn sẽ có thể tạo một ấn phẩm trên máy chủ dev của mình và sau đó tạo cơ sở dữ liệu đăng ký với một tên khác để bạn có thể kiểm tra trên cùng một máy chủ. Tôi đã không làm điều này cá nhân vì vậy YMMV.
DForck42

tạo một thể hiện khác trên máy chủ dev của bạn để sao chép cho mục đích dev. Sau đó, bạn có thể kiểm tra đi!
Max Vernon

Cảm ơn phản hồi của bạn, các bạn, nhưng tôi không thể làm điều đó vì lý do tại sao làm việc. Đó là những gì nó được. Và ngay cả khi tôi có thể kiểm tra nó, tôi vẫn sẽ đặt câu hỏi. :)
JHFB

Nó phụ thuộc vào loại trình kích hoạt - nếu bạn sử dụng trình kích hoạt chèn sau, bạn sẽ ổn - tuy nhiên, tôi sẽ đặt logic kích hoạt của bạn vào khối thử / bắt. Bằng cách đó, nếu có lỗi với phần chèn của bạn, bạn biết rằng bảng đã tạo của bạn không đồng bộ. Cũng cần lưu ý rằng với sao chép, khi bạn cần khởi tạo lại, có thể bạn sẽ cần tạo lại trình kích hoạt của mình - tất nhiên điều này phụ thuộc vào cách bạn khởi tạo lại. Một tùy chọn khác, sẽ là viết một Proc được lưu trữ đơn giản để di chuyển / tạo dữ liệu này cho bạn một khoảng thời gian đã đặt - tức là cứ sau 10 phút.
Jeremy Lowell

.... Tùy chọn (tốt) cuối cùng cũng sẽ sử dụng SSIS cho việc này - các tùy chọn đó tuy nhiên tất cả phụ thuộc vào mức độ trễ của dữ liệu - nếu báo cáo có thể hoạt động với dữ liệu cũ 10 hoặc 15 phút, sau đó viết một quá trình bên ngoài sử dụng một cách tiếp cận dựa trên kích hoạt sẽ là tùy chọn mà cá nhân tôi nhắm mục tiêu đầu tiên.
Jeremy Lowell

Câu trả lời:


7

Điều này nghe có vẻ như là một tình huống tuyệt vời để sử dụng các khung nhìn được lập chỉ mục. Đây là khá nhiều những gì họ nghe giống như: một khung nhìn lưu trữ kết quả của nó trong cơ sở dữ liệu và được cập nhật tự động khi các bảng cơ sở được cập nhật.

Một vài cảnh báo:

  • Có rất nhiều trong số này trong cơ sở dữ liệu đăng ký của bạn có thể làm chậm sự sao chép (nhưng cũng có thể có rất nhiều kích hoạt).
  • Có một số tùy chọn SET nghiêm ngặt bạn cần thay đổi để tạo chúng và bạn phải sử dụng VỚI SCHEMABINDING khi tạo chế độ xem.
  • Có những yêu cầu nghiêm ngặt bổ sung về những gì có thể trong quan điểm của bạn. Ví dụ: bạn không thể sử dụng các phép nối ngoài, tổng hợp hoặc áp dụng chéo / ngoài.
  • Nếu bạn đang sử dụng Phiên bản Chuẩn, bạn cần truy vấn chế độ xem theo tên bằng gợi ý VỚI (NOEXPAND). Máy chủ SQL sẽ không tự động sử dụng chế độ xem nếu bạn cố truy vấn các bảng cơ sở của nó.

Có (rất nhiều) chi tiết hơn trong bài viết này, cũng như một ví dụ hay sử dụng cơ sở dữ liệu AdventureWorks:
http://msdn.microsoft.com/en-us/l Library / ms191432% 28v = sql.100% 29.aspx

Nếu đó là một truy vấn tương đối đơn giản chỉ hoạt động kém do có nhiều dữ liệu và (bên trong) tham gia, thì đây có thể là một cách dễ dàng để cải thiện nó.


Đây là một lựa chọn hấp dẫn và tôi sẽ khám phá ngày hôm nay. Để làm rõ viên đạn đầu tiên của bạn - nó có thể làm chậm sự sao chép vì dữ liệu phải được ghi vào chỉ mục được tạo trên khung nhìn không?
JHFB

Hóa ra đây không phải là một tùy chọn do OUTER THAM GIA trong câu lệnh CHỌN. :(
JHFB

Bummer! Và để làm rõ, vâng, chi phí của việc ghi dữ liệu vào chế độ xem là điều sẽ làm chậm nó. Nhưng dù sao bạn cũng sẽ làm điều này trong các trình kích hoạt, vì vậy sự khác biệt về hiệu suất có thể sẽ tương đương.
db2

0

Tôi khuyên bạn nên khám phá các tùy chọn sau nếu bạn chưa thực hiện điều đó

  1. Tuyên truyền thông qua các thủ tục lưu trữ tùy chỉnh. Bạn có thể có logic kích hoạt trong tùy chỉnh này. Nhưng nhược điểm là Người đăng ký và Nhà xuất bản của bạn được ghép nối. http://msdn.microsoft.com/en-us/l Library / ms147880 (v = sql.105) .aspx

  2. Chỉ định rằng thay đổi sẽ được lan truyền bằng cách sử dụng câu lệnh INSERT, UPDATE hoặc DELETE và có trình kích hoạt.

Tùy chọn này có thể tăng tốc độ sao chép nếu nhiều hàng được cập nhật / chèn bằng một câu lệnh.

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.