Để đơn giản, các trình kích hoạt là cách để thực hiện bất kỳ loại theo dõi thay đổi cơ sở dữ liệu nào. Tuy nhiên, bạn cần lưu ý về những gì xảy ra dưới mui xe khi bạn sử dụng kích hoạt.
Theo Lập trình thủ tục lưu trữ của MySQL , trang 256 dưới phần đầu "Kích hoạt trên đầu" cho biết như sau:
Điều quan trọng cần nhớ là, do sự cần thiết, các trình kích hoạt sẽ thêm chi phí cho câu lệnh DML mà chúng áp dụng. lượng chi phí thực tế sẽ phụ thuộc vào bản chất của trình kích hoạt, nhưng --- vì tất cả các trình kích hoạt MySQL thực thi CHO MACHI ROW --- chi phí có thể nhanh chóng tích lũy cho các câu lệnh xử lý số lượng lớn hàng. Do đó, bạn nên tránh đặt bất kỳ câu lệnh SQL hoặc mã thủ tục đắt tiền nào trong các trình kích hoạt.
Một lời giải thích mở rộng về chi phí kích hoạt được đưa ra trên các trang 529-531. Điểm kết luận từ phần đó nêu sau:
Bài học ở đây là: vì mã kích hoạt sẽ thực thi một lần cho mỗi hàng bị ảnh hưởng bởi câu lệnh DML, nên trình kích hoạt có thể dễ dàng trở thành yếu tố quan trọng nhất trong hiệu suất DML. Mã bên trong thân trình kích hoạt cần phải nhẹ nhất có thể và - đặc biệt - mọi câu lệnh SQL trong trình kích hoạt phải được các chỉ mục hỗ trợ bất cứ khi nào có thể.
Không được đề cập trong cuốn sách là một yếu tố khác khi sử dụng kích hoạt: Khi nói đến ghi nhật ký kiểm toán, xin lưu ý về những gì bạn đăng nhập dữ liệu vào. Tôi nói điều này bởi vì nếu bạn chọn đăng nhập vào bảng MyISAM, mỗi INSERT vào bảng MyISAM sẽ tạo ra một khóa bảng đầy đủ trong suốt INSERT. Điều này có thể trở thành một nút cổ chai nghiêm trọng trong môi trường giao thông cao, giao dịch cao. Ngoài ra, nếu trình kích hoạt chống lại bảng InnoDB và bạn ghi nhật ký các thay đổi trong MyISAM từ bên trong trình kích hoạt, điều này sẽ bí mật vô hiệu hóa tuân thủ ACID (nghĩa là giảm các giao dịch chặn thành hành vi tự động), không thể quay ngược lại.
Khi sử dụng kích hoạt trên bảng InnoDB và ghi nhật ký thay đổi
- Bảng bạn đăng nhập cũng là InnoDB
- Bạn đã tắt autocommit
- Bạn thiết lập các khối GIAO DỊCH BẮT ĐẦU ... CAM KẾT / ROLLBACK triệt để
Theo cách này, nhật ký kiểm toán có thể được hưởng lợi từ CAMIT / ROLLBACK như các bảng chính.
Liên quan đến việc sử dụng các thủ tục được lưu trữ, bạn sẽ phải gọi một cách cẩn thận thủ tục được lưu trữ tại mọi điểm của DML đối với bảng được theo dõi. Người ta có thể dễ dàng bỏ lỡ các thay đổi đăng nhập khi đối mặt với hàng chục ngàn dòng mã ứng dụng. Đặt mã như vậy trong trình kích hoạt sẽ loại bỏ việc tìm tất cả các câu lệnh DML đó.
CAUPAT
Tùy thuộc vào mức độ phức tạp của kích hoạt, nó vẫn có thể là một nút cổ chai. Nếu bạn muốn giảm bớt tắc nghẽn trong ghi nhật ký kiểm toán, có một số điều bạn có thể làm. Tuy nhiên, nó sẽ đòi hỏi một chút thay đổi cơ sở hạ tầng.
Sử dụng phần cứng hàng hóa, tạo thêm hai Máy chủ DB
Điều này sẽ phục vụ để giảm I / O ghi trên cơ sở dữ liệu chính (MD) do ghi nhật ký kiểm toán. Đây là cách bạn có thể thực hiện nó:
Bước 01) Bật ghi nhật ký nhị phân trong cơ sở dữ liệu chính.
Bước 02) Sử dụng máy chủ rẻ tiền, thiết lập MySQL (cùng phiên bản với MD) với tính năng ghi nhật ký nhị phân được bật. Đây sẽ là DM. Thiết lập sao chép từ MD sang DM.
Bước 03) Sử dụng máy chủ rẻ tiền thứ hai, thiết lập MySQL (cùng phiên bản với MD) với tính năng ghi nhật ký nhị phân bị vô hiệu hóa. Thiết lập mỗi bảng kiểm toán để sử dụng --replicate-do-bảng . Đây sẽ là AU. Thiết lập sao chép từ DM sang AU.
Bước 04) mysqldump các cấu trúc bảng từ MD và tải nó vào DM và AU.
Bước 05) Chuyển đổi tất cả các bảng kiểm toán trong MD để sử dụng công cụ lưu trữ BLACKHOLE
Bước 06) Chuyển đổi tất cả các bảng trong DM và AU để sử dụng công cụ lưu trữ BLACKHOLE
Bước 07) Chuyển đổi tất cả các bảng kiểm toán trong AU để sử dụng công cụ lưu trữ MyISAM
Khi xong
- DM sẽ sao chép từ MD và ghi lại nội dung trong nhật ký nhị phân của nó
- Với bộ lọc --replicate-do-bảng trên tất cả các bảng kiểm toán, AU sẽ sao chép từ DM
Điều này làm là lưu trữ thông tin kiểm toán trên một máy chủ DB riêng biệt và cũng làm giảm bất kỳ sự suy giảm I / O ghi nào mà MD thường có.