暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

数据治理的利器——Oracle的V$SQL和PostgreSQL的pg_stat_statements

追梦IT人 2025-06-30
161

对于DBA而言,Oracle 数据库中的 V$SQL 视图是一个至关重要的动态性能视图,它提供了关于 SQL 语句执行性能的关键指标,如执行次数、CPU 时间、逻辑读、物理读等,这些信息可以帮助 DBA 和开发人员识别性能瓶颈。


当然对于数据治理人员而言,看到的是另外一面,全库的血缘关系,不管是历史的还是正在进行的,尤其是当对业务系统一无所知的时候。现在的数据治理绝大多数都是片面的,无非是静态的元数据管理,基于ETL工具过程产生的血缘关系,或者是基于存储过程产生的静态血缘关系。曾经有过梦想,想实现一个完全自动化的业务系统血缘关系,前几天也实现了一个简单的原型,后面有机会再慢慢完善吧。

再说回V$SQL,有兴趣的可以看一下SQL_Text字段和SQL_FullText字段。

字段名
数据类型
用途描述
SQL 标识信息


SQL_ID
VARCHAR2(13)
SQL 语句的唯一标识符,用于跟踪特定 SQL 语句
PLAN_HASH_VALUE
NUMBER
SQL 执行计划的哈希值,相同 SQL 可能因不同绑定变量使用不同执行计划
CHILD_NUMBER
NUMBER
SQL 子游标编号,同一 SQL_ID 可能有多个子游标
SQL_TEXT
CLOB
SQL 语句的文本内容(截断为 1000 字节)
SQL_FULLTEXT
CLOB
SQL 语句的完整文本内容
执行统计信息


EXECUTIONS
NUMBER
SQL 语句的执行次数
ELAPSED_TIME
NUMBER
总执行时间(微秒)
CPU_TIME
NUMBER
总 CPU 时间(微秒)
BUFFER_GETS
NUMBER
逻辑读次数(从缓冲区缓存读取的块数)
DISK_READS
NUMBER
物理读次数(从磁盘读取的块数)
ROWS_PROCESSED
NUMBER
处理的行数
FETCHES
NUMBER
提取的次数(SELECT 语句中客户端获取结果集的次数)
资源使用信息


SHARABLE_MEM
NUMBER
共享池中的共享内存大小(字节)
PERSISTENT_MEM
NUMBER
共享池中的持久内存大小(字节)
RUNTIME_MEM
NUMBER
共享池中的运行时内存大小(字节)
等待事件信息


APPLICATION_WAIT_TIME
NUMBER
应用等待时间(微秒)
CONCURRENCY_WAIT_TIME
NUMBER
并发等待时间(微秒)
USER_IO_WAIT_TIME
NUMBER
用户 I/O 等待时间(微秒)
PLSQL_EXEC_TIME
NUMBER
PL/SQL 执行时间(微秒)
JAVA_EXEC_TIME
NUMBER
Java 执行时间(微秒)
优化器和解析信息


OPTIMIZER_COST
NUMBER
优化器计算的成本
OPTIMIZER_MODE
VARCHAR2(10)
使用的优化器模式(ALL_ROWS, FIRST_ROWS_N 等)
OPTIMIZER_FEATURES_ENABLE
VARCHAR2(10)
优化器特性版本
会话和连接信息


PARSING_SCHEMA_NAME
VARCHAR2(30)
解析 SQL 的模式名
PARSING_USER_ID
NUMBER
解析 SQL 的用户 ID
MODULE
VARCHAR2(64)
执行 SQL 的应用模块名
ACTION
VARCHAR2(64)
执行 SQL 的应用操作名
SQL 计划和基线信息


SQL_PROFILE
VARCHAR2(30)
应用于 SQL 的 SQL 配置文件名
SQL_PATCH
VARCHAR2(30)
应用于 SQL 的 SQL 补丁名
SQL_PLAN_BASELINE
VARCHAR2(30)
应用于 SQL 的 SQL 计划基线名
时间信息


FIRST_LOAD_TIME
VARCHAR2(19)
SQL 第一次加载到共享池的时间
LAST_ACTIVE_TIME
VARCHAR2(19)
SQL 最后一次活跃的时间
其他信息


EXACT_MATCHING_SIGNATURE
NUMBER
精确匹配签名,用于 SQL 匹配
FORCE_MATCHING_SIGNATURE
NUMBER
强制匹配签名,用于 SQL 匹配(忽略字面量差异)
LOADS
NUMBER
SQL 加载到共享池的次数
INVALIDATIONS
NUMBER
SQL 失效的次数
VERSION_COUNT
NUMBER
SQL 的版本数量


当然 这只是Oracle数据库的用户,其实各数据库基本上也都有自己的秘密工具,以PostgreSQL为例,其实是pg_stat_statements,这个表只能说像v$SQL,当然要用的话,还是需要进行一些配置的。

pg_stat_statements 是 PostgreSQL 中最接近 Oracle V$SQL 的功能,它收集数据库中执行的 SQL 语句的统计信息。

启用方法:

首先需要在 postgresql.conf 中启用该扩展:

shared_preload_libraries = 'pg_stat_statements'

然后重启 PostgreSQL 服务,并在每个需要使用的数据库中创建扩展:

CREATE EXTENSION pg_stat_statements;

查询 SQL 执行统计信息:

SELECT * FROM pg_stat_statements;

执行结果如下:

粗略看了一下SQLServer、MySQL、达梦数据库、人大金仓都有类似的视图。

最后欢迎关注公众号:python与大数据分析


文章转载自追梦IT人,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论