oracle:有没有办法检查sql_id在一段时间内降级到串行或更低程度

时间:2015-03-05 17:02:54

标签: multithreading oracle parallel-processing

我想知道是否有办法检查在Oracle 4节点RAC数据仓库版本11.2.0.3中降级为串行或较低程度的sql_ids。我想编写一个脚本并检查降级的查询。

SELECT NAME, inst_id, VALUE FROM GV$SYSSTAT
WHERE UPPER (NAME) LIKE '%PARALLEL OPERATIONS%'
OR UPPER (NAME) LIKE '%PARALLELIZED%' OR UPPER (NAME) LIKE '%PX%'

NAME                                        VALUE
queries parallelized                        56083
DML statements parallelized                     6
DDL statements parallelized                   160
DFO trees parallelized                      56249
Parallel operations not downgraded          56128
Parallel operations downgraded to serial      951
Parallel operations downgraded 75 to 99 pct     0
Parallel operations downgraded 50 to 75 pct     0
Parallel operations downgraded 25 to 50 pct   119
Parallel operations downgraded 1 to 25 pct      2

它是否会刷新?从上面的输出可以得出什么结论?这是一天吗?月?小时?从启动以来?

1 个答案:

答案 0 :(得分:0)

此信息存储为Real-Time SQL Monitoring的一部分。但它需要许可诊断和调整包,它只能在短时间内存储数据。

Oracle 12c可以在更长的时间内存储SQL监控数据。如果您没有Oracle 12c,或者您没有获得许可的选项,则需要创建自己的监控工具。

并行降级的实时SQL监控

select /*+ parallel(1000) */ * from dba_objects;

select sql_id, sql_text, px_servers_requested, px_servers_allocated
from v$sql_monitor
where px_servers_requested <> px_servers_allocated;

SQL_ID          SQL_TEXT                 PX_SERVERS_REQUESTED   PX_SERVERS_ALLOCATED
6gtf8np006p9g   select /*+ parallel ...  3000                   64

创建(简单)历史监控工具

简约是关键。实时SQL监控看似简单,您可以轻松地花费数周时间尝试重新创建一小部分。请注意,您只需要对非常少量的所有活动进行抽样,以获取足够的信息进行故障排除。例如,每分钟只存储GV$SESSIONGV$SQL_MONITOR(如果您有许可证)的结果。如果查询没有显示每分钟的采样,那么这不是性能问题,可以忽略。

例如:创建一个表create table downgrade_check(sql_id varchar2(100), total number),并创建一个DBMS_SCHEDULER的作业来运行insert into downgrade_check select sql_id, count(*) total from gv$session where sql_id is not null group by sql_id;。虽然来自GV$SESSION的计数很少与DOP完全相同。

其他问题

V$SYSSTAT经常更新(每隔几秒?),并表示自实例启动以来的事件总数。

很难从这些数字中得出许多结论。根据我的经验,只有2%的陈述降级是一个好兆头。您可能要么具有良好的(通常是默认的)设置,而且不能同时运行太多的并行作业。

然而,一些并行查询运行了几秒钟,一些运行了几周。如果错误的工作降级,即使一次降级也可能是灾难性的。存储一些历史会话信息(或使用DBA_HIST_ACTIVE_SESSION_HISTORY)可以帮助您了解您的关键工作是否受到影响。