Tôi có một cơ sở dữ liệu bận rộn chỉ với các bảng InnoDB có kích thước khoảng 5 GB. Cơ sở dữ liệu chạy trên máy chủ Debian bằng đĩa SSD và tôi đã đặt kết nối tối đa = 800, đôi khi bão hòa và khiến máy chủ tạm dừng. Truy vấn trung bình mỗi giây là khoảng 2,5K. Vì vậy, tôi cần tối ưu hóa việc sử dụng bộ nhớ để có chỗ cho các kết nối tối đa có thể.
Tôi đã thấy các đề xuất rằng innodb_buffer_pool_size phải chiếm tới 80% tổng bộ nhớ. Mặt khác, tôi nhận được cảnh báo này từ tập lệnh điều chỉnh:
Max Memory Ever Allocated : 91.97 G
Configured Max Per-thread Buffers : 72.02 G
Configured Max Global Buffers : 19.86 G
Configured Max Memory Limit : 91.88 G
Physical Memory : 94.58 G
Dưới đây là các biến innodb hiện tại của tôi:
| innodb_adaptive_flushing | ON |
| innodb_adaptive_hash_index | ON |
| innodb_additional_mem_pool_size | 20971520 |
| innodb_autoextend_increment | 8 |
| innodb_autoinc_lock_mode | 1 |
| innodb_buffer_pool_instances | 1 |
| innodb_buffer_pool_size | 20971520000 |
| innodb_change_buffering | all |
| innodb_checksums | ON |
| innodb_commit_concurrency | 0 |
| innodb_concurrency_tickets | 500 |
| innodb_data_file_path | ibdata1:10M:autoextend |
| innodb_data_home_dir | |
| innodb_doublewrite | ON |
| innodb_fast_shutdown | 1 |
| innodb_file_format | Antelope |
| innodb_file_format_check | ON |
| innodb_file_format_max | Antelope |
| innodb_file_per_table | ON |
| innodb_flush_log_at_trx_commit | 2 |
| innodb_flush_method | O_DIRECT |
| innodb_force_load_corrupted | OFF |
| innodb_force_recovery | 0 |
| innodb_io_capacity | 200 |
| innodb_large_prefix | OFF |
| innodb_lock_wait_timeout | 50 |
| innodb_locks_unsafe_for_binlog | OFF |
| innodb_log_buffer_size | 4194304 |
| innodb_log_file_size | 524288000 |
| innodb_log_files_in_group | 2 |
| innodb_log_group_home_dir | ./ |
| innodb_max_dirty_pages_pct | 75 |
| innodb_max_purge_lag | 0 |
| innodb_mirrored_log_groups | 1 |
| innodb_old_blocks_pct | 37 |
| innodb_old_blocks_time | 0 |
| innodb_open_files | 300 |
| innodb_purge_batch_size | 20 |
| innodb_purge_threads | 0 |
| innodb_random_read_ahead | OFF |
| innodb_read_ahead_threshold | 56 |
| innodb_read_io_threads | 4 |
| innodb_replication_delay | 0 |
| innodb_rollback_on_timeout | OFF |
| innodb_rollback_segments | 128 |
| innodb_spin_wait_delay | 6 |
| innodb_stats_method | nulls_equal |
| innodb_stats_on_metadata | ON |
| innodb_stats_sample_pages | 8 |
| innodb_strict_mode | OFF |
| innodb_support_xa | ON |
| innodb_sync_spin_loops | 30 |
| innodb_table_locks | ON |
| innodb_thread_concurrency | 4 |
| innodb_thread_sleep_delay | 10000 |
| innodb_use_native_aio | ON |
| innodb_use_sys_malloc | ON |
| innodb_version | 1.1.8 |
| innodb_write_io_threads | 4 |
Một lưu ý phụ có thể có liên quan: Tôi thấy rằng khi tôi cố gắng chèn một bài đăng lớn (giả sử trên 10KB) từ Drupal (nằm trên một máy chủ web riêng biệt) vào cơ sở dữ liệu, nó sẽ tồn tại mãi mãi và trang không trở lại chính xác.
Về những điều này, tôi tự hỏi những gì nên là innodb_buffer_pool_size của tôi để có hiệu suất tối ưu. Tôi đánh giá cao đề xuất của bạn để đặt điều này và các tham số khác tối ưu cho kịch bản này.
SELECT (PagesData*PageSize)/POWER(1024,3) DataGB FROM...
tạo ra lỗi sau trên MySQL 5.7: " Tính năng 'Information_SCHema.GLOBAL_STATUS' bị vô hiệu hóa, xem tài liệu về 'show_compabilities_56' ". Bạn sẽ có một phiên bản cập nhật bằng cách nào?