我有一个运行 MySQL + Apache 的专用服务器。我运行一个聊天脚本,每 3 秒轮询一次。现在昨晚我的 MySQL 服务器由于负载而死了。我想知道如何最大化我的 MySQL 线程以及 Apache 线程。
有人可以指出可以帮助我实现相同目标的 URL 吗?
感谢您的时间。
我有一个运行 MySQL + Apache 的专用服务器。我运行一个聊天脚本,每 3 秒轮询一次。现在昨晚我的 MySQL 服务器由于负载而死了。我想知道如何最大化我的 MySQL 线程以及 Apache 线程。
有人可以指出可以帮助我实现相同目标的 URL 吗?
感谢您的时间。
MySQL 性能信息的规范位置是MySQL Performance 博客。还有 Jeremy Zawodny 的《高性能 MySQL》一书。
您可能希望在应用程序中查看某种形式的连接池,它将重用现有的数据库连接,而不是为每个新会话创建一个新连接。这将减少打开一个新的 TCP 连接和 MySQL 所做的任何处理的开销。它还应该减少 MySQL 正在运行的空闲连接的数量,因为每个连接都需要一定数量的内存才能存在。
您可以做的另一件事是集成 memcached,以大幅减少数据库负载。Memcached 是内存中的分布式键值存储;就像一个网络附加的哈希图。您将修改您的应用程序以轮询 memcached,如果没有数据,则检查数据库。当您更改数据时,您将其写入数据库并使 memcached 中的数据无效。这意味着您将轮询明显更快的 memcached 而不是 MySQL。
一旦你实现了这些特性,并且只有当你实现了,你才能开始考虑调整 MySQL 参数。如果您不知道自己在做什么,那么很有可能将事情搞砸并最终得到一个比以前慢的数据库。在你尝试这个之前,我至少会阅读 MySQL Performance 这本书。
如果您能够花更多的钱,第一个改进是将您的数据库拆分到单独的服务器上。如果这还不够,您可以开始考虑使用主从复制设置,其中写入到主服务器,但读取在主服务器和从服务器之间传播。这对于相当常见的大量读取工作负载特别有效。