调整MySQL设置来处理大量的用户

我已经开发了一个显然取决于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议,因为对于“盲目”诊断来说,更具体的优化是困难/不可能的:

  • 默认的my.cnf使用非常低端的设置(至less我见过的所有默认设置)。 有很多例子my.cnf给你一个粗略的想法(search“mysql my.cnf优化”)。 请注意,您需要调整的具体设置取决于您的应用程序,因此适合其他人使用的设置可能不适合您。
  • 说“250用户”是不够的信息。 应用程序读/写很重吗? 每个用户每秒有多less个查询?
  • 数据库的devise是否考虑到性能? 每个表是否都有用于常用查询的索引设置? 查询是简单的,复杂的还是超级复杂的? 请注意查询中的“疑难杂症”,这些问题可能会导致大量性能问题。 您是使用“WHERE”过滤数据库端的logging,还是通过请求并忽略每个请求的多个logging来在服务器端进行过滤?
  • 对于具有正确my.cnf设置的200MB数据库,整个数据库工作集应该很容易适应RAM,特别是对于具有32GB内存的服务器。
  • 如果您的应用程序读取复杂的查询,请查看caching策略以减lessMySQL服务器上的负载。
  • 作为一个比较:我有一个MySQL服务器,你的服务器的容量(CPU / RAM)的五分之一,平均每秒100个MediaWiki站点查询,总是空闲90-95%。 虽然我不知道应用程序/设置的详细信息,但我想通过对my.cnf进行一些调整以及某些应用程序和数据库分析/优化,可以将性能提高一到两个数量级。
  • 如果你认真对待MySQL的开发,请查看“ 高性能MySQL ”一书。 它是为新手用户设置和使用MySQL的一个很好的概述。 MySQL高性能博客也是一个很好的网站。