Chúng tôi đã gặp sự cố sau khi chuyển cơ sở dữ liệu của khách hàng sang một máy chủ bổ sung. Điều này sẽ có tác động tích cực đến hiệu suất của trang web, nhưng có một vấn đề với việc khóa bảng trong MyISAM. (Tôi đã nghe nói về việc sử dụng InnoDB thay vì MyISAM, nhưng chúng tôi không thể thay đổi công cụ trong tương lai gần).
Chúng tôi có thể phát hiện ra nó với một truy vấn cập nhật được thực hiện khi người điều hành kích hoạt nhận xét trên bài báo. Đây là quá trình:
- truy vấn cập nhật được xử lý
SET status = 1 WHERE id = 5
(chỉ mục được đặt) - các tập tin lưu trữ của trang bị xóa
Tại thời điểm này, toàn bộ trang trở nên chậm. Cơ sở dữ liệu bận rộn trong vài phút. Tôi đã tìm nạp danh sách quy trình một vài lần và thấy khoảng 60 mục nhập của các truy vấn chọn khác nhau, tất cả đều ở trạng thái chờ khóa cấp bảng .
1. Tôi không unterstand tại sao bản cập nhật này trên bàn article_comments
có thể ảnh hưởng select-báo cáo cho bảng article
để chờ khóa mức bảng. Trong danh sách quy trình, hầu hết tất cả các truy vấn đang chờ đều từ bảng này. Tôi đã đọc về thực tế rằng các cập nhật / chèn được ưu tiên lựa chọn và điều này có thể gây ra vấn đề như vậy, nhưng bản thân bảng bài viết không được cập nhật khi các bình luận được kích hoạt, vì vậy các lựa chọn không nên chờ đợi. Có phải tôi đã hiểu sai điều đó?
2. Có điều gì đó ngoài việc thay đổi sang InnoDB để ngăn chặn hành vi này hoặc ít nhất là để có được sự cân bằng tốt hơn? Tôi rất khó chịu về thực tế là vấn đề này đã không xuất hiện trước khi chuyển cơ sở dữ liệu sang máy chủ mới. Tôi đoán có một số cấu hình sai nhưng tôi không biết làm thế nào để xác định.
key_buffer_size
đã được thiết lập 1GB
. Tăng điều đó để 10GB
giảm bớt vấn đề.