Mysql
Mysql手辦機由於高負載平均和CPU
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。
由於記憶體分配的複雜性,這只是對最壞情況的估計。
開箱即用,您
join_buffer_size
的產品非常大。這是一個可以在查詢中多次分配的每會話執行緒:對於未使用索引的多個表之間的複雜連接,可能需要多個連接緩衝區。
我建議將其設置回預設值(在 5.6 中,即 256kb)。如果您發現許多查詢開始在解釋計劃中顯示“join_buffer”,那麼您應該檢查它們以更好地使用索引。如果失敗,您可能會考慮增加
join_buffer_size
特定查詢的 SESSION 級別。
table_open_cache=20000 table_cache=20000
很少有人需要超過幾百個
table_open_cache
。table_cache
不再使用。高 CPU(或平均負載)幾乎總是由缺少索引或編寫不佳的查詢引起的。開啟慢日誌並設置 long_query_time = 1; 然後查看慢日誌中顯示的內容。
或者,
SHOW FULL PROCESSLIST;
查看目前正在執行的內容。然後讓我們討論它們。請提供SHOW CREATE TABLE
。