我有大约150个cron作业,每隔3秒就有6到10个插入。 还有大量的select语句每3秒发生一次。
我的问题是,事情工作一段时间,然后开始搞乱了,只是似乎没有回应。 我有16BG的内存,只有20%被使用,我的CPU使用率约为2.0。 这让我想我有一些select,我可以调整的地方。
我试图在我的其他dedi盒上弄乱文件描述符,但由于某种原因最终失去了root访问权限,所以如果有人能指点我一个非常好的教程,只是想再次这样做。
MySQL的Opened_tables是1560万(这很多?)
我只想给出一些关于设置的一般性build议,我应该调整一下,并且让服务器运行良好。 我明显有可用的资源,但我认为MySQL / Apache在某种程度上是有限的。
服务器规格:Linux CentOS 5与Plesk 9.5.4和MySQL 5.0。
我非常感谢任何帮助提前。
我可以推荐你使用MySQL调谐器 。 这个perl脚本为您提供了许多可以设置或更改的configurationvariables的build议。 不知道你的确切统计数字,我可能不会给你一个更好的答案。
我也build议你也看看MySQL网站上的每个variablesMySQLtunerbuild议你到底在做什么。 然后,您将了解许多可以设置的新variables。 此外,在第一次更改variables之后,应该在大约48小时后运行此工具。 通常你会得到一些更好的build议。
你用更多的innodb表或myisam? 升级到MySQL 5.5的选项?
更新:关于你的问题关于很好的教程。 我强烈推荐你阅读MySQL性能博客 。 真的有很多很好的文章(我已经链接到一个)。
请记住myisam表在插入或更新期间被locking,所以select查询将会等待。
你可以使用并发插入选项加速插入,但不要期待奇迹。 http://dev.mysql.com/doc/refman/5.0/en/concurrent-inserts.html
我会说切换到5.5.x和InnoDB将是一个聪明的举动…
我发现MySQL Tuning Primer脚本(页面上的第一项)比前面提到的MySQL Tuner脚本更有用。
假设所有的东西都可以用任何一个脚本检查出来,那么你有没有考虑过使用EXPLAIN特性来优化你的查询呢?
正如其他人所提到的,InnoDB提供了对MyISAM表locking的行级locking。 虽然InnoDB的速度在MySQL 5.5中有了很大的提高,但任何5.x版本都应该提高。
LOAD DATA INFILEfunction比插入function快得多。 如果有可能走这条路线,那就这样做。 如果你的表有很多索引,那么确保你的key_buffer_size足够大。 如果你只使用20%的内存,这是一个专用的MySQL服务器,那么你当然可以改善你的一般configuration,以获得更好的性能。