Điều chỉnh (và hiểu) table_cache trong myQuery


18

Tôi đã chạy tập lệnh điều chỉnh hiệu suất MySQL tuyệt vời và bắt đầu làm việc thông qua các đề xuất. Một trong những tôi chạy vào là

BẢNG CACHE
Giá trị bảng_cache hiện tại = 4096 bảng Bạn có tổng cộng 1073 bảng. Bạn có 3900 bàn mở. Tỷ lệ nhấn bảng_cache hiện tại là 2%, trong khi 95% bộ đệm bảng của bạn đang được sử dụng. Bạn có lẽ nên tăng bảng_cache của bạn

Tôi bắt đầu đọc lên bảng_cache nhưng thấy tài liệu MySQL khá thiếu. Họ nói để tăng table_cache"nếu bạn có bộ nhớ". Thật không may, table_cachebiến được định nghĩa là "Số lượng bảng mở cho tất cả các luồng."

Bộ nhớ được sử dụng bởi MySQL sẽ thay đổi như thế nào, nếu tôi tăng biến này? Một giá trị tốt, để đặt nó là gì?

Câu trả lời:


16

Từ tài liệu MySQL

Ví dụ: đối với 200 kết nối đang chạy đồng thời, bạn nên có kích thước bộ đệm bảng tối thiểu 200 × N, trong đó N là số lượng bảng tối đa cho mỗi lần tham gia trong bất kỳ truy vấn nào bạn thực hiện. Bạn cũng phải dành một số mô tả tệp bổ sung cho các bảng và tệp tạm thời.

Vì vậy, nếu trong ứng dụng của bạn, bạn có một truy vấn tham gia 4 bảng và bạn muốn có thể xử lý 200 kết nối đồng thời, dựa trên câu lệnh đó, bạn nên có bảng_cache ít nhất 800.

Theo như sử dụng bộ nhớ, tôi không có những con số đó, tôi nghi ngờ nó sẽ phụ thuộc vào kích thước của các bảng mà bạn đang lưu vào bộ đệm.


Cảm ơn con trỏ. Tôi hơi sợ việc tăng số lượng bảng_cache của mình mà không biết cách sử dụng RAM sẽ thay đổi. RAM của máy đã đầy.
jotango

Bạn có chắc bộ nhớ đã thực sự được sử dụng hết hay chỉ bộ nhớ đã bị chiếm bởi bộ đệm / bộ đệm? Chạy "free -m" và nhìn vào dòng thứ hai (- / + bộ đệm / bộ đệm), đây là cách thể hiện chính xác hơn về việc sử dụng bộ nhớ của bạn trong mb. Xem các câu trả lời trong serverfault.com/questions/73189/
Mạnh

Vâng, nó thực sự sử dụng bộ nhớ. Hôm qua nó đã tráo đổi, điều này thực sự tồi tệ cho một db sản xuất. Tôi đã ra lệnh nâng cấp RAM từ HP ngày hôm nay.
jotango

Đối với những người đến bây giờ, câu trả lời này không chính xác cho mysql 5.1+. bây giờ nó đề cập đến table_open_cachekhi bạn nhìn vào các tài liệu. Xem câu trả lời của @MarkRs khi nhìn vàotable_cache
Jason

3

Bạn nên theo dõi biến Opened_Tables và xem nó tăng nhanh như thế nào. Nếu nó nhanh hơn đáng kể so với việc bạn tạo các bảng mới (bao gồm cả các bảng tạm thời) thì bộ đệm bảng của bạn có thể quá nhỏ.

Table_Cache phải luôn luôn - chủ yếu là dù sao đi nữa - lớn hơn đáng kể so với tổng số bảng trong máy chủ. Nếu không, nó sẽ tiếp tục mở và đóng bảng.

Tôi không thể thấy làm thế nào bạn có thể nhận được tỷ lệ trúng bộ nhớ cache 2%, trừ khi bạn đang đo thời gian ngay sau khi máy chủ khởi động lại hoặc sử dụng FLUSH TABLES rất nhiều (liên quan đến số lượng truy vấn). Thông thường tỷ lệ nhấn bộ đệm bảng nên là 99,9% nếu không hiệu suất sẽ giảm.

Đừng làm một BẢNG XÓA nếu bạn có thể tránh nó, nó sẽ xóa bộ nhớ cache.

Mở bảng là tốn kém vì nó cần phải đọc tệp FRM. Trong MyISAM, điều đó tệ hơn đáng kể (so với các công cụ khác), vì khi đóng bảng, nó cũng ném ra tất cả các khối trong bộ đệm chính xuất phát từ các chỉ mục của nó. Vì vậy, việc đóng một bảng sẽ loại bỏ các chỉ mục của nó khỏi bộ đệm chính == không tốt! Các công cụ khác giữ các khối được lưu trong bộ nhớ cache nhưng vẫn cần đọc lại siêu dữ liệu và phân bổ một số cấu trúc.

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.