giá trị hợp lý cho max_allowed_packet cho Drupal 7 là bao nhiêu với lưu lượng vừa phải


12

Tôi cần biết một số số công viên bóng cho biến này cho trang web drupal 7 của tôi. Gần đây tôi đã gặp một lỗi "drupal" PDOException: SQLSTATE [08S01]: Lỗi liên kết giao tiếp: 1153 ". Tôi là người mới sử dụng mysql và đang sử dụng dịch vụ lưu trữ chia sẻ. Tôi có thể cần yêu cầu quản trị viên làm điều đó cho tôi.

Cảm ơn trước.


1
Câu trả lời của tôi cho thấy kinh nghiệm của tôi với điều này, nhưng bạn có thể nhận được phản hồi tốt hơn tại dba.stackexchange.com từ những người duy trì MySQL để kiếm sống.
mpdon Arena

Câu trả lời:


12

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

Đồ hình

Đâ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.ccsql / 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

Gói tối đa được phép cũng không ảnh hưởng đến kích thước của câu lệnh chèn?
Butussy Butkus

@BriptButkus Tất nhiên rồi. Đây là lý do tại sao các gói MySQL lớn hơn làm tốt cho INSERT. Xin lưu ý rằng 1G là kích thước tối đa cho max_allowed_packet. Cũng lưu ý rằng việc đặt max_allowed_packet thành 256M không phân bổ trả trước 256M. Theo dev.mysql.com/doc/refman/5.6/en/ trên , mysqld phân bổ bất cứ thứ gì net_buffer_length là kích thước Gói MySQL ban đầu. Gói dần dần phát triển đến kích thước được đặt bởi max_allowed_packet. Do đó, bạn có thể đặt max_allowed_packet lớn. CHỨNG MINH sẽ yêu bạn vì điều đó.
RolandoMySQLDBA

Tôi chưa bao giờ đặt bất cứ thứ gì gần với kích thước đó, mặc dù chúng tôi có một vài máy có RAM 32G. Tuy nhiên, một ứng dụng đã bóp nghẹt nó và tôi đã tăng nó lên 32M từ mặc định (1M?) Và nó đã hoạt động. Có lẽ tôi sẽ tăng nó hơn nữa, nếu nó không bị tổn thương. Tuy nhiên, các ứng dụng có nên kiểm tra max_allowed_packet và chia nhỏ các phần chèn thành các khối để tránh đạt giới hạn đó không? Nhược điểm của phương pháp đó là gì? Có lẽ tôi nên đăng câu hỏi đó lên trang web dba stack.
Butussy Butkus

Bạn có thể giải thích thêm một chút về lý do tại sao chúng ta nên nhân với 11? Bài đăng được liên kết là về bộ đệm innodb - làm thế nào liên quan đến kích thước gói?
SystemParadox

4

Lấy từ trang Yêu cầu Máy chủ Cơ sở dữ liệu của Drupal :

Có thể cần phải đặt biến hệ thống max_allowed_packet tối thiểu 16M. Một số gói lưu trữ rẻ tiền đặt giá trị này quá thấp (mặc định của MySQL chỉ là 1M). Trong trường hợp đó, bạn có thể cần phải chọn một gói lưu trữ tốt hơn. Giá trị 1M có thể đủ cho Drupal 5.

Nên tốt cho một trang web trên chia sẻ lưu trữ.


1
Chà !! Yêu cầu máy chủ Drupal chính thức nói là 16 triệu !! Tôi không bao giờ nhận thức được điều đó. Sẽ ghi nhớ nó trong lần tới. Cảm ơn rất nhiều vì đã chia sẻ thông tin này. Tôi ước tôi có thể đánh dấu nó là câu trả lời tốt nhất !!
shivams

2

Nó có thể là một chút khó khăn để thiết lập max_allowed_packet. Tôi chưa bắt gặp một phương pháp để tính ra giá trị đó. Thông thường, tôi gặp phải nó khi cố gắng khôi phục ảnh chụp nhanh cơ sở dữ liệu bao gồm các hàng từ các {cache}bảng.

Khi tôi gặp vấn đề này, tôi sẽ chọn một giá trị trong khoảng từ 4M đến 8M. Tôi tiếp tục tăng giá trị cho đến khi nó dừng lại. Tuy nhiên, tôi không biết nếu một máy chủ được chia sẻ sẽ thay đổi giá trị này cho 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.