sql 执行时间

本文介绍了一种MySQL内置的性能分析工具,通过设置开启状态可在information_schema数据库中收集SQL执行细节,包括时间消耗、CPU使用及内存变化等,帮助开发者深入理解SQL执行过程。

今儿哥们找能在mysql看到sql执行时间的工具,在交流中提到了sql yog,但是它只记录到0ms,如果再精确就没有了。然后提到了phpmyadmin,还是可以的。又google了一下发现了这么个东西:MySQL Query Profiler

 

 

mysql> set profiling=1;##一旦执行了这句话,会自动在information_schema库里新建一个表为 PROFILING 来记录sql相关信息

 

 

mysql> use information_schema;
Database changed
mysql> show tables;
+---------------------------------------+
| Tables_in_information_schema          |
+---------------------------------------+
| CHARACTER_SETS                        |
| COLLATIONS                            |
| COLLATION_CHARACTER_SET_APPLICABILITY |
| COLUMNS                               |
| COLUMN_PRIVILEGES                     |
| ENGINES                               |
| EVENTS                                |
| FILES                                 |
| GLOBAL_STATUS                         |
| GLOBAL_VARIABLES                      |
| KEY_COLUMN_USAGE                      |
| PARTITIONS                            |
| PLUGINS                               |
| PROCESSLIST                           |
| PROFILING                              |
| REFERENTIAL_CONSTRAINTS               |
| ROUTINES                              |
| SCHEMATA                              |
| SCHEMA_PRIVILEGES                     |
| SESSION_STATUS                        |
| SESSION_VARIABLES                     |
| STATISTICS                            |
| TABLES                                |
| TABLE_CONSTRAINTS                     |
| TABLE_PRIVILEGES                      |
| TRIGGERS                              |
| USER_PRIVILEGES                       |
| VIEWS                                 |
+---------------------------------------+
28 rows in set (0.00 sec)

 

看到了吧 ,那现在咱们打开这个表看看里面的信息:

mysql> select * from PROFILING limit 5;
+----------+-----+--------------------------------+----------+----------+------------+-------------------+---------------------+--------------+---------------+---------------+-------------------+-------------------+-------------------+-------+------------------+--------------+-------------+
| QUERY_ID | SEQ | STATE                          | DURATION | CPU_USER | CPU_SYSTEM | CONTEXT_VOLUNTARY | CONTEXT_INVOLUNTARY | BLOCK_OPS_IN | BLOCK_OPS_OUT | MESSAGES_SENT | MESSAGES_RECEIVED | PAGE_FAULTS_MAJOR | PAGE_FAULTS_MINOR | SWAPS | SOURCE_FUNCTION  | SOURCE_FILE  | SOURCE_LINE |
+----------+-----+--------------------------------+----------+----------+------------+-------------------+---------------------+--------------+---------------+---------------+-------------------+-------------------+-------------------+-------+------------------+--------------+-------------+
|        1 |   1 | starting                       | 0.000023 | 0.000000 |   0.000000 |                 0 |                   0 |            0 |             0 |             0 |                 0 |                 0 |                 0 |     0 | NULL             | NULL         |        NULL |
|        1 |   2 | checking query cache for query | 0.000035 | 0.000000 |   0.000000 |                 0 |                   0 |            0 |             0 |             0 |                 0 |                 0 |                 0 |     0 | unknown function | sql_cache.cc |        1446 |
|        1 |   3 | checking permissions           | 0.000006 | 0.000000 |   0.000000 |                 0 |                   0 |            0 |             0 |             0 |                 0 |                 0 |                 0 |     0 | unknown function | sql_parse.cc |        5240 |
|        1 |   4 | Opening tables                 | 0.000050 | 0.000000 |   0.000000 |                 0 |                   0 |            0 |             0 |             0 |                 0 |                 0 |                 0 |     0 | unknown function | sql_base.cc  |        4517 |
|        1 |   5 | query end                      | 0.000005 | 0.000000 |   0.000000 |                 0 |                   0 |            0 |             0 |             0 |                 0 |                 0 |                 0 |     0 | unknown function | sql_parse.cc |        5004 |
+----------+-----+--------------------------------+----------+----------+------------+-------------------+---------------------+--------------+---------------+---------------+-------------------+-------------------+-------------------+-------+------------------+--------------+-------------+
5 rows in set (0.00 sec)

mysql>

 

根据QUERY_ID我们就可以进一步来查看具体信息了。

 

mysql> show profiles;
+----------+------------+------------------------------------+
| Query_ID | Duration   | Query                              |
+----------+------------+------------------------------------+
|        1 | 0.00014000 | select count(*) from info_2.users  |
|        2 | 0.00025800 | select count(*) from info_v2.users |
|        3 | 0.00043300 | show databases                     |
|        4 | 0.01406600 | SELECT DATABASE()                  |
|        5 | 0.00010600 | show tablels                       |
|        6 | 0.00682300 | show tables                        |
|        7 | 0.00043500 | show databases                     |
|        8 | 0.00012300 | SELECT DATABASE()                  |
|        9 | 0.00025700 | show tables                        |
|       10 | 0.00122200 | select * from PROFILING            |
|       11 | 0.00006100 | show profiles for query 2          |
+----------+------------+------------------------------------+
11 rows in set (0.00 sec)

mysql>

 

 

看某一个具体的sql的时间为:

 

 

mysql> show profile for query 2;
+--------------------------------+----------+
| Status                         | Duration |
+--------------------------------+----------+
| starting                       | 0.000028 |
| checking query cache for query | 0.000047 |
| checking permissions           | 0.000006 |
| Opening tables                 | 0.000010 |
| System lock                    | 0.000006 |
| Table lock                     | 0.000025 |
| init                           | 0.000013 |
| optimizing                     | 0.000006 |
| executing                      | 0.000012 |
| end                            | 0.000005 |
| query end                      | 0.000003 |
| freeing items                  | 0.000015 |
| storing result in query cache  | 0.000076 |
| logging slow query             | 0.000003 |
| cleaning up                    | 0.000003 |
+--------------------------------+----------+
15 rows in set (0.01 sec)

 

 

这个工具还可以看到cpu的使用情况:

mysql> show profile cpu for query 2;
+--------------------------------+----------+----------+------------+
| Status                         | Duration | CPU_user | CPU_system |
+--------------------------------+----------+----------+------------+
| starting                       | 0.000028 | 0.000000 |   0.000000 |
| checking query cache for query | 0.000047 | 0.000000 |   0.000000 |
| checking permissions           | 0.000006 | 0.000000 |   0.000000 |
| Opening tables                 | 0.000010 | 0.000000 |   0.000000 |
| System lock                    | 0.000006 | 0.000000 |   0.000000 |
| Table lock                     | 0.000025 | 0.000000 |   0.000000 |
| init                           | 0.000013 | 0.000000 |   0.000000 |
| optimizing                     | 0.000006 | 0.000000 |   0.000000 |
| executing                      | 0.000012 | 0.000000 |   0.000000 |
| end                            | 0.000005 | 0.000000 |   0.000000 |
| query end                      | 0.000003 | 0.000000 |   0.000000 |
| freeing items                  | 0.000015 | 0.000000 |   0.000000 |
| storing result in query cache  | 0.000076 | 0.000000 |   0.000000 |
| logging slow query             | 0.000003 | 0.000000 |   0.000000 |
| cleaning up                    | 0.000003 | 0.000000 |   0.000000 |
+--------------------------------+----------+----------+------------+
15 rows in set (0.00 sec)

 

还可以看到内存使用情况:

mysql> show profile MEMORY  for query 2;
+--------------------------------+----------+
| Status                         | Duration |
+--------------------------------+----------+
| starting                       | 0.000028 |
| checking query cache for query | 0.000047 |
| checking permissions           | 0.000006 |
| Opening tables                 | 0.000010 |
| System lock                    | 0.000006 |
| Table lock                     | 0.000025 |
| init                           | 0.000013 |
| optimizing                     | 0.000006 |
| executing                      | 0.000012 |
| end                            | 0.000005 |
| query end                      | 0.000003 |
| freeing items                  | 0.000015 |
| storing result in query cache  | 0.000076 |
| logging slow query             | 0.000003 |
| cleaning up                    | 0.000003 |
+--------------------------------+----------+
15 rows in set (0.00 sec)

 

 

不过 我们测试完毕 最后别忘记了关闭这个:

mysql> set profiling=0;
Query OK, 0 rows affected (0.00 sec)

 

 

这么好用的工具,比phpmyadmin强大多了吧!呵呵!

### 如何在 DBeaver 中查看 SQL 查询的执行时间 DBeaver 是一款功能强大的数据库管理工具,支持多种数据库类型,并提供了丰富的 SQL 查询调试和性能分析功能。要查看 SQL 查询的执行时间,可以通过以下几种方式实现: #### 1. 使用执行计划和结果面板 在 DBeaver 的查询编辑器中执行 SQL 语句后,结果面板会显示查询的执行时间,包括开始时间和结束时间。此外,可以通过查看执行计划来分析查询的性能瓶颈。 ```sql EXPLAIN ANALYZE SELECT * FROM table1 t1 INNER JOIN table2 t2 ON t1.id = t2.t1_id; ``` 执行计划会显示每个操作的执行时间、扫描行数和使用的索引等信息,帮助识别性能问题。 #### 2. 利用 DBeaver 的内置性能监控功能 DBeaver 提供了内置的性能监控功能,可以在执行 SQL 查询时实时显示执行时间。在查询执行完成后,DBeaver 的状态栏会显示执行耗时,通常以毫秒为单位。 #### 3. 使用本地 SQL 文件执行 对于复杂的 SQL 查询,建议将 SQL 语句保存为本地文件,并通过 DBeaver 加载并执行该文件。这种方式可以减少客户端资源的占用,提高执行效率,同时避免因界面更新频繁而导致的卡顿问题。批量执行还可以减少客户端和数据库之间的通信次数,从而降低网络延迟的影响[^1]。 #### 4. 查询数据库的历史 SQL 执行记录 某些数据库(如磐维数据库)提供了查询历史 SQL 执行时间的功能。例如,可以通过以下 SQL 查询执行时间超过 2 秒的历史语句: ```sql SELECT * FROM dbe_perf.statement_history WHERE timestampdiff(second, start_time::timestamp(0) without time zone, finish_time::timestamp(0) without time zone) > 2; ``` 此方法适用于需要分析长时间运行的 SQL 语句,帮助识别性能瓶颈[^2]。 ### 相关问题 1. 如何在 DBeaver 中优化 SQL 查询的执行效率? 2. DBeaver 的执行计划功能如何帮助分析查询性能? 3. 为什么执行本地 SQL 文件比在客户端直接运行更高效? 4. 如何通过数据库内置视图监控 SQL 执行时间? 5. SQL 查询执行时间过长时有哪些优化策略?
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值