Yaklaşık 5GB boyutunda olan sadece InnoDB tabloları ile meşgul bir veritabanı var. Veritabanı, SSD disklerini kullanan bir Debian sunucusunda çalışıyor ve sunucuyu durdurmak için doyuran ve öğüten maksimum bağlantı = 800 ayarlıyorum. Saniyedeki ortalama sorgu yaklaşık 2.5 K'dır. Bu yüzden, mümkün olan maksimum bağlantıya yer açmak için bellek kullanımını optimize etmem gerekiyor.
İnnodb_buffer_pool_size'nin toplam belleğin% 80'ine kadar olması gerektiğini önerdim. Diğer taraftan tuning-primer betiğinden bu uyarıyı alıyorum:
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
İşte benim mevcut innodb değişkenlerim:
| 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 |
İlgili olabilecek bir not: Drupal'dan (ayrı bir web sunucusunda bulunan) veritabanına büyük bir yazı (10KB'den fazla) eklemeye çalıştığımda, veritabanının sonsuza kadar sürdüğünü ve sayfanın doğru dönmediğini görüyorum.
Bunlarla ilgili olarak, optimum performans için benim innodb_buffer_pool_size'nin ne olması gerektiğini merak ediyorum. Bu ve diğer parametreleri bu senaryo için en uygun şekilde ayarlama önerileriniz için teşekkür ederim.
SELECT (PagesData*PageSize)/POWER(1024,3) DataGB FROM...
İle başlayan formülünüz MySQL 5.7'de aşağıdaki hatayı veriyor : " 'INFORMATION_SCHEMA.GLOBAL_STATUS' özelliği devre dışı; 'show_compatibility_56' belgelerine bakın ." Herhangi bir şans eseri güncellenmiş bir versiyona sahip misiniz?