24 天内 10 亿次 mysql 查询?可能有什么问题吗?

rov*_*ser 6 mysql

我写了一个数据密集型网站,但 phpmyadmin 告诉我在 24 天内有 10 亿次查询。这个好像有点高。

我知道使用该网站的人并不多,因为虽然它是实时的,但实际上没有任何数据。从我一直在为测试做的查询中,我预计会有成百上千的东西。

有什么问题吗?

编辑:查询数量似乎以 500 次/秒的速度增长。这对我来说都是全新的,所以我不知道是不是有什么问题。

Rol*_*DBA 10

MySQL 将在内部调用查询。实际上,您在 MySQL 中所做的几乎任何事情都是查询。

如果您打开常规日志或慢查询日志,mysqld 所做的一切都会被记录下来。

如果您启用了--log-queries-not-using-indexes,则所有不涉及索引的内容都会出现在慢速日志中。

假设您运行此查询:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| annarbor           |
| dude               |
| example            |
| garbage            |
| lovesh             |
| mysql              |
| performance_schema |
| replagdb           |
| stuff              |
| test               |
| tostinni           |
| wordpress          |
| zipcodes           |
+--------------------+
14 rows in set (0.06 sec)
Run Code Online (Sandbox Code Playgroud)

是的,显示数据库;是一个查询。事实上,information_schema 等价于什么???

mysql> select schema_name "Database" from information_schema.schemata;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| annarbor           |
| dude               |
| example            |
| garbage            |
| lovesh             |
| mysql              |
| performance_schema |
| replagdb           |
| stuff              |
| test               |
| tostinni           |
| wordpress          |
| zipcodes           |
+--------------------+
14 rows in set (0.08 sec)
Run Code Online (Sandbox Code Playgroud)

表 information_schema.schemata 有索引吗???

mysql> show create table information_schema.schemata\G
*************************** 1. row ***************************
       Table: SCHEMATA
Create Table: CREATE TEMPORARY TABLE `SCHEMATA` (
  `CATALOG_NAME` varchar(512) NOT NULL DEFAULT '',
  `SCHEMA_NAME` varchar(64) NOT NULL DEFAULT '',
  `DEFAULT_CHARACTER_SET_NAME` varchar(32) NOT NULL DEFAULT '',
  `DEFAULT_COLLATION_NAME` varchar(32) NOT NULL DEFAULT '',
  `SQL_PATH` varchar(512) DEFAULT NULL
) ENGINE=MEMORY DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

不,不是的。所以,显示数据库;将登陆一般日志和慢日志(启用 --log-queries-not-using-indexes)

因此,许多我们认为不会构成查询的操作可能只是一个查询,而是 mysqld 内部的。

如果您使用任何连接到 mysqld 的监控工具,这也会增加查询计数。

例子:

mysql> show global status like 'uptime'; select * from information_schema.global_status where variable_name='uptime';

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Uptime        | 613   |
+---------------+-------+
1 row in set (0.00 sec)

+---------------+----------------+
| VARIABLE_NAME | VARIABLE_VALUE |
+---------------+----------------+
| UPTIME        | 613            |
+---------------+----------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

只是检索 mysqld 的正常运行时间是一个查询。在内部,MySQL 如何计算正在执行的查询?这里有两个状态变量可能会有所启发:

  • 查询:服务器执行的语句数。与 Questions 变量不同,此变量包括在存储程序中执行的语句。它不计算 COM_PING 或 COM_STATISTICS 命令。

  • 问题:服务器执行的语句数。与 Queries 变量不同,这仅包括客户端发送到服务器的语句,而不包括在存储程序中执行的语句。此变量不计算 COM_PING、COM_STATISTICS、COM_STMT_PREPARE、COM_STMT_CLOSE 或 COM_STMT_RESET 命令。

请不要担心您的 MySQL 服务器是否受到监控,因为调用状态变量的监控正在内部运行查询以检索请求的数据。

10 亿在 24 天内是

  • 每天 4170 万次查询
  • 每小时 173.6 万次查询
  • 每分钟 28,935 次查询
  • 每秒 482 次查询

对于正在监控的 MySQL 实例,这些数字一点也不牵强。

如果您使用 MySQL Workbench、MySQL Administrator 或 phpMyAdmin,这些产品生成或更新的任何页面都会调用这些小的状态查询并快速运行数字。