Trước tiên, hãy xem xét các biến trạng thái:
Bảng mở : Số lượng bảng đang mở.
Opened_tables : Số lượng bảng đã được mở. Nếu Opened_tables lớn, giá trị table_open_cache của bạn có thể quá nhỏ.
Đáng ngạc nhiên, câu trả lời cho câu hỏi của bạn nằm trong chính câu hỏi.
Hai biến sẽ chỉ có ý nghĩa hơn nếu bạn ném thêm một biến trạng thái vào hỗn hợp: Uptime (hoặc Uptime_since_flush status cho mức trung bình mới sau FLAT STATUS ).
Bạn nên so sánh Open_tables agsinst (Opened_tables / Uptime) . Nếu Open_tables leo lên trên (Opened_tables / Uptime) , thì bây giờ bạn có lý do để lo lắng và nên để mắt đến những thứ như sau:
CẬP NHẬT 2011-08-31 12:18 EDT
Xin lưu ý tại sao tôi cũng đề xuất sử dụng Uptime_since_flush_status thay vì Uptime để sửa lỗi mô hình tăng trưởng Opened_tables trong một khoảng thời gian nhất định.
Ví dụ: nếu bạn chạy FLUSH STATUS;
mỗi thứ Hai vào lúc nửa đêm, bạn có thể tạo OpenTableFactor:
SELECT *, (Open_tables * Uptime / Opened_Tables) OpenTableFactor FROM
(SELECT variable_value Uptime FROM information_schema.global_status
WHERE variable_name = 'Uptime_since_flush_status') up,
(SELECT variable_value Open_tables FROM information_schema.global_status
WHERE variable_name = 'Open_tables') opn,
(SELECT IF(variable_value=0,1,variable_value) Opened_tables
FROM information_schema.global_status
WHERE variable_name = 'Opened_tables') opnd;
Hệ số bảng mở này tương đương với số đại diện cho số lượng bảng mở tại bất kỳ thời điểm nào so với số lượng bảng mở trung bình trong suốt một khoảng thời gian nhất định. Với mộtFLUSH HOSTS;
mỗi tuần / ngày / máy chủ, trung bình đó là so với tuần / ngày / giờ.
Đây là một mẫu từ một trong những khách hàng của chủ nhân của tôi:
mysql> SELECT *, (Open_tables * Uptime / Opened_Tables) OpenTableFactor FROM (SELECT variable_value Uptime FROM information_sc hema.global_status WHERE variable_name = 'Uptime_since_flush_status') up, (SELECT variable_value Open_tables FROM informat ion_schema.global_status WHERE variable_name = 'Open_tables') opn, (SELECT IF(variable_value=0,1,variable_value) Opened_ta bles FROM information_schema.global_status WHERE variable_name = 'Opened_tables') opnd;
+----------+-------------+---------------+-------------------+
| Uptime | Open_tables | Opened_tables | OpenTableFactor |
+----------+-------------+---------------+-------------------+
| 14385123 | 16326 | 30429078 | 7717.996519579068 |
+----------+-------------+---------------+-------------------+
1 row in set (0.00 sec)
Ứng dụng khách này thường duy trì khoảng 7745 OpenTableFactor tối đa. Nếu OpenTableFactor giảm đột ngột (dù chỉ một chút), nó có thể chỉ ra các mẫu lưu lượng truy cập thấp hơn, các mức độ bị hủy bỏ cao, v.v. Nếu OpenTableFactor không bao giờ thay đổi (dù chỉ một chút), nó có thể cho bạn cơ hội thay đổi các cài đặt này:
Sau khi được điều chỉnh, OpenTableFactor có thể thay đổi liên tục hoặc chạm vào trần hoặc cao nguyên khác. Do đó, việc sử dụng các đơn vị khác nhau trong các biến trạng thái trở nên quan trọng đối với loại điều chỉnh này.
CẬP NHẬT 2011-08-31 12:42 EDT
Truy vấn SQL tôi đã chạy cho OpenTableFactor không hoạt động cho MySQL 5.0 trở lại. Nếu bạn đang sử dụng Quản trị viên MySQL hoặc MONyog , bạn có thể tùy chỉnh biểu đồ bằng công thức trong truy vấn và theo dõi. MONyog thu thập lịch sử bằng cách sử dụng SQLLite để vẽ đồ thị lịch sử sau này. Điều này có thể được thực hiện cho bất kỳ phiên bản nào của MySQL.