ฉันมีฐานข้อมูลไม่ว่างที่มีตาราง InnoDB แต่เพียงผู้เดียวซึ่งมีขนาดประมาณ 5GB ฐานข้อมูลทำงานบนเซิร์ฟเวอร์ Debian โดยใช้ดิสก์ SSD และฉันได้ตั้งค่าการเชื่อมต่อสูงสุด = 800 ซึ่งบางครั้งทำให้อิ่มตัวและบดขยี้เซิร์ฟเวอร์ให้หยุดทำงาน ข้อความค้นหาเฉลี่ยต่อวินาทีประมาณ 2.5K ดังนั้นฉันจำเป็นต้องปรับการใช้หน่วยความจำให้เหมาะสมเพื่อให้มีพื้นที่สำหรับการเชื่อมต่อที่เป็นไปได้สูงสุด
ฉันเห็นคำแนะนำแล้วว่า innodb_buffer_pool_size ควรมีขนาดสูงสุด 80% ของหน่วยความจำทั้งหมด ในอีกทางหนึ่งฉันได้รับคำเตือนจากสคริปต์ปรับแต่งไพรเมอร์:
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
นี่คือตัวแปร innodb ปัจจุบันของฉัน:
| 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 |
ข้อความด้านข้างที่อาจเกี่ยวข้อง: ฉันเห็นว่าเมื่อฉันพยายามแทรกโพสต์ขนาดใหญ่ (พูดเกิน 10KB) จาก Drupal (ซึ่งอยู่ในเว็บเซิร์ฟเวอร์แยกต่างหาก) ไปยังฐานข้อมูลมันจะคงอยู่ตลอดไปและหน้าไม่ได้กลับมาอย่างถูกต้อง
เกี่ยวกับสิ่งเหล่านี้ฉันสงสัยว่าสิ่งที่ควรเป็น innodb_buffer_pool_size ของฉันเพื่อประสิทธิภาพที่ดีที่สุด ฉันขอขอบคุณข้อเสนอแนะของคุณเพื่อตั้งค่านี้และพารามิเตอร์อื่น ๆ อย่างเหมาะสมที่สุดสำหรับสถานการณ์นี้
SELECT (PagesData*PageSize)/POWER(1024,3) DataGB FROM...
สร้างข้อผิดพลาดต่อไปนี้ใน MySQL 5.7: " ฟีเจอร์ 'INFORMATION_SCHEMA.GLOBAL_STATUS' ถูกปิดใช้งานดูที่เอกสารประกอบสำหรับ 'show_compatibility_56' " คุณมีรุ่นที่ได้รับการปรับปรุงโดยบังเอิญหรือไม่?