Oracle使用技术之并行会话分析(oracle使用并行会话)
Oracle使用技术之并行会话分析
在Oracle的运行过程中,有时候需要分析并行会话的执行情况以及相关性能指标,这时候我们可以使用Oracle提供的一些工具来进行分析。本文将介绍一些常用的并行会话分析技术和相关代码实现,帮助大家更好地理解Oracle的性能调优。
一、并行会话的诊断
在Oracle中,我们可以使用v$px_session视图来监控并行会话的信息,包括进程ID、会话ID、当前状态、执行的SQL语句、执行统计信息等。例如,以下代码可以列出所有已经启动的并行会话信息:
SELECT s.sid, s.serial#, p.spid, s.username, s.status, s.machine
FROM v$session s, v$process pWHERE s.paddr = p.addr AND s.type = 'BACKGROUND' AND s.username IS NOT NULL;
在上面的代码中,我们通过v$process和v$session两个视图关联起来查询了不同进程的会话信息。
另外,我们还可以通过以下的语句来查询系统中是否有正在执行中的并行查询:
SELECT SQL_ID, EXECUTIONS, DOP, status, instance_number
FROM GV$SQL WHERE SQL_FULLTEXT LIKE '%/*+PARALLEL%';
如果有并行查询正在执行,那么我们可以通过以下语句获取详细的执行计划和性能指标:
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('sql_id', 'child_number', 'allstats cost predicate format=+cpu'));
二、分析并行会话的性能瓶颈
在诊断出并行会话的信息后,我们进一步需要分析性能瓶颈在哪里。这一步我们可以通过AWR报表、ASH视图以及通过tracing方式来达到目的。
1. AWR报表
AWR报表是Oracle自带的一种性能分析报表,可以帮助我们分析整个数据库的性能瓶颈。下面以以下语句为例,分析分析第100个实例上的实例性能:
SELECT * FROM TABLE(DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_INSTANCE(100, TO_CHAR(SYSDATE-14, 'YYYY-MM-DD HH24:MI:SS'), TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'), 10));
在AWR报表中,默认会列出一些与并行查询相关的性能指标,包括并行度、并行等待类型以及等待事件。通过这些指标我们可以判断出问题的所在,然后再采取相应的措施进行优化。
2. ASH视图
ASH视图是Oracle的一个性能监控工具,主要用于实时监控并行会话的状态。通过以下的语句可以查询ARH视图中与并行查询相关的信息:
SELECT session_id, session_serial#, user_id, sql_id, plan_hash_value, to_char(sample_time,'yyyy-mm-dd hh24:mi:ss'), TABLE_NAME, BLOCKING_SESSION_STATUS, row_source
FROM DBA_HIST_ACTIVE_SESS_HISTORYWHERE event LIKE '%PX%' ORDER BY sample_time desc;
在ASH视图中,我们可以看到当前并行查询的执行状态、会话持续的时间以及当前会话等待的事件和所等待的对象等信息。有了这些信息之后,我们可以更加准确地判断性能瓶颈在哪里。
3. Tracing模式
在AWR报表和ASH视图不能满足我们要求的情况下,我们也可以使用tracing方式来排查问题。通常情况下,我们可以通过设置10046跟踪来追踪并行查询的执行过程。下面是一个示例代码:
alter session set events '10046 trace name context forever, level 12';
--执行并行查询alter session set events '10046 trace name context off';
完成tracing之后,我们可以通过trace文件来进行分析。通常情况下,我们需要使用tkprof等工具来将trace文件转化为易于阅读的格式。在tkprof的结果中,我们可以找到以下信息:
– 执行时间:整个并行查询所需的时间
– CPU时间:整个并行查询所要占用的CPU时间
– 等待时间:整个并行查询所等待的时间
– IO等待:整个并行查询IO等待的时间
通过对以上信息的分析,我们可以找到性能瓶颈在哪里,以及如何进行优化。
三、并行会话的优化
在分析出性能瓶颈后,我们可以尝试一些优化技巧来提高并行查询的性能。以下是一些常用的优化技巧:
1. 增加并行度:可以通过增加并行度来提高并行查询的性能。可以使用语句alter session set parallel_degree_policy=MANUAL来手动调整并行度。另外,我们还可以使用语句alter session force parallel dml parallel 8来增加DML语句的并行度。
2. 减少网络通信:由于并行查询需要多个进程之间进行通信,所以网络通信可能成为性能瓶颈。为了优化性能,我们需要减少网络通信的次数和数据量。可以尝试将大查询拆分成多个小查询,在各个进程之间分配查询来减少网络通信。
3. 优化IO:IO性能是影响并行查询性能的因素之一。可以通过以下方法来优化IO性能:
– 尽量使用异步IO
– 使用RD等高效的存储系统
– 使用HBA、NIC等高速IO设备
– 优化存储阵列的配置
以上内容只是并行会话分析中的一部分,完整的分析过程需要根据具体情况来制定。通过本文的介绍,我们可以更加全面地了解Oracle的并行会话分析技术,并根据实际的业务需求来进行性能分析和调优。