ITPub博客

首页 > 数据库 > Oracle > tom 9I-10g中关于dmp和数据磊文件以及pga的一点分析

tom 9I-10g中关于dmp和数据磊文件以及pga的一点分析

原创 Oracle 作者:dotaddjj 时间:2012-02-14 21:59:24 0 删除 编辑

Exp和imp的dmp:

关于oracle的导入 导出工具跟oracle的版本的概念关系一直是迷迷糊糊的,跟网友们的讨论一样:高版本兼容低版本。

这个解释应该是export的导出版本应该低于或等于imp的导入版本。例如oracle 9i的数据库服务器无法用oracle 10g的客户端导出,由于dmp文件的imp是9I的,但是需要exp的版本却是10g的,同样还有10g客户端导出的dmp文件无法导入到oracle 9I的数据库中。

Dmp文件是平台独立的二进制文件,里面存储元数据(create和alert语句)和数据本身,只要是oracle版本允许可以导入导出到任何平台,但是由于在windows和文件ftp传输中,会默地把dmp文件当成文本文件,这样会破坏dmp文件,所以在windows和文件ftp传输中选择二进制传输。

数据磊文件:

Oracle 10g推出了数据磊格式,数据磊格式也是跨平台的二进制文件,包含有存储为xml的元数据(不是create和alter的语句),可能还包含数据,由于使用了xml,impdp和expdp有一些复杂的过滤和转换功能。Dmp文件元数据create alter语句在导入工具执行sql需要解析每一条sql,impdp只需要简单的xml转换就可以达到。

关于手动pga管理中排序sort_area_size测试

在Session A执行

sql>create table sess_stats(name varchar2(80),value number,diff number);

--创建表sess_stats记录排序操作中uga和pga使用

SQL> alter session set workarea_size_policy=manual;

Session altered

SQL> alter session set sort_area_size=65536;--设置sort_area_size排序区为64KB

Session altered

SQL> select * from v$mystat where rownum=1;--记录sid

SID STATISTIC# VALUE

---------- ---------- ----------

126 0 1

在执行排序sql之前在session B运行merge into sql语句记录此前的记录信息

Session B:

Sql>merge into sess_stats

Using

(select name,value from v$statname a,v$sesstat b

Where a.statistic#=b.statistic#

And b.sid=$sid—输出sid等于运行排序sql的sid

And (a.name like '%ga%' or a.name like '%direct temp%'))curr_stats

On(sess_stats.name=curr_stats.name)

When matched then

Update set diff=curr_stats.value-sess_stats.value,value=curr_stats.value

When not match then

Insert(name,value,diff) values(curr_stats.name,curr_stats.value,null);

/

Sql>Commit;

/

回到session A运行排序操作

Session A

set termout off

select * from t order by 1,2,3,4;

set termout on

运行完毕后再次在session b运行merge into更新记录。

SQL> select * from sess_stats;

NAME VALUE DIFF

------------------------------ ---------- ----------

calls to kcmgas 5 2

session pga memory max 1302100 720896

session pga memory 581204 65536

session uga memory 221744 65464

session uga memory max 969932 682724

physical writes direct tempora 6108 3054

ry tablespace

physical reads direct temporar 6108 3054

y tablespace

可以看出在sort_area_size=64KB下,sql语句对临时表空间执行了3054次读和写I/O,为了完成查询和排序,oracle分配了排序区,pga和uga都增大,session uga memory max和session pga memory max 来执行排序sql,排序完毕后又回缩value的session uga memory和session pga memory。

类似当设置sort_area_size为1MB,相应的pga和uga 临时表空间I/O

SQL> select * from sess_stats;

NAME VALUE DIFF

------------------------------ ---------- ----------

calls to kcmgas 5 0

session pga memory max 2416212 1114112

session pga memory 581204 0

session uga memory 221744 0

session uga memory max 1400096 430164

physical writes direct tempora 6801 693

ry tablespace

physical reads direct temporar 6801 693

类似使用1GB的sort_area_size排序区,记录的pga和uga 临时表空间I/O信息

SQL> select * from sess_stats;

NAME VALUE DIFF

------------------------------ ---------- ----------

calls to kcmgas 5 0

session pga memory max 68345428 65929216

session pga memory 581204 0

session uga memory 287208 65464

session uga memory max 67331120 65931024

physical writes direct tempora 6801 0

ry tablespace

physical reads direct temporar 6801 0

y tablespace

自动pga内存管理:

尽可能充分的使用ram,而且尽量不会超过可用的pga_aggregate_target的大小。少量用户时,会尽可能分配过多ram给用户,随着系统负载的增加,会最大限度使用内存,但是会减少每个用户分配,然后随着系统负载减少,为每个用户分配的ram又将增加(但是出于系统内存需求,有时可能会大于这个值)

对于串行的session,每个工作区(排序区和散列区)最多只能使用5%pga_aggregate_target。

并行查询的session,工作区最多只能使用30%pga_aggregate_target内存,每个并行进程最多只能使用0.3pga_aggregate_target/parallel n。

少量用户需要排序和散列时,oracle会分配更多的内存给少量用户以减少磁盘I/O,而如果大量用户需要排序和散列消耗内存时,oracle又会合理平衡的分配内存给相应用户,在pga_aggregate_target的限制下充分使用内存。

[@more@]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25362835/viewspace-1057351/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    220
  • 访问量
    1662974