Tại sao mysql xóa bộ đệm truy vấn trong phiên bản 8.0?
Tại sao mysql xóa bộ đệm truy vấn trong phiên bản 8.0?
Câu trả lời:
Có một blog chi tiết từ nhóm máy chủ MySQL về điều này, nơi Matt Lord nói:
Bộ đệm truy vấn đã bị tắt theo mặc định kể từ MySQL 5.6 (2013) vì được biết là không mở rộng quy mô với khối lượng công việc thông lượng cao trên các máy đa lõi.
Chúng tôi đã xem xét những cải tiến nào chúng tôi có thể thực hiện để truy vấn bộ đệm so với tối ưu hóa mà chúng tôi có thể thực hiện nhằm cải thiện tất cả các khối lượng công việc.
Trong khi những lựa chọn này là trực giao, tài nguyên kỹ thuật là hữu hạn. Điều đó có nghĩa là chúng tôi đang chuyển chiến lược để đầu tư vào các cải tiến thường áp dụng cho tất cả các khối lượng công việc.
Câu đố hay !!!
Đây là một thách thức đối với hầu hết các nhà phát triển cơ sở dữ liệu để ước tính chính xác kích thước của tập kết quả phổ biến nhất trong các ứng dụng của họ. Có một bộ đệm truy vấn lớn chỉ là một miếng băng lớn cho điều đó.
Có một lý do lớn hơn đã báo trước sự sụp đổ của bộ đệm truy vấn. Bốn năm trước, tôi đã trả lời bài viết Tại sao query_cache_type bị tắt theo mặc định bắt đầu từ MySQL 5.6? . Rất ngắn gọn, bộ đệm truy vấn luôn kiểm tra nhóm bộ đệm InnoDB để biết các thay đổi. Bạn có thể tìm thấy điều này trên các trang 209-215 của MySQL hiệu suất cao (Phiên bản 2) .
Tôi đã đề cập đến điều này trong những năm qua:
Sep 05, 2012
: Là chi phí chung của việc vô hiệu hóa bộ đệm truy vấn thường xuyên có bao giờ đáng không?Sep 25, 2013
: làm mất hiệu lực các mục bộ đệm truy vấn (khóa)Sep 26, 2013
: giá trị lần truy cập bộ đệm truy vấn không thay đổi trong cơ sở dữ liệu của tôiDec 23, 2013
: MySQL có mức sử dụng CPU và bộ nhớ cao(Tôi đồng ý với Câu trả lời khác, nhưng đây là giá trị 2 xu của tôi.)
Như đã thực hiện, ...
QC không thể hoạt động với Galera hoặc Tái tạo nhóm, cả hai đều có lực kéo nhiều hơn trong đấu trường HA.
Khi query_cache_size
lớn, nó có hiệu quả thấp hơn. Điều này là do sự thiếu hiệu quả trong "cắt tỉa". (Lưu ý: Aurora đã thực hiện lại và dường như đã khắc phục vấn đề này.)
Có một chi phí trong mỗi SELECT
vì nó không biết liệu QC sẽ đi vào chơi. Nhiều thập kỷ trước, điều này được ước tính là 11%. Cho đến khi thoát khỏi QC, cách giải quyết duy nhất là thực hiện cả hai query_cache_size = 0
và query_cache_type = 0
trong tệp cấu hình. (Rất ít người nhận ra cả hai đều cần thiết.)
Trong máy chủ Sản xuất điển hình, việc chèn đang diễn ra thường xuyên. Vì mỗi lần chèn gây ra việc cắt xén tất cả các mục cho (các) bảng đó, QC hầu như vô dụng đối với các bảng như vậy.
Có lẽ 95% trong số hàng trăm hệ thống tôi đã xem xét cho các vấn đề về hiệu năng sẽ tốt hơn nếu không có QC.