我想知道是否有办法检查在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
它是否会刷新?从上面的输出可以得出什么结论?这是一天吗?月?小时?从启动以来?
答案 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$SESSION
或GV$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
)可以帮助您了解您的关键工作是否受到影响。