Hướng dẫn how does mysql handle replication lag? - mysql xử lý độ trễ sao chép như thế nào?
MySQL hỗ trợ sao chép bị trì hoãn sao cho máy chủ bản sao cố tình thực hiện các giao dịch muộn hơn so với nguồn ít nhất là một lượng thời gian cụ thể. Phần này mô tả cách định cấu hình độ trễ sao chép trên bản sao và cách giám sát độ trễ sao chép. Show Trong MySQL 8.0, phương pháp trễ sao chép phụ thuộc vào hai dấu thời gian, Độ trễ sao chép mặc định là 0 giây. Sử dụng câu lệnh Bảng lược đồ hiệu suất Nhân rộng bị trì hoãn có thể được sử dụng cho một số mục đích:
Dấu thời gian trễ nhân rộngMySQL 8.0 cung cấp một phương pháp mới để đo độ trễ (còn được gọi là độ trễ sao chép) trong các cấu trúc liên kết sao chép phụ thuộc vào các dấu thời gian sau liên quan đến GTID của mỗi giao dịch (thay vì mỗi sự kiện) được ghi vào nhật ký nhị phân.
Đầu ra của mysqlbinlog hiển thị các dấu thời gian này ở hai định dạng, micro giây từ định dạng epoch và
Theo quy định, Trong một thiết lập sao chép nhóm, khi nguồn gốc là thành viên của một nhóm, Xem các sự kiện thay đổi, là độc quyền cho việc sao chép nhóm, là một trường hợp đặc biệt. Các giao dịch có chứa các sự kiện này được tạo bởi mỗi thành viên nhóm nhưng chia sẻ cùng một GTID (vì vậy, chúng không được thực thi trước tiên trong một nguồn và sau đó được sao chép vào nhóm, nhưng tất cả các thành viên của nhóm thực hiện và áp dụng cùng một giao dịch). Trước MySQL 8.0.26, các giao dịch này đã đặt Giám sát độ trễ sao chép Một trong những cách phổ biến nhất để theo dõi độ trễ sao chép (LAG) trong các phiên bản MySQL trước đó là dựa trên trường
Sử dụng các bảng này, bạn có thể theo dõi thông tin về giao dịch cuối cùng được xử lý luồng tương ứng và giao dịch mà luồng hiện đang xử lý. Thông tin này bao gồm:
Ngoài các bảng Lược đồ hiệu suất, đầu ra của
Khi luồng SQL sao chép đang chờ độ trễ trôi qua trước khi thực hiện một sự kiện, Làm cách nào để sửa lỗi độ trễ sao chép mysql?Đầu tiên, chúng tôi đảm bảo rằng MySQL không bao giờ đồng bộ hóa nhật ký nhị phân vào đĩa. Thay vào đó, chúng tôi để hệ điều hành làm điều đó theo thời gian. Lưu ý rằng giá trị mặc định SYNC_BINLOG là 0, nhưng chúng tôi đã sử dụng giá trị cao hơn để tránh các vấn đề thay vì sự cố.make sure that MySQL never synchronizes the binary log to disk. Instead, we let the operating system do it from time to time. Note that sync_binlog default value is 0, but we used a higher value to avoid problems instead of crash.
Điều gì gây ra độ trễ sao chép MySQL?Điều này là do bản sao MySQL là một luồng đơn (SQL_Thread), theo mặc định.Nếu một khối lượng lớn các ghi vào thể hiện DB nguồn xảy ra song song, thì việc ghi vào bản sao đọc được nối tiếp bằng một sql_thread duy nhất.Điều này có thể gây ra độ trễ giữa thể hiện DB nguồn và đọc bản sao.If a high volume of writes to the source DB instance occurs in parallel, then the writes to the read replica are serialized using a single SQL_THREAD. This can cause a lag between the source DB instance and read replica.
MySQL có tốt để nhân rộng không?Ưu điểm của sự sao chép trong MySQL bao gồm: Giải pháp chia tỷ lệ - Truyền tải tải giữa nhiều bản sao để cải thiện hiệu suất.Trong môi trường này, tất cả các ghi và cập nhật phải diễn ra trên máy chủ nguồn.Đọc, tuy nhiên, có thể diễn ra trên một hoặc nhiều bản sao.Scale-out solutions - spreading the load among multiple replicas to improve performance. In this environment, all writes and updates must take place on the source server. Reads, however, may take place on one or more replicas.
Làm thế nào để bạn đối phó với sự sao chép độ trễ?Để giảm thiểu độ trễ sao chép cho các hoạt động lớn, chúng tôi sử dụng đợt.Chúng tôi không bao giờ áp dụng thay đổi thành 100.000 hàng cùng một lúc.Bất kỳ bản cập nhật lớn nào đều được chia thành các phân đoạn nhỏ, phần phụ, trong số 50 hoặc 100 hàng mỗi phân khúc.Ví dụ, giả sử ứng dụng của chúng tôi cần thanh lọc một số hàng đáp ứng một điều kiện từ một bảng rất lớn.use batching. We never apply a change to 100,000 rows all at once. Any big update is broken into small segments, subtasks, of some 50 or 100 rows each. As an example, say our app needs to purge some rows that satisfy a condition from a very large table. |