oracle并行的小细节(r2笔记44天)

今天在从生产环境中做一个数据抽取,为了提高效率,加了并行。发现了一些小的细节。 首先,抽取数据时,对于并行度的指定我是设定200M为一个单位,如果表有1G,那么就需要启5个并行,结果有一个表有40G,按照这个单位,需要200个并行。 但是在实际中,ddl的执行并行度,数据库不一定会买账,首先从数据库实例层面有一些参数限定。 这下面的配置中,这个库最多只能使用64个并行。 SQL> show parameter parall NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ fast_start_parallel_rollback string LOW parallel_adaptive_multi_user boolean FALSE parallel_automatic_tuning boolean FALSE parallel_degree_limit string CPU parallel_degree_policy string MANUAL parallel_execution_message_size integer 65536 parallel_force_local boolean FALSE parallel_instance_group string parallel_io_cap_enabled boolean FALSE parallel_max_servers integer 64 为了保险起见,我指定了抽取数据时的那个ddl的并行度为30,但是实际运行的时候只启用了8个。

USERNAME         TOTAL_CNT     ACTIVE   INACTIVE     KILLED     SNIPED JDBC Thin Client 
--------------- ---------- ---------- ---------- ---------- ---------- ---------------- 
TMP_MIG                  9          9          0          0          0                0              

但是可以注意到一个细节,实际中只启用了8个并行,但是在数据库里的对应的session却有9个。 来看看session的情况,第一个session是通过sqlplus连进来的,剩下的都是和并行绑定的session.

      SID    SERIAL# USERNAME                       MACHINE                                                          PROGRAM
---------- ---------- ------------------------------ ---------------------------------------------------------------- ------------------------------------------------
      4163      36087 TMP_MIG                        prod_db                                                         sqlplus@prod_db (TNS V1-V3)
      4383      17193 TMP_MIG                        prod_db                                                         oracle@prod_db (P048)
      4568      13403 TMP_MIG                        prod_db                                                         oracle@prod_db (P049)
      4750      15373 TMP_MIG                        prod_db                                                         oracle@prod_db (P050)
      4956       8551 TMP_MIG                        prod_db                                                         oracle@prod_db (P052)
      5107      11535 TMP_MIG                        prod_db                                                         oracle@prod_db (P051)
      5329      12139 TMP_MIG                        prod_db                                                         oracle@prod_db (P053)
      5492      21119 TMP_MIG                        prod_db                                                         oracle@prod_db (P054)
      5698      14709 TMP_MIG                        prod_db                                                         oracle@prod_db (P055)
如果启用后的有些并行session处理的快,会马上释放对应的session,session就会处于inactive状态。
在数据抽取执行了一会以后,来查看session的情况,发现有7个session处于Inactive状态了。
USERNAME         TOTAL_CNT     ACTIVE   INACTIVE     KILLED     SNIPED JDBC Thin Client 
--------------- ---------- ---------- ---------- ---------- ---------- ---------------- -------------- -----------
TMP_MIG                  9          2 7          0          0                0             

当然了,可以看到oracle的并行似乎是采用了多个session(多个session对应指定的parallel)来处理数据。

其实我更关心parallel的这些session都做些什么。来尝试一下看看它们正在执行的sql,倒底是什么,尝试了多个session,都没有找到,看来oracle是不想让我们知道这些细节了。

SQL> select prev_sql_id sql_id from v$session where sid=4383;
SQL_ID
-------------

SQL> c/4383/5698
  1* select prev_sql_id sql_id from v$session where sid=5698
SQL> /

SQL_ID
-------------


在稍候的工作继续观察,看能不能得到一些惊喜。

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2014-07-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大内老A

谈谈分布式事务之三: System.Transactions事务详解[上篇]

在.NET 1.x中,我们基本是通过ADO.NET实现对不同数据库访问的事务。.NET 2.0为了带来了全新的事务编程模式,由于所有事务组件或者类型均定义在Sy...

2008
来自专栏智能大石头

NewLife.Redis基础教程

X组件缓存架构以ICache接口为核心,包括MemoryCache、Redis和DbCache实现,支持FX和netstandard2.0! 后续例程与使用说明...

793
来自专栏云知识学习

k8s 节点亲和性

这里的背景是遇到了一个小问题:我目前有3台机器(1台ssd+40m 带宽高性能),有些服务对网络、机器都有较大的要求,而其他一些则没有,请问我如何才能让特定服务...

1970
来自专栏岑玉海

hbase 学习(十六)系统架构图

  HBase 系统架构图 ?   组成部件说明   Client:   使用HBase RPC机制与HMaster和HRegionServer进行通信 ...

3444
来自专栏吴伟祥

mysql水平拆分与垂直拆分的详细介绍 原

垂直拆分是指数据表列的拆分,把一张列比较多的表拆分为多张表 通常我们按以下原则进行垂直拆分:

743
来自专栏james大数据架构

微软官方提供的用于监控MS SQL Server运行状况的工具及SQL语句

Microsoft SQL Server 2005 提供了一些工具来监控数据库。方法之一是动态管理视图。动态管理视图 (DMV) 和动态管理函数 (DMF) 返...

1947
来自专栏PHP在线

MySQL存储引擎总结

前言 在数据库中存的就是一张张有着千丝万缕关系的表,所以表设计的好坏,将直接影响着整个数据库。而在设计表的时候,我们都会关注一个问题,使用什么存储引擎。等一下,...

3836
来自专栏大内老A

WCF技术剖析之三十三:你是否了解WCF事务框架体系内部的工作机制?[上篇]

WCF事务编程主要涉及到这么三个方面:通过服务(操作)契约确定TransactionFlow的策略;通过事务绑定实现事务流转;通过服务操作行为控制事务的自动登记...

1978
来自专栏架构师小秘圈

HBase极简教程

HBase 系统架构 HBase是Apache Hadoop的数据库,能够对大型数据提供随机、实时的读写访问。HBase的目标是存储并处理大型的数据。HBase...

4306
来自专栏搜云库

MySQL/InnoDB中,乐观锁、悲观锁、共享锁、排它锁、行锁、表锁、死锁概念的理解

MySQL/InnoDB的加锁,一直是一个面试中常问的话题。例如,数据库如果有高并发请求,如何保证数据完整性?产生死锁问题如何排查并解决?我在工作过程中,也会经...

1584

扫码关注云+社区