Tại sao query_cache_type bị tắt theo mặc định bắt đầu từ MySQL 5.6?


28

Chúng tôi đã nâng cấp lên MySQL 5.6 và bắt đầu thấy việc tải máy chủ db tăng lên đáng kể và cuối cùng phát hiện ra query_cache_typemặc định bắt đầu tắt từ 5.6.

Chúng tôi đã kích hoạt lại và thấy giảm tải, tại sao giá trị này bị tắt theo mặc định bắt đầu từ MySQL 5.6? Tôi không thể thấy vấn đề trong việc kích hoạt nó.

Câu trả lời:


39

Bạn cần lịch sử của InnoDB để hiểu lý do tại sao. Nó đi từ đây:

CÂU CHUYỆN WAR

InnoDB và bộ đệm truy vấn luôn trong tình trạng chiến tranh liên tục. InnoDB có xu hướng rất nặng tay khi kiểm tra các thay đổi trong Nhóm bộ đệm InnoDB và sau đó đánh dấu chéo Bộ đệm truy vấn cho các thay đổi tương tự.

ĐIỀU TRỊ

Trước MySQL 5.0, bộ đệm truy vấn đã bị vô hiệu hóa cho InnoDB. Bây giờ, InnoDB tương tác với nó. Để đơn giản hóa vấn đề, bạn chỉ cần vô hiệu hóa Cache truy vấn bằng cách đặt query_cache_size thành 0.

Theo Tài liệu MySQL trên query_cache_time

Nếu máy chủ được khởi động với query_cache_type được đặt thành 0, thì nó hoàn toàn không thu được bộ đệm bộ đệm truy vấn, điều đó có nghĩa là bộ đệm truy vấn không thể được bật trong thời gian chạy và giảm chi phí khi thực hiện truy vấn.

ĐIỀU KHOẢN CỦA NGƯỜI TỰ TIN

Đặt query_cache_size thành 0 không phải là giải pháp một kích cỡ phù hợp cho tất cả.

Lý do của cuộc chiến, ở nơi đầu tiên, là trên đầu. InnoDB sẽ luôn kiểm tra các thay đổi. Bộ đệm truy vấn lớn hơn sẽ khiến InnoDB hoạt động khó hơn nhiều. Vô hiệu hóa bộ đệm truy vấn, hãy để InnoDB và Cache truy vấn được hạnh phúc. Tuy nhiên, bạn (Nhà phát triển / DBA) có thể là một nạn nhân của cuộc chiến đó có nghĩa là hiệu suất truy vấn kém, ngay cả khi có một hiệp ước hòa bình như vậy.

Tùy thuộc vào điều sau đây

  • Khối lượng công việc
  • Tần suất thay đổi
  • Tần suất đọc cùng một dữ liệu

bạn nên đặt query_cache_size thành bất kỳ số nào bạn cảm thấy tăng hiệu suất (Điều này tương đương với việc bắt đầu một chuyển động ngầm).

TIẾNG VIỆT

Trong trường hợp bạn đang tự hỏi tôi đã nghĩ ra câu chuyện chiến tranh này ở đâu, xin vui lòng xem bài viết cũ của tôi

Đọc kỹ vì tôi đã học được điều này từ Trang 209-215 của MySQL hiệu suất cao (Phiên bản 2)

Tôi đã khuyến nghị vô hiệu hóa bộ đệm truy vấn cho người khác trước

LƯU Ý: Tôi nhận ra câu hỏi là về query_cache_type . Nó có ảnh hưởng đến bộ đệm truy vấn. Vô hiệu hóa bộ đệm bộ đệm chiếm ưu thế của InnoDB đối với nó. Đặt thủ công query_cache_type chỉ cần buộc Nhà phát triển / DBA suy nghĩ cẩn thận về loại truy vấn mà bộ đệm truy vấn sẽ gặp phải.


Xin chào, tôi đã đọc tất cả các liên kết của bạn. Trên thực tế, tôi đã cố gắng tắt bộ đệm truy vấn một lần nữa và chúng tôi thấy tải tăng trở lại đáng kể..như vậy chúng tôi cần phải bật lại. Tôi không nói những gì bạn nói là sai, có lẽ chỉ cần ứng dụng của chúng tôi bị đọc nặng và bộ đệm truy vấn rất hữu ích để giảm tải .. (trang web của chúng tôi đang chạy WordPress)
Yoga

3
Nếu chỉ có nhiều bài viết SO đọc như thế này (cảm ơn vì sự tương tự thú vị)! Tôi cá là những đứa trẻ may mắn của Rolando được kể những câu chuyện trước khi đi ngủ của MySQL như thế này mỗi tối! ;)
rinogo

2
"Trang 209-215 của MySQL hiệu suất cao (Phiên bản 2)" đề cập đến một chương có tên "Bộ đệm truy vấn MySQL", từ "Khi bộ đệm truy vấn có ích" và đến cuối. Điều này tương ứng với các trang 320-329 trong Ấn bản thứ 3.
Peter V. Mørch


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.