Mysql
Mysql 配置建議 - CPU 太高
我的伺服器(64GB,16CPU)有 mariadb 5.5.60。
查詢大約是 500 次選擇/秒和 300 次插入/秒。
查詢是對身份驗證令牌和使用者詳細資訊的簡單選擇。
兩者都被正確索引。
插入查詢也很簡單。
但是,CPU 使用率仍然很高 %cpu 使用率 >600%。
以下是mysql 配置。
請建議。
max_connections = 5000 max_user_connections=1000 key_buffer_size = 10024M myisam_sort_buffer_size = 512M read_buffer_size = 1G table_open_cache = 9000 thread_cache_size = 900 wait_timeout = 300 connect_timeout = 300 tmp_table_size = 8G max_heap_table_size = 4G max_allowed_packet = 10G net_buffer_length = 2048M max_connect_errors = 100 read_rnd_buffer_size = 2048M bulk_insert_buffer_size = 2G query_prealloc_size = 512M query_alloc_block_size = 128M transaction_alloc_block_size = 128M transaction_prealloc_size = 128M max_write_lock_count = 16 log-error external-locking=FALSE open_files_limit=50000 character-set-server = utf8 innodb_buffer_pool_size=40G table_cache=10G innodb_file_per_table=1 skip-name-resolve
table_cache=10G
是舊稱
table_open_cache
。它們限制條目的數量。10G是不合理的。9000
很高,但可能還可以。tmp_table_size = 8G max_heap_table_size = 4G
危險地高。如果只有幾個執行緒決定建構一個大的臨時表,您可能會用完 RAM,可能會用完交換空間。將它們設置為不超過 RAM 的 1%。
這些都可以,因為你有它們:
innodb_buffer_pool_size=40G key_buffer_size = 10024M
但最好根據您使用的引擎調整它們。
同時,不要隨意提高配置設置;它可能弊大於利。交換對性能來說很糟糕;過度送出 RAM 會導致交換。
mariadb 5.5.60 查詢大約 500 次選擇/秒和 300 次插入/秒
5.5比較老;從那時起,已經有了一些相關的改進。以這樣的查詢速度,我希望你正在使用 InnoDB;你正在挑戰 MyISAM 的極限。
磁碟是 SSD 嗎?如果是這樣,那麼查詢率應該沒有問題。由於您評論的是 CPU,而不是 I/O,我認為 I/O 不是問題?
正如已經提到的,您只使用了可用 CPU 的 6/16,因此沒有直接的崩潰威脅。不過,擔心是好事。
兩者都被正確索引。
抱歉,大多數說“正確索引”的人從未聽說過“複合”索引的好處。請提供查詢,
SHOW CREATE TABLE
以便我們進行驗證。