Tôi thấy một câu trả lời thú vị cho một câu hỏi về BLOB lớn nhất mà bạn có thể có. Đây là câu lệnh tôi thấy trong ServerFault: innodb_log_file_size và innodb_log_buffer_size kết hợp phải lớn hơn mười lần đối tượng blob lớn nhất của bạn nếu bạn có nhiều đối tượng lớn .
Dựa trên bài đăng trên ServerFault từ Nils-Anders Nøttseter , bạn nên truy vấn bảng và tìm ra BLOB nào lớn nhất, nhân số đó với 11 hoặc nhiều hơn và sử dụng câu trả lời đó làm max_allowed_packet tiếp theo.
Thật buồn cười khi tôi giải quyết một câu hỏi khác trong đó tôi đề nghị kích thước gói max_allowed để hy vọng giải quyết vấn đề .
CẨN THẬN
Theo sách
Đây là những gì Đoạn 1-3 nói về Gói MySQL:
Mã giao tiếp mạng MySQL được viết theo giả định rằng các truy vấn luôn luôn ngắn một cách hợp lý và do đó có thể được gửi đến và xử lý bởi máy chủ trong một đoạn, được gọi là một gói theo thuật ngữ MySQL. Máy chủ phân bổ bộ nhớ cho bộ đệm tạm thời để lưu trữ gói và nó yêu cầu đủ để phù hợp với nó hoàn toàn. Kiến trúc này yêu cầu một biện pháp phòng ngừa để tránh việc máy chủ hết bộ nhớ --- giới hạn về kích thước của gói, tùy chọn này thực hiện.
Mã quan tâm liên quan đến tùy chọn này được tìm thấy trong
sql / net_serv.cc . Hãy xem my_net_read () , sau đó thực hiện cuộc gọi đến my_real_read () và đặc biệt chú ý đến
net_realloc () .
Biến này cũng giới hạn độ dài của kết quả của nhiều chuỗi functon. Xem sql / field.cc và
sql / intem_strfunc.cc để biết chi tiết.
Biết điều này về Gói MySQL cho phép một DBA tăng kích thước của chúng để chứa nhiều BLOB bên trong một Gói MySQL, ngay cả khi chúng có kích thước lớn một cách đáng ghét.
Về tình huống của bạn, bạn nên tìm hiểu BLOB lớn nhất trong cơ sở dữ liệu của bạn là gì, nhân số đó với 11 và đặt max_allowed_packet của bạn thành số đó. Bạn sẽ có thể thiết lập nó cho máy chủ mà không cần khởi động lại mysql (Cá nhân tôi sẽ đặt nó 256M vì nó sẽ giải quyết các vấn đề khác liên quan đến di chuyển và sao chép, nằm ngoài phạm vi của diễn đàn này). Để đặt thành 256M cho cơ sở dữ liệu của bạn cho tất cả các kết nối đến, vui lòng chạy:
SET GLOBAL max_allowed_packet = 1024 * 1024 * 256;
Sau đó, thêm cài đặt này vào my.cnf trong [mysqld]
phần:
[mysqld]
max_allowed_packet = 256M