Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tôi có nên tắt Bộ đệm truy vấn trong MySQL không?

Trong hầu hết tất cả các máy chủ sản xuất, bạn nên tắt bộ đệm Truy vấn. Mọi sửa đổi đối với bảng gây ra việc xóa tất cả Mục QC cho bảng đó. Bàn càng lớn thì càng mất nhiều thời gian. 128M là cao nguy hiểm.

Thông thường, bạn nên đặt innodb_buffer_pool_size đến khoảng 70% trong tổng số có sẵn ĐẬP. Bạn đã đặt nó thành một giá trị thấp hơn nhiều, thậm chí nhỏ hơn kích thước tập dữ liệu. 3G có thể sẽ hữu ích. 20G sẽ không giúp được gì nữa (cho đến khi tập dữ liệu của bạn tăng lên đáng kể).

Đảm bảo rằng cả HĐH và MySQL đều là phiên bản 64 bit.

Để có phân tích kỹ lưỡng hơn, hãy cung cấp

  • Kích thước RAM (32G)
  • SHOW VARIABLES;
  • SHOW GLOBAL STATUS; (sau khi chạy ít nhất 24 giờ)

Phân tích của BIẾN và TRẠNG THÁI:

Các vấn đề quan trọng hơn

Vì bạn chỉ (?) Sử dụng InnoDB và chỉ có 2GB dữ liệu, nên việc phản hồi các bình luận về innodb_buffer_pool_size là không quan trọng và key_buffer_size

Cung cấp thêm một số chi tiết về việc bạn sử dụng nhiều DELETE .

Sử dụng slowlog để tìm các truy vấn 'tồi tệ nhất'. Thông tin chi tiết khác tại đây . Điều đó sẽ xác định các vấn đề tmp_table và quét bảng được đề cập bên dưới.

Đừng bận tâm sử dụng OPTIMIZE TABLE .

Bạn đang thực hiện "giao dịch" như thế nào? Đôi khi với tự động gửi, đôi khi với COMMIT ?

Chi tiết và các quan sát khác

( Key_blocks_used * 1024 / key_buffer_size ) = 4,710 * 1024 / 128M = 3.6% - Phần trăm key_buffer được sử dụng. Dấu nước cao. - Giảm key_buffer_size để tránh sử dụng bộ nhớ không cần thiết.

( innodb_buffer_pool_size / _ram ) = 4096M / 32768M = 12.5% -% RAM được sử dụng cho InnoDB buffer_pool

( (key_buffer_size / 0.20 + innodb_buffer_pool_size / 0.70) / _ram ) = (128M / 0.20 + 4096M / 0.70) / 32768M = 19.8% - Hầu hết ram có sẵn nên được tạo sẵn để lưu vào bộ nhớ đệm. - http:// mysql. rjweb.org/doc.php/memory

( Innodb_buffer_pool_pages_free * 16384 / innodb_buffer_pool_size ) = 187,813 * 16384 / 4096M = 71.6% - vùng đệm miễn phí-- dung lượng bộ đệm_pool_size lớn hơn bộ làm việc; có thể giảm nó

( Innodb_pages_written / Innodb_buffer_pool_write_requests ) = 7,144,121 / 29935426 = 23.9% - Viết các yêu cầu phải đạt được đĩa - Kiểm tra innodb_buffer_pool_size

( Innodb_buffer_pool_bytes_data / innodb_buffer_pool_size ) = 1,199,046,656 / 4096M = 27.9% - Phần trăm vùng đệm bị chiếm dụng bởi dữ liệu-- Một phần trăm nhỏ có thể cho biết rằng buffer_pool lớn không cần thiết.

( Uptime / 60 * innodb_log_file_size / Innodb_os_log_written ) = 533,153 / 60 * 512M / 20356473344 = 234 - Các phút giữa các lần luân chuyển bản ghi InnoDB Bắt đầu từ 5.6.8, điều này có thể được thay đổi động; 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 hơi tùy ý.) Điều chỉnh innodb_log_file_size. (Không thể thay đổi trong AWS.)

( Innodb_rows_deleted / Innodb_rows_inserted ) = 364,605 / 414950 = 0.879 - Churn-- "Đừng xếp hàng, cứ làm đi." (Nếu MySQL đang được sử dụng như một hàng đợi.)

( Created_tmp_disk_tables / (Created_tmp_disk_tables + Created_tmp_tables) ) = 247,373 / (247373 + 446152) = 35.7% - Phần trăm bảng tạm thời bị tràn vào đĩa - có thể tăng kích thước tmp_table_size và max_heap_table_size; tránh các đốm màu, v.v.

( Select_scan ) = 871,872 / 533153 = 1.6 /sec - quét toàn bộ bảng - Thêm chỉ mục / truy vấn tối ưu hóa (trừ khi chúng là những bảng nhỏ)

( Select_scan / Com_select ) = 871,872 / 12593904 = 6.9% -% lựa chọn thực hiện quét toàn bộ bảng. (Có thể bị đánh lừa bởi Quy trình lưu trữ.) - Thêm chỉ mục / tối ưu hóa truy vấn

( Com_optimize ) = 216 / 533153 = 1.5 /HR - Tần suất thực hiện BẢNG TỐI ƯU HÓA. - BẢNG TỐI ƯU HÓA hiếm khi hữu ích, chắc chắn không phải ở tần suất cao.

( long_query_time ) = 10.000000 = 10 - Thời gian cắt (Giây) để xác định truy vấn "chậm". - Đề xuất 2

Cực trị (không có chú thích):

Nhỏ bất thường:

Com_commit = 2.5 /HR
Innodb_buffer_pool_pages_made_not_young = 0.15 /sec
Innodb_ibuf_merged_delete_marks = 27 /HR
Innodb_row_lock_time = 8
Innodb_row_lock_time_max = 1
interactive_timeout = 360

Lớn bất thường:

Com_rollback_to_savepoint = 14 /HR
Handler_savepoint_rollback = 14 /HR
join_cache_level = 8   (This may be unused?  It was removed in 5.6.3, but possibly left in MariaDB 10.1?)

Chuỗi bất thường:

Innodb_buffer_pool_dump_status = Dumping buffer pool(s) not yet started
Innodb_buffer_pool_load_status = Loading buffer pool(s) not yet started
innodb_checksum_algorithm = INNODB
innodb_cleaner_lsn_age_factor = HIGH_CHECKPOINT
innodb_empty_free_list_algorithm = BACKOFF
innodb_force_load_corrupted = OFF
innodb_foreground_preflush = EXPONENTIAL_BACKOFF
innodb_log_checksum_algorithm = INNODB
myisam_stats_method = NULLS_UNEQUAL
opt_s__engine_condition_pushdown = off
opt_s__mrr = off
opt_s__mrr_cost_based = off

Bộ nhớ cache truy vấn

Vì nó đã bị tắt, không có giá trị trạng thái Qcache nào được đặt. Vì vậy, tôi không thể giải quyết câu hỏi ban đầu. Nếu bạn muốn bật QC và khởi động lại máy chủ và đợi vài ngày, tôi có thể phân tích lại khi bật. Các số liệu khác nhau về số lần truy cập, sơ lược, v.v. có thể giải quyết câu hỏi ban đầu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:Cột không xác định trong 'danh sách trường'

  2. MySQL:làm cách nào để xem TẤT CẢ các ràng buộc trên một bảng?

  3. Tại sao sử dụng DB ::raw bên trong DB ::select trong Laravel?

  4. Giá trị mặc định không hợp lệ cho 'dateAdded'

  5. Tạo một hàng trong bảng với các giá trị <td> từ DB PHP