Mysql

Mysql 配置建議 - CPU 太高

  • September 6, 2019

我的伺服器(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以便我們進行驗證。

引用自:https://dba.stackexchange.com/questions/247131