我的MYSQL存在高CPU问题,使用“top”(linux)显示90%的cpu峰值。
我试图找到问题的根源,打开常规日志和慢查询日志, 慢查询日志没有找到任何内容。
Db包含一些小表和一个包含近10万行的大表,数据库引擎是MyIsam。奇怪的是我注意到在大桌子上,选择,插入非常快,但更新需要0.2 - 0.5秒。
已经使用过优化和修复而没有改进。
表经常更新,这可能是高CPU%的来源吗?
我该怎么做才能改善这个?
答案 0 :(得分:1)
你的MySQL服务器上是否有神经网络设置?常规的神经节指标以及神经节的mysql_stats插件可能会揭示正在发生的事情。
答案 1 :(得分:1)
我发现mytop非常有帮助。
答案 2 :(得分:0)
首先,您能定义哪个是超载服务器的查询?在这种情况下,请将其粘贴在这里,也许我们可以帮您解决一下。 另外,请查看表格结构。具有许多索引的表可能具有较慢的更新时间跨度。 我还建议您向我们提供有关该问题的更多数据。
希望有所帮助,
答案 3 :(得分:0)
首先要考虑的是索引,但由于您的选择和插入速度很快,因此不适合。它通常是插入和更新,会在“过度索引”表上减慢速度。这留下了触发器...你在那张桌子上有一个更新触发器,它可能会做很多工作并导致尖峰吗?
答案 4 :(得分:0)
一个耗时0.5秒的查询将不会显示在100%的最高CPU中。太小了。 也可以试试“show full processlist”;验证你my.cnf,甚至尝试减少慢查询超时。慢查询日志可以捕获任何足够慢的东西。
答案 5 :(得分:0)
基于表的键,该表上的任何更新语句都很慢。 例如UPDATE客户SET CustMoney = 1 WHERE CustUID ='someid'
CREATE TABLE IF NOT EXISTS `customers` (
`CustFullName` varchar(45) NOT NULL,
`CustPassword` varchar(45) NOT NULL,
`CustEmail` varchar(128) NOT NULL,
`SocialNetworkId` tinyint(4) NOT NULL,
`CustUID` varchar(64) character set ascii NOT NULL,
`CustMoney` bigint(20) NOT NULL default '0',
`LastIpAddress` varchar(45) character set ascii NOT NULL,
`LastLoginTime` datetime NOT NULL default '1900-10-10 10:10:10',
`SmallPicURL` varchar(120) character set ascii default '',
`LargePicURL` varchar(120) character set ascii default '',
`LuckyChips` int(10) unsigned NOT NULL default '0',
`AccountCreationTime` datetime NOT NULL default '2009-11-11 11:11:11',
`AccountStatus` tinyint(4) NOT NULL default '1',
`CustLevel` int(11) NOT NULL default '0',
`City` varchar(32) NOT NULL default '',
`State` varchar(32) NOT NULL default '0',
`Country` varchar(32) NOT NULL default '',
`Zip` varchar(16) character set ascii NOT NULL,
`CustExp` bigint(20) NOT NULL default '0',
PRIMARY KEY (`CustUID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
同样我不确定这是高CPU使用率的原因,但在我看来,更新语句花费那么长时间是不正常的。 (0.5秒)
该表目前每秒更新最多5次,将来会更频繁地更新。
答案 6 :(得分:0)
这是什么类型的服务器?我已经看过slooow写入和虚拟机上相对快速的读取。 http://en.wikipedia.org/wiki/Hdparm有什么要说的? 你有什么cpu / ram?负载平均值是什么?