Mysql
具有高 CPU 和記憶體使用率的 MySQL
在這裡,我們有一個具有 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)
任何人都可以指導我解決或緩解此問題的第一步是什麼?
有些事情你沒有考慮到。
- MyISAM 將索引頁記憶體到 Key Cache
- InnoDB在 Buffer Pool 中記憶體數據和索引頁
- 我寫了一篇關於此的文章:InnoDB 和 MyISAM 之間的主要區別是什麼?
您給出的
466092032
只是索引佔用的字節數。InnoDB 儲存引擎正在將數據和索引頁面(每個 InnoDB 頁面為 16K)移入和移出緩衝池,因為它的大小和您不考慮的數據量。請參考我的文章。它將推薦如何調整key_buffer_size(在你的情況下應該是大約 84M)和innodb_buffer_pool_size的大小。
建議
- 增加足夠的 VPS RAM 以完全容納您的數據。
- 由於您在 VPS 中,因此降低了讀寫執行緒
- 禁用查詢記憶體,因為它會減慢 InnoDB 的速度:請參閱我的文章頻繁查詢記憶體失效的成本是否值得?