Navicat 技术干货 | 如何查看关系型数据库(MySQL、PostgreSQL、SQL Server、 Oracle)查询的运行时间

上周,一位客户问我如何检查 MySQL 中的查询执行时间。
我给他讲了SQLProfiler的特点。
这是非常实用的。
运行查询时,执行时间将显示在“持续时间”列中。
还提供了一个非常有用的 SQL 查询来计算总时间。

我们来谈谈 PostgreSQL。
该数据库有一个计时器。
只需运行命令即可找出查询时间(以毫秒为单位)。
还有一个 pg_stat_statements 扩展。
这提供了更详细的SQL语句执行信息,非常有用。

接下来,在SQL Server中,使用SETSTATISTICSTIMEON命令打开时间统计,并使用动态管理视图sys.dm_exec_query_stats来获取更多编程查询执行时间数据。

对于Oracle来说,SQLPlus中的AUTOTRACE函数提供了执行计划和执行时间、CPU时间等统计信息。
V$SQL的动态性能视图还可以为特定语句提供更详细的执行情况和执行时间。

最后,Navicat 是一个非常有用的工具。
总时间和附加查询信息直接显示在主界面底部。
监控和优化查询性能非常直观。

无论如何,这取决于你。
这些方法可以帮助您更好地洞察数据库性能并实现更高效的操作。

在数据库中如何查询表的创建时间?

说实话,在接手项目时,在GaussDB(DWS)上查找建表时间让我很头疼。
三种方法各有其优点。
您将使用哪个选项取决于您的场景和权限。
我来给大家详细讲一下我的经历吧。

视图查询方法
坦率地说,DBA_OBJECTS视图是GaussDB(DWS)为您保存的数据库元数据的宝库。
使用此视图更容易检查创建时间。
但你要记住,这个东西需要系统管理员权限。
权利还不够吗?你所能做的就是凝视。

记得有一次项目交接前,客户要求查看所有表的创建时间。
当时我已经有了系统管理员权限,所以就直接开始工作了。
首先创建一个测试表,例如名为test_table,然后执行SQL:
sql SELECT object_name, create_time FROM dba_objects WHERE object_name = 'TEST_TABLE'
创建时间列是创建表的时间。
有趣的是,这个视图不仅可以检查创建时间,还可以检查最后修改时间。
具体来说,我执行了ALTER TABLE test_table ADD COLUMN id INT,再次查看,发现最后更新时间确实发生了变化。
我对此印象非常深刻,因为我当时告诉同事,这个观点比历史节目更准确。

如何查看审核日志
当您不想接触数据库结构而只想检查进程日志时,审核日志特别方便。
我在一个金融项目中使用了它。
当时客户要求很严格,所有DDL操作都必须留下痕迹。
配置审计日志需要有DBA权限,并且懂一些运维知识。

配置审计参数后,例如设置只审计建表操作,然后测试建表,审计日志中会有记录。
我使用的是GaussDB的审计管理工具(DWS)。
当我检查日志时,我可以看到构建时间精确到秒。
不过这种方法有一个缺陷,就是审计日志可能会很大,验证起来有点慢,尤其是在大表环境下。

如何查看 CN 记录
CN 记录,坦率地说,就是数据库中的运行记录。
要检查表创建时间,必须更改 postgresql.conf 配置文件并设置 log_minmsg_level 参数。
我当时在一个旧项目中尝试过。
当时的环境比较复杂,所以更改配置的时候必须要小心。

更改配置后,创建测试计划,然后搜索 CN 记录。
可以看到类似CREATE TABLE test_table...的记录,时间戳也有。
但说实话,CN寄存器比较原始,需要知道一些正则表达式才能验证,而且寄存器的大小也很大,对于初学者来说并不容易处理。

三种方法的比较
三种方法各有其优点和缺点。
视图查询最直接,但需要权限;审计日志适用于监管要求较高的场景,但验证速度较慢; CN记录适合深入调查,但需要了解一些运维流程。
我当时选择的方法主要是根据项目需求和权限。
如果您只是普通用户,可能无法查看查询,因此您应该考虑审核日志或 CN 日志。

总的来说,这都是我在实际工作中使用的三种方法,各有各的用途。
使用哪一种取决于您的具体情况。