一、并行查询所需要查看的视图
概念说明
实时数据查询的视图:即只有存在并行查询操作时,也就是说,在并行查询操作运行期间,这些视图上才针对该并行查询的相关数据。平时,在数据库实例(级别)上没有并行查询运行时,查询这些视图,是没有数据,提示“未选定行”。而且在并行查询期间的不同时刻,查询这些视图所得的数据是不一样的,会变化的,也就是说,这些视图实时反映了该并行查询当前(即执行这些视图进行查询的那一刻)的状态。
当前会话的视图:即这些视图只能查询执行该视图查询的会话上最后一次并行查询的相关信息或是针对从启动数据库实开始到例执行该视图查询之前所有并行查询的某些统计项的累计值。
两类视图都有哪些?
当前会话的视图有哪些?
1、V$PQ_TQSTAT
在当前执行了并行查询的会话上用V$PQ_TQSTAT,才能查到该并行查询的统计信息。
比较10391事件和 V$PQ_TQSTAT结果的异同
.帮助在一个查询中测定不平衡的问题(即看每个并行服务器进程的NUM_ROWS和BYTES字段是否大体相差多不多),如果一个并行服务器进程任务重,别的并行服务器进程都已经完成好了,它还没有,则协调者进程还是等待它完成后,才能得出结果并将结果发送给用户进程。所以,整个并行操作中,该并行服务器进程影响整体执行速度的短板。
同一个表队列上的所有生产者发送的字节(即该视图上的bytes字段)之和等于所有消费者接收的字节之和。
2、V$PQ_SESSTAT。
实时数据查询的视图有哪些?
1、V$PX_SESSION
该视图描述的对象(主题)是(一个并行查询里的)并行服务器进程,即slave process。一个并行服务器进程由该视图里的SERVER_GROUP、SERVER_SET、SERVER#
这三个字段所表示,即这三个字段唯一确定一个并行查询里的一个并行服务器进程,而不是唯一确定一个数据库实例上的一个并行服务器进程。要唯一确定一个数据库实例上的一个并行服务器进程,则在三个字段基础上,再加上QCINST_ID 、QCSID、 QCSERIAL#
这三个字段。QCINST_ID 、QCSID、 QCSERIAL#
这三个字段,唯一确定一个数据库实例级别上的一个并行协调者进程(QC)。
知道了一个并行服务器进程,接下来我们就看该并行服务器进程是属于哪个并行协调者进程(QC)。一个并行协调者进程(QC),由该视图上的QCINST_ID 、QCSID、 QCSERIAL#
这三个字段唯一。当我们知道一个并行服务器进程是属于哪个并行协调者进程(QC)后,一个并行查询操作具体由哪些并行服务器进程和哪个并行协调者进程(QC)组成这个问题就解决了。
这样,当我们知道一个并行服务器进程是属于哪个并行协调者进程(QC)后,该视图里的REQ_DEGREE
、DEGREE这两个字段,我们就知道他们的意义是什么了,即
我们知道这两个字段是对哪个并行查询操作上的哪个表说的。我们知道这两个字段是对哪个并行查询操作说的。一个并行查询操作对应的SQL语句里若是存在多个表的连接,而每个表的并行度不一样,则执行并行查询操作时取最大值作为(并行查询操作的)并行度,详见《并行查询的执行计划解读》。所以,我们是说这两个字段是对哪个并行查询操作说的,而不是说这两个字段是对哪个并行查询操作上的哪个表说的。这里说的并行查询操作,对应的SQL语句是不包含子查询的。所以,比如,一个并行查询操作对应的SQL语句上带有两子查询的话,则相当于说这个并行查询由三个子并行查询(两个子查询和一个最外层的查询)组成,每个子并行查询对应一个DFO tree。下面这个例子里,就是并行查询由两个子并行查询组成的:
select /*+ parallel(t1 4) parallel(v1 8 ) */ t1.id from t1, (select /*+ parallel(t1 4) parallel(t2 4) */ rownum, t1.id from t1, t2 where t1.id = t2.id) v1 where t1.id = v1.id;
上面SQL语句对应的DFO结构图:
注释:
1、查看该视图里字段的顺序为,先看并行服务器进程相关字段,再看其协调者的相关字段,最后看并行度字段。
2、一个并行查询可以由多个DFO tree组成,一个DFO tree对应为一个group(即V$PX_SESSION视图中的SERVER_GROUP
字段),一个group则由多个set(即V$PX_SESSION视图中的SERVER_SET
字段)组成,一个group至多由2个set构成。SERVER#
,表示一个set里并行服务器进程的编号。
2、V$PQ_SYSSTAT
该视图,表示在实例级别上查看从启动该实例开始到当前为止所有运行过的并行查询统计信息的累积值。该视图STATISTIC字段下的统计项都是实时统计项,除了Servers Busy、Servers Idle这两个统计项外,其他统计项的值都是表示在实例级别上查看从启动该实例开始到当前为止所有运行过的并行查询在统计项上的累积值。而Servers Busy、Servers Idle这两个统计项值则是表示当前(即查询该视图时)对应的值。
Servers Busy这个统计项,表示当前(即查询该视图时)在实例(级别)上有几个并行服务器进程在执行并行查询工作。
Servers Idle这个统计项,表示当前(即查询该视图时)在实例(级别)上有存在几个并行服务器进程处于空闲没有参与在执行并行查询工作的。
Servers Started、Servers Shutdown、Servers Cleaned Up这一组统计项,表示进程的几个状态,表示历史上到现在为止有过该状态的进程的次数。进程的次数,不是指进程的个数,相当于说人次的意思,即比如历史上同一个进程有过多次启动(Servers Started)的状态。
注释:进程在生命周期结束前,有的状态为Servers Started、Servers Shutdown(暂停、关闭);进程在生命周期结束时,为清除(Servers Cleaned Up)。
Local Msgs Sent、Local Msgs Recv'd和Distr Msgs Sent、Distr Msgs Recv'd这两组统计项,表示并行进程间为了协调工作而往来的同步信息。 Local Msgs Sent、Local Msgs Recv'd这两个统计项的值是一样的,因为是发送和接收方都在在本机上。Distr Msgs Sent、Distr Msgs Recv'd这两个统计项的值一般不一样,一样也是巧合。在单实例数据库(非RAC集群数据库)上执行并行操作时,Distr Msgs Sent、Distr Msgs Recv'd这两个统计项的值没有远程节点间的同步信息交换,所以Distr Msgs Sent、Distr Msgs Recv'd这两个统计项的值始终为0。
3、
V$PX_PROCESS_SYSSTAT、V$PX_PROCESS
二、并行查询的视图中所涉及的统计视图小结
附加:
V$PQ_TQSTAT containsstatistics on parallel execution operations. The statistics are compiled after the querycompletes and only remain for the duration of the session.Itdisplays the number of rows processed through each parallel execution server ateach stage of the execution tree. This view can help determine skew problems ina query's execution.(Note that for PDML, information fromV$PQ_TQSTAT is available only after a commit orrollback operation.)
Column | Datatype | Description |
DFO_NUMBER | NUMBER | Data flow operator (DFO) tree number to differentiate queries |
TQ_ID | NUMBER | Table queue ID within the query, which represents the connection between two DFO nodes in the query execution tree |
SERVER_TYPE | VARCHAR2(10) | The role in table queue - producer/consumer/ranger |
NUM_ROWS | NUMBER | The number of rows produced/consumed |
BYTES | NUMBER | The number of bytes produced/consumed |
OPEN_TIME | NUMBER | Time (seconds) the table queue remained open |
AVG_LATENCY | NUMBER | Time (minutes) for a message to be dequeued after it enters the queue |
WAITS | NUMBER | The number of waits encountered during dequeue |
TIMEOUTS | NUMBER | The number of timeouts when waiting for a message |
PROCESS | VARCHAR2(10) | Process ID |
INSTANCE | NUMBER | Instance ID |
在当前执行了并行查询的会话上用V$PQ_TQSTAT,才能查到该并行查询的统计信息。
比较10391事件和 V$PQ_TQSTAT结果的异同
.帮助在一个查询中测定不平衡的问题(即看每个并行服务器进程的NUM_ROWS和BYTES字段是否大体相差多不多),如果一个并行服务器进程任务重,别的并行服务器进程都已经完成好了,它还没有,则协调者进程还是等待它完成后,才能得出结果并将结果发送给用户进程。所以,整个并行操作中,该并行服务器进程影响整体执行速度的短板。
同一个表队列上的所有生产者发送的字节(即该视图上的bytes字段)之和等于所有消费者接收的字节之和。
V$PQ_SYSSTAT
V$PQ_SYSSTAT listssystem statistics for parallel queries. After you have run a query or DMLoperation, you can use the information derived from V$PQ_SYSSTAT to viewthe number of slave processes used, and other information for the system.
Column | Datatype | Description |
STATISTIC | VARCHAR2(30) | Name of the statistic:
|
VALUE | NUMBER | Value of the statistic |
在实例级别上查看从启动该实例开始到当前为止所有运行过的并行查询统计信息的累积值。
V$PQ_SESSTAT
V$PQ_SESSTAT listssession statistics for parallel queries. After you have run a query or DMLoperation, you can use the information derived from V$PQ_SESSTAT to viewthe number of slave processes used, and other information for the session andsystem.
Column | Datatype | Description |
STATISTIC | VARCHAR2(30) | Name of the statistic:
|
LAST_QUERY | NUMBER | Value of the statistic for the last operation |
SESSION_TOTAL | NUMBER | Value of the statistic for the entire session to this point in time |
SESSION_TOTAL字段下的值的意义:
该视图用于查询当前会话的统计信息(有史以来的),即在当前会话上查看从启动该实例开始到当前为止所有运行过的并行查询统计信息的累积值。
LAST_QUERY字段下的值的意义:
该视图用于查询当前会话上在执行该视图查询前最后一次并行查询的统计信息。
V$STATNAME
V$SESSTAT
V$SYSSTAT
V$PX_PROCESS containsinformation about the sessions running parallel execution.
Column | Datatype | Description |
SERVER_NAME | VARCHAR2(4) | The name of the PX server (P000, P001, and so on) |
STATUS | VARCHAR2(9) | The state of the PX server (IN USE|AVAILABLE) |
PID | NUMBER | The process identifier |
SPID | VARCHAR2(12) | OS process ID |
SID | NUMBER | The session ID of the PX server, if in use |
SERIAL# | NUMBER | The session serial number of the PX server, if in use |
V$PX_PROCESS_SYSSTAT
V$PX_SESSION
V$PX_SESSION
contains information about the sessions running parallel execution.
Column | Datatype | Description |
---|---|---|
SADDR | RAW(4 | 8) | Session address |
SID | NUMBER | Session identifier |
SERIAL# | NUMBER | Session serial number |
QCSID | NUMBER | Session identifier of the parallel coordinator |
QCSERIAL# | NUMBER | Session serial number of the parallel coordinator |
QCINST_ID | NUMBER | Instance number on which the parallel coordinator is running |
SERVER_GROUP | NUMBER | The logical group of servers to which this cluster database process belongs |
SERVER_SET | NUMBER | The logical set of servers to which this cluster database process belongs. A single server group will have at most two server sets. |
SERVER# | NUMBER | The logical number of the cluster database process within a server set |
DEGREE | NUMBER | The degree of parallelism being used by the server set |
REQ_DEGREE | NUMBER | The degree of parallelism that was requested by the user when the statement was issued and prior to any resource, multi-user, or load balancing reductions |
注释:
V$PX_SESSION
有并行查询运行期间,才能从该视图上获得该并行查询的相关数据
V$PX_SESSTAT
The V$PX_SESSTAT
view provides a joinof the session information fromV$PX_SESSION
and theV$SESSTAT
table.