Phân tích TÌNH TRẠNG TOÀN CẦU và BIẾN:
Quan sát:
- Phiên bản: 10.4.12-MariaDB
- RAM 32 GB
- Thời gian hoạt động = 19ngày 23:11:43
- Có vẻ như bạn đang chạy cả MyISAM và InnoDB.
- 240 QPS
Các vấn đề quan trọng hơn:
Biến đổi long_query_time
đến 1
để bạn có thể bắt được nhiều truy vấn hơn trong quá trình ghi chậm. (Bây giờ bạn có 10 giây; điều này có thể giải thích tại sao bạn chỉ tìm thấy 4 truy vấn.)
Có một số dấu hiệu cho thấy một số truy vấn đang chạy không hiệu quả. Đây là một cách để tìm các truy vấn như vậy: http://mysql.rjweb.org/doc.php/mysql_analysis#slow_queries_and_slowlog
Tại sao bạn sử dụng MyISAM? Các giá trị khó hiểu -- như thể bạn [đã]xây dựng lại một chỉ mục cho một bảng MyISAM lớn, nhưng không làm gì khác. Trong hầu hết các trường hợp, tốt hơn là sử dụng InnoDB.
innodb_buffer_pool_size
có thể được tăng lên để cải thiện tốc độ truy vấn InnoDB.
Hãy thận trọng về chung_log
-- nó làm đầy đĩa khá nhanh.
"Query Cache" đang chạy không hiệu quả. Tôi khuyên bạn nên tắt hoàn toàn: query_cache_type=tắt
và truy vấn_cache_size=0
.
Max_used_connections
đạt 152, cho thấy có rất nhiều người dùng được kết nối cùng một lúc. (Điều này không có nghĩa là 152 truy vấn đang chạy đồng thời.)
Chi tiết và các quan sát khác:
Chuyển đổi từ MyISAM sang InnoDB
( Key_blocks_used * 1024 / key_buffer_size ) = 460 * 1024 / 128M = 0,35%
-- Phần trăm key_buffer được sử dụng. Dấu nước cao.
-- Giảm key_buffer_size (hiện tại là 134217728) để tránh sử dụng bộ nhớ không cần thiết.
( (key_buffer_size / 0,20 + innodb_buffer_pool_size / 0,70) ) = ((128M / 0,20 + 8192M / 0,70)) / 32768M = 37,7%
- Hầu hết ram có sẵn nên được cung cấp cho bộ nhớ đệm.
-- http://mysql.rjweb.org/doc.php/memory
( general_log ) = general_log = BẬT
-- Nhật ký (FILE hoặc TABLE) của tất cả truy vấn chạy.
-- Tắt general_log (bây giờ là BẬT) khi không sử dụng. Nhật ký đó có thể lấp đầy đĩa rất nhanh.
( innodb_buffer_pool_size ) = 8.192 / 32768M = 25,0%
-- % RAM được sử dụng cho InnoDB buffer_pool
-- Đặt thành khoảng 70% RAM khả dụng. (Thấp là kém hiệu quả hơn; rủi ro hoán đổi quá cao.)
( (key_buffer_size / 0,20 + innodb_buffer_pool_size / 0,70) ) = ((128M / 0,20 + 8192M / 0,70)) / 32768M = 37,7%
-- (số liệu để đánh giá việc sử dụng RAM)
( innodb_lru_scan_depth * innodb_page_cleaners ) = 1.024 * 4 = 4.096
-- Lượng công việc cho trình dọn dẹp trang mỗi giây.
-- "InnoDB: page_cleaner: mất 1000ms vòng lặp dự kiến..." có thể sửa được bằng cách hạ thấp lru_scan_depth: Xem xét 1000 / innodb_page_cleaners (hiện là 4). Cũng kiểm tra trao đổi.
( innodb_lru_scan_depth ) = 1.024
-- "InnoDB: page_cleaner: mất 1000ms vòng lặp dự định..." có thể được khắc phục bằng cách hạ thấp lru_scan_depth
( innodb_io_ capacity ) = 200
-- Khi tuôn ra, hãy sử dụng nhiều IOP này.
-- Số lần đọc có thể chậm chạp hoặc đột ngột.
( Innodb_log_writes ) = 43,856,157/1725103 = 25 /giây
( Innodb_os_log_write / (Thời gian hoạt động / 3600) / innodb_log_files_in_group / innodb_log_file_size ) = 137.804.939.264 / (1725103 / 3600) / 2 / 48M = 2,86
-- Tỉ lệ
-- (xem phút)
( Thời gian hoạt động / 60 * innodb_log_file_size / Innodb_os_log_write ) = 1.725.103/60 * 48M / 137804939264 = 10,5
-- Số phút giữa các lần quay nhật ký InnoDB Bắt đầu với 5.6.8, điều này có thể được thay đổi linh hoạt; hãy chắc chắn cũng thay đổi my.cnf.
-- (Khuyến nghị 60 phút giữa các lần quay là tùy ý.) Điều chỉnh innodb_log_file_size (hiện tại là 50331648). (Không thể thay đổi trong AWS.)
( innodb_flush_method ) = innodb_flush_method = fsync
-- Cách InnoDB nên yêu cầu hệ điều hành viết các khối. Đề xuất O_DIRECT hoặc O_ALL_DIRECT (Percona) để tránh đệm đôi. (Ít nhất là đối với Unix.) Xem chrischandler để biết trước về O_ALL_DIRECT
( default_tmp_storage_engine ) = default_tmp_storage_engine =
( innodb_flush_neighbor ) = 1
-- Một tối ưu hóa nhỏ khi ghi các khối vào đĩa.
-- Sử dụng 0 cho ổ SSD; 1 cho ổ cứng.
( innodb_io_ capacity ) = 200
- I/O ops mỗi giây có khả năng trên đĩa. 100 cho ổ đĩa chậm; 200 đối với ổ quay; 1000-2000 cho SSD; nhân với hệ số RAID.
( innodb_adaptive_hash_index ) = innodb_adaptive_hash_index = BẬT
-- Thông thường nên BẬT.
-- Có những trường hợp TẮT tốt hơn. Xem thêm innodb_adaptive_hash_index_parts (hiện là 8) (sau 5.7.9) và innodb_adaptive_hash_index_partitions (MariaDB và Percona). BẬT có liên quan đến các sự cố hiếm gặp (lỗi 73890). 10.5.0 đã quyết định TẮT mặc định.
( innodb_print_all_deadlocks ) = innodb_print_all_deadlocks = TẮT
-- Có đăng nhập tất cả các Bế tắc hay không.
-- Nếu bạn đang mắc kẹt với Bế tắc, hãy bật tính năng này lên.Thận trọng: Nếu bạn có nhiều bế tắc, điều này có thể ghi rất nhiều vào đĩa.
( character_set_server ) = character_set_server = latin1
-- Các vấn đề về bộ ký tự có thể được giải quyết bằng cách đặt character_set_server (nay là latin1) thành utf8mb4. Đó là mặc định trong tương lai.
( local_infile ) = local_infile = BẬT
-- local_infile (hiện đang BẬT) = BẬT là sự cố bảo mật tiềm ẩn
( Key_blocks_used * 1024 / key_buffer_size ) = 460 * 1024 / 128M = 0,35%
-- Phần trăm key_buffer được sử dụng . Dấu nước cao.
-- Giảm key_buffer_size (hiện tại là 134217728) để tránh sử dụng bộ nhớ không cần thiết.
( Key_writes / Key_write_requests ) = 19.978.377 / 40284646 = 49,6%
-- hiệu quả của key_buffer đối với việc ghi
-- Nếu bạn có đủ RAM, bạn nên tăng key_buffer_size (hiện tại là 134217728).
( query_cache_size ) = 524,288 = 0,5 MB
-- Kích thước QC
-- Quá nhỏ = không được sử dụng nhiều. Quá lớn = quá nhiều chi phí. Đề xuất 0 hoặc không quá 50M.
( Qcache_lowmem_prunes ) = 125,234,412/1725103 = 73 /giây
-- Hết phòng QC
-- tăng query_cache_size (nay là 524288)
( Qcache_lowmem_prunes/Qcache_inserts ) = 125.234.412/146211296 = 85,7%
-- Tỷ lệ loại bỏ (tần suất cần cắt tỉa do không đủ bộ nhớ)
( Qcache_not_cached ) = 78,413,835/1725103 = 45 /giây
-- SQL_CACHE đã thử, nhưng bị bỏ qua
-- Suy nghĩ lại về bộ nhớ đệm; điều chỉnh qcache
( Qcache_hits / Qcache_inserts ) = 37.201.050 / 146211296 = 0,254
-- Hit để chèn tỷ lệ -- cao là tốt
-- Xem xét việc tắt bộ đệm truy vấn.
( Qcache_hits / (Qcache_hits + Com_select) ) = 37.201.050 / (37201050 + 282029692) = 11,7%
-- Tỷ lệ trúng -- CHỌN đã sử dụng QC
-- Xem xét việc tắt bộ đệm truy vấn.
( Qcache_hits / (Qcache_hits + Qcache_inserts + Qcache_not_cached) ) = 37.201.050 / (37201050 + 146211296 + 78413835) = 14,2%
-- Tỷ lệ trúng bộ đệm truy vấn
-- Có lẽ tốt nhất là tắt QC đi.
( (query_cache_size - Qcache_free_memory) / Qcache_queries_in_cache / query_alloc_block_size ) = (524288 - 78344)/82/16384 = 0,332
-- query_alloc_block_size so với công thức
-- Điều chỉnh query_alloc_block_size (hiện là 16384)
( Created_tmp_tables ) = 96,501,765/1725103 = 56 /giây
-- Tần suất tạo các bảng "tạm thời" như một phần của CHỌN phức tạp.
( Created_tmp_disk_tables ) = 23.539.653/1725103 = 14 /giây
-- Tần suất tạo đĩa các bảng "tạm thời" như một phần của CHỌN phức tạp
-- tăng tmp_table_size (hiện là 16777216) và max_heap_table_size (hiện là 16777216).
Kiểm tra các quy tắc cho các bảng tạm thời khi MEMORY được sử dụng thay vì MyISAM. Có lẽ những thay đổi nhỏ về lược đồ hoặc truy vấn có thể tránh được MyISAM.
Các chỉ mục tốt hơn và định dạng lại các truy vấn có nhiều khả năng hữu ích hơn.
( Created_tmp_disk_tables / Câu hỏi ) = 23.539.653 / 414140316 = 5,7%
-- Pct truy vấn cần thiết trên bảng tmp trên đĩa.
-- Chỉ mục tốt hơn / Không có đốm màu / v.v.
( Select_full_join / Com_select ) = 30.333.225 / 282029692 = 10,8%
-- % lựa chọn là liên kết không có chỉ mục
-- Thêm (các) chỉ mục phù hợp vào các bảng được sử dụng trong THAM GIA.
( Com_insert + Com_delete + Com_delete_multi + Com_replace + Com_update + Com_update_multi ) = (87669877 + 27242 + 0 + 0 + 1452911 + 0) / 1725103 = 52 /giây
-- ghi/giây
-- 50 lần ghi/giây + xóa nhật ký có thể sẽ tối đa hóa khả năng ghi I/O của ổ đĩa cứng. Nếu bạn có SSD, thì số liệu này có thể ổn.
( binlog_format ) = binlog_format = HỖN HỢP
-- TUYÊN BỐ/ HÀNG/ HỖN HỢP.
-- ROW được ưu tiên bởi 5.7 (10.3)
( long_query_time ) = 10
-- Ngưỡng (Giây) để xác định truy vấn "chậm".
-- Đề nghị 2
( Max_used_connections / max_connections ) = 152/151 = 100,7%
-- Đỉnh % kết nối
-- tăng max_connections (hiện là 151) và/hoặc giảm wait_timeout (hiện là 28800). Hoặc tăng tốc truy vấn.
( Kết nối ) = 11.987.448 / 1725103 = 6,9 /giây
-- Kết nối
-- Tăng wait_timeout (nay là 28800); sử dụng tổng hợp?
( Connection_errors_accept + Connection_errors_internal + Connection_errors_peer_address + Connection_errors_select + Connection_errors_tcpwrap ) = 0 + 26 + 0 + 0 + 0 = 26
-- Lỗi kết nối khác với max_connections.
-- Để biết thêm thông tin, hãy xem HIỂN THỊ TÌNH TRẠNG TOÀN CẦU NHƯ 'Connection_errors%'
Nhỏ bất thường:
Created_tmp_files = 0,094 /HR
innodb_spin_wait_delay = 4
Lớn bất thường:
Aria_pagecache_writes = 34 /giây
Aria_transaction_log_syncs = 25.641
Com_show_warnings = 40 /HR
Connection_errors_internal = 0,054 /HR
Handler_read_key = 85109 /giây
Handler_tmp_update = 839 /giây
Innodb_buffer_pool_read_requests = 675158 /giây
Innodb_buffer_pool_read_requests / (Innodb_buffer_pool_read_requests + Innodb_buffer_pool_reads ) = 100,0%
Innodb_rows_updated = 356 /giây
performance_schema_max_cond_classes = 90
Chuỗi bất thường:
Innodb_have_punch_hole = TẮT
aria_recover_options = SAO LƯU,NHANH CHÓNG
ngắt kết nối_on_expired_password = TẮT
ft_boolean_syntax = + -><()~*:
innodb_fast_shutdown = 1
log_output = BẢNG
myisam_stats_method = NULLS_UNEQUAL
old_alter_table = MẶC ĐỊNH
Optimizer_trace = đã bật = tắt