计划缓存视图

计划缓存视图包含记录执行计划的缓存状态、执行统计的相关信息以及计划信息。

GV$PLAN_CACHE_STAT

GV$PLAN_CACHE_STAT 视图用于记录每个计划缓存的状态,每个计划缓存在该视图中有一条记录。

字段名称

类型

描述

SVR_IP

VARCHAR2(32)

服务器的 IP 地址

SVR_PORT

NUMBER(38)

端口号

SQL_NUM

NUMBER(38)

plan_cache 涉及 SQL 条数

MEM_USED

NUMBER(38)

plan_cache 已经使用的内存

MEM_HOLD

NUMBER(38)

plan_cache 持有的内存

ACCESS_COUNT

NUMBER(38)

访问 plan_cache 的次数

HIT_COUNT

NUMBER(38)

命中 plan_cache 的次数

HIT_RATE

NUMBER(38)

plan_cache 的命中率

PLAN_NUM

NUMBER(38)

Plan 的个数

MEM_LIMIT

NUMBER(38)

plan_cache 的内存上限

HASH_BUCKET

NUMBER(38)

plan_cache Hash Map 中的 Bucket 的个数

STMTKEY_NUM

NUMBER(38)

plan_cachestmt_key 的个数

GV$PLAN_CACHE_PLAN_STAT

GV$PLAN_CACHE_PLAN_STAT 用于记录计划缓存中所有执行计划的具体信息及每个计划总的执行统计信息,每个执行计划在该视图中有一条记录。

字段名称

类型

描述

TENANT_ID

NUMBER(38)

租户 ID

SVR_IP

VARCHAR2(32)

服务器的 IP 地址

SVR_PORT

NUMBER(38)

服务器端口号

PLAN_ID

NUMBER(38)

执行计划的 ID

SQL_ID

VARCHAR2(32)

该条 SQL 的 ID

TYPE

NUMBER(38)

对于 SQL 计划的缓存,该字段表示执行计划的类型:

  • 1 表示本地计划(Local Plan)

  • 2 表示远程计划(Remote Plan)

  • 3 表示分配计划(Distribute Plan)

对于 PL 对象缓存,该字段表示 PL 对象的类型:

  • 1:表示程序

  • 2:表示函数

  • 3:表示包

  • 4:表示匿名块

DB_ID

NUMBER(38)

数据库的 ID

IS_BIND_SENSITIVE

NUMBER(38)

该计划是否需要打开 ACS

IS_BIND_AWARE

NUMBER(38)

该计划已经打开了 ACS

STATEMENT

VARCHAR2(65536)

参数化后的 SQL 语句

QUERY_SQL

VARCHAR2(65536)

第一次加载计划时查询的原始 SQL 语句

SPECIAL_PARAMS

VARCHAR2(4096)

表示不可参数化的参数值

PARAM_INFOS

VARCHAR2(65536)

表示参数化信息

SYS_VARS

VARCHAR2(4096)

影响缓存对象的系统变量的值

PLAN_HASH

NUMBER(38)

SQL 执行计划的哈希值

FIRST_LOAD_TIME

TIMESTAMP(6) WITH LOCAL TIME ZONE

第一次被加载时间

SCHEMA_VERSION

NUMBER(38)

Schema 版本号

MERGED_VERSION

NUMBER(38)

当前缓存的 Plan 对应的合并版本号

LAST_ACTIVE_TIME

TIMESTAMP(6) WITH LOCAL TIME ZONE

上一次被执行时间

AVG_EXE_USEC

NUMBER(38)

平均执行时间

SLOWEST_EXE_TIME

TIMESTAMP(6) WITH LOCAL TIME ZONE

最慢执行时间戳

SLOWEST_EXE_USEC

NUMBER(38)

最慢一次执行耗时

SLOW_COUNT

NUMBER(38)

当前 SQL 计划成为慢查询的次数

HIT_COUNT

NUMBER(38)

被命中次数

PLAN_SIZE

NUMBER(38)

缓存对象占用的内存大小

EXECUTIONS

NUMBER(38)

执行次数

DISK_READS

NUMBER(38)

所有执行物理读次数

DIRECT_WRITES

NUMBER(38)

所有执行写盘的次数

BUFFERS_GETS

NUMBER(38)

所有执行逻辑读次数

APPLICATION_WATI_TIME

NUMBER(38)

所有执行所有 Application 类事件的总时间

CONCURRENCY_WAIT_TIME

NUMBER(38)

所有执行所有 Concurrency 类事件的总时间

USER_IO_WAIT_TIME

NUMBER(38)

所有执行所有 USER_IO 类事件的总时间

ROWS_PROCESSED

NUMBER(38)

所有执行选择的结果行数或执行更改表中的行数

ELAPSED_TIME

NUMBER(38)

所有执行接收到请求到执行结束消耗时间

CPU_TIME

NUMBER(38)

所有执行消耗的 CPU 时间

LARGE_QUERYS

NUMBER(38)

被判断为大查询的次数

DELAYED_LARGE_QUERYS

NUMBER(38)

被判断为大查询且被丢入大查询队列的次数

DELAYED_PX_QUERYS

NUMBER(38)

并行查询被丢回队列重试的次数

OUTLINE_VERSION

NUMBER(38)

Outline 版本号

OUTLINE_ID

NUMBER(38)

Outline 的 ID。

如果为 -1 表示不是通过绑定 Outline 生成的计划

OUTLINE_DATA

VARCHAR2(65536)

计划对应的 Outline 信息

HINTS_INFO

VARCHAR2(65536)

SQL 计划的 Hint 信息

HINTS_ALL_WORKED

NUMBER(38)

SQL 计划中的 Hint 是否都已经生效

ACS_SEL_INFO

VARCHAR2(65536)

当前 ACS 计划对应的选择率空间

TABLE_SCAN

NUMBER(38)

表示该查询是否为主键扫描

EVOLUTION

NUMBER(38)

表示该执行计划是否在演进中

EVO_EXECUTIONS

NUMBER(38)

演进次数

EVO_CPU_TIME

NUMBER(38)

演进过程中总的执行 CPU 时间

TIMEOUT_COUNT

NUMBER(38)

超时次数

PS_STMT_ID

NUMBER(38)

Prepare Statement 的 ID

SESSID

NUMBER(38)

缓存对象所在的 Session ID

TEMP_TABLES

VARCHAR2(65536)

SQL 计划中包含的临时表表名。如果没有临时表,字段为空。

IS_USE_JIT

NUMBER(38)

SQL 计划是否开启了表达式编译执行

OBJECT_TYPE

VARCHAR2(65536)

缓存对象的类型:

  • SQL_PLAN

  • PROCEDURE

  • FUNCTION

  • PACKAGE

  • ANONYMOUS

PL_SCHEMA_ID

NUMBER(38)

对于非匿名块的 PL 对象,字段为缓存对象的 Schema ID;对于匿名块,字段与 PS_STMT_ID 相同;对于 SQL 计划,该字段无意义。

IS_BATCHED_MULTI_STMT

NUMBER(38)

表示是否为 Batched Multi Stmt 优化的计划

GV$PLAN_CACHE_PLAN_EXPLAIN

GV$PLAN_CACHE_PLAN_EXPLAIN 用于查询某条 SQL 在计划缓存中的执行计划。

注意

  • 如果查询 GV$PLAN_CACHE_PLAN_EXPLAIN 表, 则需要指定 IPPortTENANT_IDPLAN_ID 等条件。

  • 如果查询 V$PLAN_CACHE_PLAN_EXPLAIN 表, 则需要指定 TENANT_IDPLAN_ID 等条件。

字段名称

类型

描述

TENANT_ID

NUMBER(38)

租户 ID

SVR_IP

VARCHAR2(32)

服务器 IP 地址

SVR_PORT

NUMBER(38)

服务器端口号

PLAN_ID

NUMBER(38)

执行计划的 ID

PLAN_DEPTH

NUMBER(38)

Operator 在展示时的深度

PLAN_LINE_ID

VARCHAR2(32)

Operator 的编号

OPERATOR

VARCHAR2(128)

算子的名称

NAME

VARCHAR2(256)

表的名称

ROWS

NUMBER(38)

预估的结果行数

COST

NUMBER(38)

预估的代价

PROPERTY

VARCHAR2(4096)

对应算子的信息