Mysql

Mysql手辦機由於高負載平均和CPU

  • December 14, 2015

高負載平均值的快照

Mysql 僅由一個應用程序使用,該應用程序只定期觸發查詢。當我重新啟動伺服器時,它執行了一段時間。然後使整個伺服器崩潰。

我的 my.cnf 文件

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
innodb_file_per_table=1
set-variable = max_connections=200
log-slow-queries=/var/lib/mysql/slow.log
safe-show-database
query_cache_size=128M
join_buffer_size=50M
tmp_table_size=128M
max_heap_table_size=128M
table_cache=10K
long_query_time =10
open_files_limit=50000
table_open_cache=20000
table_cache=20000
query_cache_limit=134217728
innodb_buffer_pool_size=900M

$$ mysqld_safe $$

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

從您的螢幕截圖中,您似乎在一台記憶體不足 4GB 的機器上執行。如果需要,MySQL 還可以使用約 4GB 的 SWAP 空間。您的設置將允許多少記憶體的粗略計算約為 11.5GB。

來自 mysqlcalculator.com: mysqlcalculator.com 估計

由於記憶體分配的複雜性,這只是對最壞情況的估計。

開箱即用,您join_buffer_size的產品非常大。這是一個可以在查詢中多次分配的每會話執行緒:

對於未使用索引的多個表之間的複雜連接,可能需要多個連接緩衝區。

我建議將其設置回預設值(在 5.6 中,即 256kb)。如果您發現許多查詢開始在解釋計劃中顯示“join_buffer”,那麼您應該檢查它們以更好地使用索引。如果失敗,您可能會考慮增加join_buffer_size特定查詢的 SESSION 級別。

table_open_cache=20000 table_cache=20000

很少有人需要超過幾百個table_open_cachetable_cache不再使用。

高 CPU(或平均負載)幾乎總是由缺少索引或編寫不佳的查詢引起的。開啟慢日誌並設置 long_query_time = 1; 然後查看慢日誌中顯示的內容。

或者,SHOW FULL PROCESSLIST;查看目前正在執行的內容。然後讓我們討論它們。請提供SHOW CREATE TABLE

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