SQL 查询的性能指标计算

Performance metrics calculation for SQL queries

我在 MySQL 服务器 .

上有两个数据库 A 和 B

A是原始数据库,B是从A派生的,改变了一些table的格式。因此,对于 db A 中的每个 table_A,在 db B 中都有一个相应的 table table_B,对于 table_A 中的每一行,在 table_B 中都有一个相应的行代表完全相同的 table 条目,格式不同。

我很确定解释 A 和 B 之间的这种“格式差异”与我要问的问题无关。

我实际上使用 JavaJDBC 来与 MySQL 服务器交互。

我有许多 "SELECT" 数据库 A 查询和数据库 B 的等效查询。我想重复执行它们并计算一些指标,如下所示:

execute SELECT query on db A and calculate metrics;
execute equivalent SELECT query on db B and calculate metrics;
UPDATE data stored in db A and db B by a percentage 
loop

最终目标是比较"same"查询在两个孪生数据库上的性能,看看“格式差异”对查询性能有什么影响.

我的问题:

有很多指标是您无法获得的。但这是我喜欢得到的一组:

FLUSH STATUS;
SELECT ...; -- or whatever query
SHOW SESSION STATUS LIKE 'Handler%';

最后一条命令可能给出类似

的内容
mysql> SHOW SESSION STATUS LIKE 'Handler%';
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| Handler_commit             | 1     |
| Handler_delete             | 0     |
| Handler_discover           | 0     |
| Handler_external_lock      | 2     |
| Handler_mrr_init           | 0     |
| Handler_prepare            | 0     |
| Handler_read_first         | 1     |
| Handler_read_key           | 1     |
| Handler_read_last          | 0     |
| Handler_read_next          | 5484  |  -- rows in the table; so it did a table scan
| Handler_read_prev          | 0     |
| Handler_read_rnd           | 7     |
| Handler_read_rnd_next      | 14    |
| Handler_rollback           | 0     |
| Handler_savepoint          | 0     |
| Handler_savepoint_rollback | 0     |
| Handler_update             | 0     |
| Handler_write              | 13    |  -- wrote to a tmp table 13 rows after a GROUP BY
+----------------------------+-------+
18 rows in set (0.00 sec)

缓存来来去去,所以时间甚至可以相差 10 倍。另一方面,处理程序非常一致。他们让我洞察正在发生的事情。

如果您运行正在通过 JDBC,运行 像非 SELECT 一样进行 FLUSH; 运行 像 SELECT 这样的 SHOW 给你 2 列。