我已经开发了一个显然取决于MySQL查询的PHP游戏。 我运行它在一个怪物服务器:英特尔至强7550与32GB内存(红帽x86_64 ES 5.0)安装了cPanel。 我在Facebook上发布了这个游戏,只有250个用户可以在CPU开始使用之前使用它。
我有“顶”,并监视CPU使用率。 MySQL一度使用高达1600%! 所有其他的东西都在3%左右。 显然我需要调整mysql的设置才能在更大的范围内释放这个设置。
道歉,如果这个问题是模糊的。 我的调整mysql服务器设置的知识是非常有限的。 我需要调整哪些设置? 我应该给他们什么? 我猜测记忆是其中之一? 我预测有10,000个会话同时运行的用户群。 用我目前的设置,我只能有250.任何有经验的服务器pipe理员的指导将非常感激。
我预感到的问题..
1.)Mysql通过devise为成百上千个连接使用了大量的内存。
基本上你需要设置configuration来帮助最大限度地减less内存使用
我不认为这是一个记忆问题
使用200Mb和32Gb的数据库,您不应该达到最大内存
你只有250个用户,正在最大限度的CPU
2.)Mysql的devise,给一个连接/线程的核心(这可以共享)
这显然可以与许multithreading共享,但1线程不能违反核心。
你看到的问题是太多的“慢/重”查询,从而最大化每个核心。
所以你不能占用更多的用户,因为CPU处于极限。
– 开始分析您的查询
– 索引正确的读取
– 如果需要,使用写主机和读取从机
一些问题
What is your ratio READS / WRITES??? Have you tried Slow_query logging ( set it to 1 second )? Have you used "explain" on queries to see if indexing is working? Have you considered a job queue for writes? Are you using the mysql cache effectively for reads?
实际上你的问题是不好的查询/插入..
如果你可以解决这个问题我们可以帮助你的configuration,以最大限度地减less内存使用量
configuration基本上不提供太多的CPU使用帮助,这取决于你的代码!
希望这是明确的:D
我只有几点你应该考虑。
使用频繁的数据库服务器上的32GB内存不是“怪物”,而是取决于数据库的使用方式。 如果您的请求数量众多,并且数据(请求的数据)不能全部放入RAM中,那么您的磁盘系统会在数据存储上敲击I / O,这会遇到严重的问题。 这听起来不像你需要更多的RAM,因为你最大的CPU。
1600%的CPU使用率等于X7550的最大16个逻辑(8个物理)内核。 您应该注意,数据库服务器上的超线程技术受到很大的争议,因为它通常会给您提供更多的写入性能和更less的读取性能。 另一方面,禁用它并不能解决你的问题。
这听起来像我的数据库和/或你的应用程序devise不是很好,在优化和处理时间方面。 250个用户从字面上杀死8×2,4GHz内核并不是我所说的普通的东西,也不是mysql服务器设置可以为你解决的问题。
我已经投票把这个问题转移到堆栈溢出。
这是相当基础的,但是“mysql性能调优引导脚本”( http://www.day32.com/MySQL/ )提供了一些很好的入门build议。
目前它处理以下的推荐:
- 慢查询日志
- 最大连接数
- 工作者线程
- 关键缓冲区
- 查询caching
- 分类缓冲区
- 加盟
- 临时表
- 表(Open&Definition)caching
- 表locking
- 表扫描(read_buffer)
- Innodb状态
我可以给出一些一般的build议,因为对于“盲目”诊断来说,更具体的优化是困难/不可能的: