Ich habe eine ausgelastete Datenbank mit ausschließlich InnoDB-Tabellen, die ungefähr 5 GB groß sind. Die Datenbank läuft auf einem Debian-Server mit SSD-Festplatten und ich habe max. Verbindungen = 800 eingestellt, die den Server manchmal sättigen und zum Stoppen bringen. Die durchschnittliche Abfrage pro Sekunde beträgt ca. 2,5 KB. Ich muss also die Speichernutzung optimieren, um Platz für maximal mögliche Verbindungen zu schaffen.
Ich habe Vorschläge gesehen, dass innodb_buffer_pool_size bis zu% 80 des gesamten Speichers betragen sollte. Andererseits bekomme ich diese Warnung vom Tuning-Primer-Skript:
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
Hier sind meine aktuellen Innodb-Variablen:
| 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 |
Eine Randnotiz, die relevant sein könnte: Ich sehe, dass, wenn ich versuche, einen großen Beitrag (etwa über 10 KB) von Drupal (der sich auf einem separaten Webserver befindet) in die Datenbank einzufügen, dieser für immer andauert und die Seite nicht korrekt zurückkehrt.
In Bezug auf diese Fragen frage ich mich, welche Größe mein innodb_buffer_pool_size für eine optimale Leistung haben soll. Ich freue mich über Ihre Vorschläge, um diesen und andere Parameter für dieses Szenario optimal einzustellen.
SELECT (PagesData*PageSize)/POWER(1024,3) DataGB FROM...
generiert unter MySQL 5.7 den folgenden Fehler: " Die Funktion 'INFORMATION_SCHEMA.GLOBAL_STATUS' ist deaktiviert. Weitere Informationen finden Sie in der Dokumentation zu 'show_compatibility_56'. " Hätten Sie vielleicht eine aktualisierte Version?