SQL 查询超载服务器

SQL 查询超载服务器

我有一个 php 文件,它被频繁调用来检查外部应用程序的会话。我不知道每秒有多少次调用,但我认为每秒可能有 20-100 次调用。

但是这个 .php 文件包含一个更新一行的 SQL 查询。一旦我不注释掉这些行,整个数据库的速度就会大大减慢,最终我的论坛就无法访问了。我认为这是服务器问题(例如 IOPS 太多?)。不幸的是,我不知道如何找到速度减慢的确切原因,也不知道如何确定每秒对 php 文件的调用次数。

这是非常简单的 SQL 查询(where 子句仅包含主键):

UPDATE bot_sessions SET ip_address = :ip_address, renewal_count = renewal_count + 1
       WHERE username = :username AND session_token = :session_token

所以有两个问题:

  1. 我怎样才能知道每秒调用我的特定 php 文件的频率?
  2. 一旦使用此更新查询,我如何才能找到整个数据库变慢的原因?

答案1

通过查看 Web 服务器日志,您应该能够找出特定 PHP 文件的调用频率。还有其他一些技巧 - 例如使用 Google Analytics(不太准确)或更新文件/计数器(更耗资源)。

正如 @ma.tome 所说,监控利用率可以为您提供一个良好的开端,并且通常很有用。以 135% 运行的 Mysql 进程意味着它使用了超过 1 个 CPU。(如果您有 4 个 CPU,则总数为 400%)。运行 vmstat 将为您提供 IO 信息。

另一件事可能是开始在数据库中记录查询时间。此外,检查索引 - 取决于您的应用程序,如果尚未索引,您可以通过在 bot_sessions 中为用户名创建索引来获得巨大的性能提升。(不确定用户名或 session_token 是否是您指定的主键,可能需要考虑在非主键上创建索引)- 无论哪种方式,where 子句包含的不仅仅是主键。

另外,您的系统可能只是内存不足。看看您使用了多少交换空间 - 如果需要,可以投入更多内存来解决问题或减少 vm.swappiness。

相关内容