信息发布→ 登录 注册 退出

SQL Monitor中status的作用

发布时间:2025-07-23

点击量:

《sql调优和性能监控利器sql monitor》提到sql monitor,通过v$sql_monitor视图找到对应的sql,其中有个字段是status,

包括这些值:

  • QUEUED - SQL语句正在排队
  • EXECUTING - SQL语句仍在执行中
  • DONE (ERROR) - 执行终止并出现错误
  • DONE (FIRST N ROWS) - 应用程序在获取所有行之前终止执行
  • DONE (ALL ROWS) - 执行终止并获取所有行
  • DONE - 执行终止(并行执行)

其中有一个DONE (FIRST N ROWS),如果熟悉CBO优化器的朋友,可能看着眼熟,可以推测出它的意思应该是“执行完成,但是仅获取前N行”。

模拟一下,执行这条语句,正常完成:

SQL> select /*+ monitor */ count(*) from test;
  COUNT(*)
----------
     72377

此时v$sql_monitor显示的DONE (ALL ROWS):

SQL> select username, sql_id, sql_text, status from v$sql_monitor where sql_text like '%test%' and sql_text not like '%v$sql_monitor%';
USERNAME        SQL_ID        SQL_TEXT                                                STATUS
--------------- ------------- ------------------------------------------------------- -------------------
BISAL           d9jb07dq0n2ny select /*+ monitor */ count(*) from test                DONE (ALL ROWS)

我们尝试在执行过程中按Ctrl+C强制中断:

SQL> select /*+ monitor */ * from test
Ctrl+C,中断执行

此时看到,v$sql_monitor的status显示DONE (FIRST N ROWS),表示这条SQL只是执行了前N行:

SQL> select username, sql_id, sql_text, status from v$sql_monitor where sql_text like '%test%' and sql_text not like '%v$sql_monitor%';
USERNAME        SQL_ID        SQL_TEXT                                                STATUS
--------------- ------------- ------------------------------------------------------- -------------------
BISAL           aysw7ujnub4vr select /*+ monitor */ * from test                       DONE (FIRST N ROWS)
BISAL           d9jb07dq0n2ny select /*+ monitor */ count(*) from test                DONE (ALL ROWS)

因为最近在做数据相关的工作,所以对这些有点儿敏感,同样的词虽然用到了不同的功能,但是表达的含义还是比较明确,相对比较标准,其实这些就在潜移默化中提升了数据质量,让系统的使用更加规范、更易理解。

标签:# sql语句  # sql  # Error  # 这条  # 看着  # 就在  # 有个  # 潜移默化  # 以对  # 更易  # 过程中  # 应用程序  # 有一个  
在线客服
服务热线

服务热线

4008888355

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!