Exp调优
使用DIRECT和RECORDLENGTH选项
DIRECT参数定义了导出是使用直接路径方式(DIRECT=Y) 还是常规路径方式(DIRECT=N) 常规路径导出使用SQL SELECT语句从表中抽取数据 直接路径导出则是将数据直接从磁盘读到PGA再原样写入导出文件 从而避免了SQL命令处理层的数据转换过程 大大提高了导出效率 在数据量大的情况下 直接路径导出的效率优势更为明显 可比常规方法速度提高三倍之多
和DIRECT=Y配合使用的是RECORDLENGTH参数 它定义了Export I/O缓冲的大小 作用类似于常规路径导出使用的BUFFER参数 建议设置RECORDLENGTH参数为最大I/O缓冲 即 ( kb) 其用法如下
exp userid=system/manager full=y direct=y recordlength= file=exp_full dmp log=exp_full log直接路径导出根据Oracle版本不同 有一些使用限制 比较重要的限制有 i及以下版本不支持导出客户端和数据库的字符集转换 因此导出前必须保证NLS_LANG设置正确; 及以下版本不支持导出含LOBs对象的表;不能使用QUERY参数等
使用管道技术
管道是从一个程序进程向另一个程序进程单向传送信息的技术 通常 管道把一个进程的输出传给另一进程作为输入 如果导出的数据量很大 可以利用管道直接生成最终的压缩文件 所耗费的时间和不压缩直接导出的时间相当 这样一来 不仅能够解决磁盘空间不足的问题 而且省去了单独压缩文件的时间;如果需要传输导出文件 还可以减少网络传输的时间 比如 一个 G的文件单独压缩可能需要半小时以上的时间 虽然管道技术不能够直接缩短Exp/Imp本身的时间 但节省出来的压缩时间非常可观 管道和Exp结合的具体使用方法如下
导出数据示例
% mknod /tmp/exp_pipe p # Make the pipe
% press < /tmp/exp_pipe > export dmp Z & # Background press
% exp file=/tmp/exp_pipe # Export to the pipe
Imp调优
Oracle Import进程需要花比Export进程数倍的时间将数据导入数据库 某些关键时刻 导入是为了应对数据库的紧急故障恢复 为了减少宕机时间 加快导入速度显得至关重要 没有特效办法加速一个大数据量的导入 但我们可以做一些适当的设定以减少整个导入时间
使用管道技术
前面已经说明了Exp时如何使用管道 在导入时管道的作用是相同 不仅能够解决磁盘空间不足的问题 而且省去了单独解压缩文件的时间 在大数据量导入导出的时候 推荐一定要使用管道
导入数据示例
% mknod /tmp/imp_pipe p # Make the pipe
% unpress < export dmp Z > /tmp/imp_pipe & # Background unpress
% imp file=/tmp/imp_pipe # Import from the pipe
22 避免I/O竞争
Import是一个I/O密集的 *** 作,避免I/O竞争可以加快导入速度。TwWiNGwIt如果可能,不要在系统高峰的时间导入数据,不要在导入数据时运行job等可能竞争系统资源的 *** 作。
23 增加排序区
Oracle Import进程先导入数据再创建索引,不论INDEXES值设为YES或者NO,主键的索引是一定会创建的。创建索引的时候需要用到排序区,在内存大小不足的时候,使用临时表空间进行磁盘排序,由于磁盘排序效率和内存排序效率相差好几个数量级。增加排序区可以大大提高创建索引的效率,从而加快导入速度。
8i及其以下版本:导入数据前增加数据库的sort_area_size大小,可设为正常值的5-10倍。但这个值设定会影响到所有会话,设的过高有可能导致内存不足出现paging, swapping现象。更为稳妥的方法是,对于大表和索引特别多的表,只导数据不导索引。导完数据后,创建一个会话,设定当前会话的sort_area_size一个足够大的值,再手工创建索引。
9i:在workarea_size_policy=AUTO的情况下,所有会话的UGA共用pga_aggregate_target定义的内存,不必单独设定sort_area_size。导入数据前增加pga_aggregate_target大小,如果机器内存够大,可从通常设定的500M提高到1-2G。pga_aggregate_target大小可以动态调整,导入完成后可在线调回原值。
24 调整BUFFER选项
Imp参数BUFFER定义了每一次读取导出文件的数据量,设的越大,就越减少Import进程读取数据的次数,从而提高导入效率。BUFFER的大小取决于系统应用、数据库规模,通常来说,设为百兆就足够了。其用法如下:
imp user2/pwd fromuser=user1 touser=user2 file=/tmp/imp_db_pipe1 mit=y feedback=10000 buffer=1024000025 使用MIT=Y选项
MIT=Y表示每个数据缓冲满了之后提交一次,而不是导完一张表提交一次。这样会大大减少对系统回滚段等资源的消耗,对顺利完成导入是有益的。
26 使用INDEXES=N选项
前面谈到增加排序区时,说明Imp进程会先导入数据再创建索引。导入过程中建立用户定义的索引,特别是表上有多个索引或者数据表特别庞大时,需要耗费大量时间。某些情况下,需要以最快的时间导入数据,而索引允许后建,我们就可以使用INDEXES=N 只导入数据不创建索引,从而加快导入速度。
我们可以用INDEXFILE选项生成创建索引的DLL脚本,再手工创建索引。我们也可以用如下的方法导入两次,第一次导入数据,第二次导入索引。其用法如下:
imp user2/pwd fromuser=user1 touser=user2 file=/tmp/imp_db_pipe1 mit=y feedback=10000 buffer=10240000 ignore=y rows=y indexes=n
imp user2/pwd fromuser=user1 touser=user2 file=/tmp/imp_index_pipe1 mit=y feedback=10000 buffer=10240000 ignore=y rows=n indexes=y
27 增加LARGE_POOL_SIZE
如果在initora中配置了MTS_SERVICE,MTS_DISPATCHERS等参数,tnsnamesora中又没有(SERVER=DEDICATED)的配置,那么数据库就使用了共享服务器模式。在MTS模式下,Exp/Imp *** 作会用到LARGE_POOL,建议调整LARGE_POOL_SIZE到150M。
检查数据库是否在MTS模式下:
SQL>select distinct server from v$session;
lishixinzhi/Article/program/Oracle/201311/18115有一些联系的吧。
tom在他的书里说过,内存区有三个, SGA 、PGA、UGA。
UGA就是存放一些用户连接session等等东西的内存区。在共享服务器模式下UGA在SGA中分配,专用服务器模式下在PGA中分配。
不过这种影响有多大就不知道了。可以测试看看!
进程数越来越多的原因比较多。例如:客户端增多、一个客户端打开多个任务、失败进程增多、应用程序没能正常结束等等。对于客户端的增多和多开任务是人为的比较好控制,而应用程序不能正常退出可以调整应用程序即可。问题失败进程,它是属于系统问题,与服务器的连接模式和网络通讯稳定性直接相关。
Oracle的后台进程PMON进程监控进程是专门清理死进程的。它定期被唤醒进行清理死进程,但出现的死进程过多来不及清理,那么进程数就会不断地增多最后可能出现客户端无法登入的现象了。
Oracle服务器目前主要采用两种连接方式:专用方式DEDICATED和共享方式SHARED。专用方式是每一个客户端的用户进程对应一个服务器进程为其服务,即使该服务器进程失败变成死进程了也不会影响其他用户的请求。而共享连接方式下,一个服务器进程为很多个客户的用户进程服务的,它是按照队列一个一个进行处理的,当第一个用户进程结束之前后面用户进程需要进行等待。
在会话内存的sort_area中,这部分空间属于用户全局区(UGA),但是UGA具体在哪儿得看你的服务器环境。如果使用专用服务器模式,UGA的位置位于PGA(程序全局区)中;如果使用共享服务器模式并且设置了大池(large pool),UGA位于SGA的large pool中,如果没有设置large pool,UGA位于SGA的shared pool中。session是一个会话,process是一个服务器进程,二者是不同的概念。oracle中系统process和session的联系:
在SharedServer中的Process 和Oracle 中的Session不是一一对应的,Shared Server中的Process 一个对应着Oracle 中的一个或者一个以上的Session。在dedicated server机器上试验证明:数据库的session和 *** 作系统process是对应的
即表示一个session对应一个process,但是一个process未必对应一个session。oracle中的v$sql放在哪个文件里,其中v$sql和v$sqlarea存储的sql都是位于shared sql area中的sql,而v$sqltext是位于sga中的sql。但文档没有明确说明这里的sga是否还包含了psa(私有sql区域--共享服务器模式下)。
2、存储sql的方式不同
v$sql和v$sqlarea都是用一行来存储sql全文,而v$sqltext用一行存储sql的一行。
3、v$sql不存储包含group by 的sql语句。
通常这个视图,在每个查询执行完成后更新,但对于执行很久的sql,它是每5秒更新一次,这点对于查看sql执行状态是有意义的。
课程综述
本课程为管理工业界最先进的信息系统的数据库管理员开发能力,学员将学会备份和恢复Oracle数据库,动手实验将会给你带来真实技术环境中的体验,开发基本的网络管理技巧,使用Oracle恢复管理器简化职责。本课程将为Oracle数据库管理员关于Oracle网络管理和备份、恢复 *** 作带来坚实的基础。
学员将学会在数据库间传输数据和使用实用程序执行管理活动。学员将学习网络概念和配置参数,以排除一些常见的网络问题。在动手实验中,学员将学会配置网络参数使得数据库客户端和工具可以和Oracle数据库服务器通讯。
本课程也满足提供备份和恢复技术,和检查各种备份,失败,还原和恢复场景,学员将学会在关键任务企业中的基于各种商业需求的备份方法,使用多种策略和Oracle恢复管理器执行备份、还原和恢复 *** 作。
l内容纲要
网络概述
基本的Oracle网络架构
基本的Oracle网络服务器端配置
基本的Oracle网络客户器端配置
Oracle共享服务器的使用和配置
备份和恢复概述
实例和媒体恢复结构
数据库存档模式的配置
Oracle恢复管理器(RMAN)概述和配置
用户管理备份
RMAN备份
用户管理的完全恢复
RMAN完全恢复
用户管理非完全恢复
RMAN非完全恢复
RMAN知识库维护
RMAN目录的创建和维护
数据库间传输数据
使用SQLLoader来加载数据
案例研究
l学员受益
从事Oracle数据库服务器的网络 *** 作和数据备份恢复管理,尤其是备份 *** 作。
l目标学员
数据库管理人员、开发人员、测试人员、数据库最终用户。
l学员条件
参加过“Oracle9i/10g数据库管理基础I”课程的学习。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)