我最近在网络服务器上遇到了很多麻烦。我的网页加载速度非常慢,当我检查htop时,我注意到mysql进程使用了大约800-1000%的CPU。我已经尝试了mysqltuner建议的所有内容,但我还没有看到改进。
以下是mysqltuner结果:
--------一般统计------------------------------------- -------------
[ - ] MySQLTuner脚本的跳过版本检查
[确定]当前运行支持的MySQL版本5.1.54-log
[确定]在64位架构上运行
--------存储引擎统计------------------------------------ -------
[ - ]状态:+存档-BDB -Federated + InnoDB -ISAM -NDBCluster
[ - ] MyISAM表中的数据:58M(表:243)
[ - ] InnoDB表中的数据:34M(表:303)
[!!]总碎片表:304
--------绩效指标------------------------------------- ------------
[ - ] Up:2d 0h 10m 24s(3M q [20.584 qps],594K conn,TX:2B,RX: 373M)
[ - ]读/写:78%/ 22%
[ - ]总缓冲区:全局652.0M +每线程14.6M(最多250个线程)
[确定]最大可能内存使用量:4.2G(已安装RAM的82%)
[确定]慢查询:1%(50K / 3M)
[确定]可用连接的最高使用率:46%(115/250)
[确定]密钥缓冲区大小/总MyISAM索引:256.0M / 18.7M
[确定]密钥缓冲命中率:100.0%(3B缓存/ 46K读取)
[确定]查询缓存效率:49.9%(785K缓存/ 1M选择)
[!!]每天查询缓存李子:24539
[确定]需要临时表的排序:0%(0个临时排序/ 91K排序)
[!!]连接没有索引:199247
[!!]在磁盘上创建的临时表:29%(磁盘上159K /总计547K)
[确定]线程缓存命中率:99%(创建118个/ 594K连接)
[确定]表缓存命中率:66%(1K开放/ 1K开启)
[确定]使用的打开文件限制:23%(1K / 4K)
[确定]立即获取表锁:99%(1M立即/ 1M锁)
[OK] InnoDB数据大小/缓冲池:34.4M / 128.0M
--------推荐-------------------------------------- ---------------
一般建议:
Run OPTIMIZE TABLE to defragment tables for better performance Adjust your join queries to always utilize indexes When making adjustments, make tmp_table_size/max_heap_table_size equal Reduce your SELECT DISTINCT queries without LIMIT clauses
要调整的变量:
query_cache_size (> 80M) join_buffer_size (> 12.0M, or always use indexes with joins) tmp_table_size (> 180M) max_heap_table_size (> 180M)
我可以做些什么来提高网页加载速度并减少CPU上的mysql压力?
答案 0 :(得分:2)
正确索引表格应该有所帮助,请参阅create index syntax页面。另外,您可以查看有关optimization的页面。我最近经历了一些性能问题并决定将MySQL升级到5.5以利用多个CPU内核;我知道早期版本中的一些错误没有使用但只有一个核心等,但我现在找不到一个很好的参考。
另外,在/etc/my.cnf文件中尝试这样的设置:
# improvements for InnoDB:
innodb_buffer_pool_size=8G
innodb_log_buffer_size=512M
innodb_log_file_size=256M
# improvements for MyISAM:
key_buffer_size=2G
建议的值会根据服务器的RAM量而有所不同,所以值得一试。在这种情况下,我有20 GAG的RAM。
如果您有疑问,请使用MyISAM作为网页。 MySQL 5.5在使用InnoDB方面要成熟得多,但早期版本在InnoDB上存在问题。
答案 1 :(得分:1)
可能需要优化对数据库的查询..而且我也看到有很多没有索引的JOIN查询。在用于JOIN的字段上索引表会有所帮助。