Mysql

具有高 CPU 和記憶體使用率的 MySQL

  • December 23, 2013

在這裡,我們有一個具有 3.2GHz 四核處理器的 VPS,具有 2GB 的 RAM 和 4GB 的 SWAP,它需要與高密集型遺留系統一起工作(閱讀:錯誤編碼)。主要問題是 CPU (~80 - 100%) 和記憶體使用率 (約 50%) 會飛漲,即使在不那麼密集的使用情況下也是如此。

目前的/etc/my.cnf

[mysqld]
query_cache_type = ON
slow_query_log = OFF
long_query_time = 1
innodb_buffer_pool_size = 1GB
join_buffer_size = 16MB
key_buffer_size = 128MB
table_open_cache = 100000
innodb_thread_concurrency = 0
innodb_read_io_threads = 64
innodb_write_io_threads = 64
max_user_connections = 800
max_connections = 800
slow_launch_time = 1
thread_cache_size = 4
query_cache_size = 512MB

MySQL版本

mysql> SELECT VERSION();
+------------+
| VERSION()  |
+------------+
| 5.5.34-cll |
+------------+
1 row in set (0.00 sec)

MyISAM 索引長度

mysql> SELECT SUM(index_length) FROM information_schema.tables WHERE engine = 'MyISAM';
+-------------------+
| SUM(index_length) |
+-------------------+
|          82627584 |
+-------------------+
1 row in set, 2 warnings (4.55 sec)

InnoDB 索引長度

mysql> SELECT SUM(index_length) FROM information_schema.tables WHERE ENGINE = 'InnoDB';

+-------------------+
| SUM(index_length) |
+-------------------+
|         466092032 |
+-------------------+
1 row in set, 2 warnings (2.62 sec)

任何人都可以指導我解決或緩解此問題的第一步是什麼?

有些事情你沒有考慮到。

您給出的466092032只是索引佔用的字節數。InnoDB 儲存引擎正在將數據和索引頁面(每個 InnoDB 頁面為 16K)移入和移出緩衝池,因為它的大小和您不考慮的數據量。

參考我的文章。它將推薦如何調整key_buffer_size(在你的情況下應該是大約 84M)和innodb_buffer_pool_size的大小。

建議

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