第三章 装载和卸载数据
目标
完成本课,您将会:
*在不同的平台传输表空间
*理解数据泵的总体结构
*监控数据泵作业
*使用数据泵来进行导入和导出
*为数据的population创建外部表
*定义外表属性
跨平台可传输的表空间
在数据仓库和数据超市之间简化数据的分发.
容许数据库从一个平台移植到另一个平台
支持的平台(略)
跨平台的可传输表空间
在oracle以前的版本中,可传输的表空间的特性可以让表空间在相同的体系结构和操作系统之间迁移.
oracle 10g进一步的让你使用可传输的表空间的特性,在平台之间进行传输.这样简化了从数据仓库到数据超市之间的分发,超市通常是运行在较小的平台上的.它也容许数据库通过重新建立数据字典和传输用户表空间来从一个平台移植到另外一个平台.
为了能够从一个平台到另外一个平台传输数据文件,你需要保证源系统和目标系统运行在支持的平台上.另外支持平台的数目不是很多...
需要相同的字符集.
最小兼容性
源和目标数据库都必须设置compatible为10.0.0或更高
数据文件头是平台相关的
在传输之前,确信所有的只读和脱机文件是平台相关的
两个必须是10g数据库;只读和脱机的意思是文件头无log号和checkpoint号
传输表空间的过程
要从一个平台传输表空间到另外一个平台,这个表空间的数据文件必须转换到源和目标数据库都能认的格式.尽管在10g,磁盘结构都符合公共格式,但是在源和目标数据库用不同的高低位也是可以的.当要传输到不同的高低位的平台的时候,你需要使用rman的convert命令来转换高低位.这个操作既可以在源也可以在目标数据库做.
如果平台的高低位是相同的,那就没有必要做转换了.基本上过程更以前的一致,除非平台使用不同的高低位.
查看平台的高低位
select tp.endian_format
from v$transportable_platform tp,
v$database d
where tp.platform_name = d.platform_name;
数据文件转换:例(略)
CLOB的例外
在转换高低位的时候,clob列是跳过的.
当你select的时候,才转换.
你可以使用create table as select 来进行转换.
动态性能视图的改变
v$database-------> PLATFORM_ID
PLATFORM_NAME
ENDIAN_FORMAT
v$transportable_platform
数据泵概览
高速数据和元数据谦虚的服务器端工具
通过dbms_datapumb调用的结构
提供新一带的export和import工具:expdb,impdb,web页面的接口
包含了原来的exp/imp的全功能
数据泵通用体系结构
DIRECT PATH API(DPAPI) :10g支持直接的path api接口,这样就小化数据转换和在转载和卸载的解析时间.
外表服务:数据泵使用新的ORACLE_DATAPUMP访问驱动这样就让外表了读写包含二进制流文件
DBMS_METADATA包被工作进程用来在所有的元数据的装载和卸载.数据库对象的定义存储是用xml而不是sql.
DBMS_DATAPUMP包包含了为批数据和元数据迁移高速导入和导出工具的api.
Sql*loader客户端已经集成到外表中,这样为外表访问参数提供了自动迁移loader控制文件.
expdp和impdp客户端是瘦客户端,通过调用dbms_datapump包来初始化和监控数据泵操作.今天他们引入了新的功能,他们依然跟以前的exp和imp兼容.
像db control,复制,传输表空间和用户应用程序都能从这样的体系结构中受益.sqlplus也许可以为了对正在进行的操作进行简单的状态查询提供了dbms_datapump客户端
数据泵导出导入概览
作为后台作业提交,失败了可以继续,每个用户只有一个进程,数据写入master表.
数据泵导出导入工具是10g的新工具.尽管他们跟以前的exp/imp很像,但是他们是单独的产品.
data pump export是为卸载数据和元数据到一套操作系统文件叫做dump文件集的工具.数据泵导入是用来把dump文件集的元数据和数据导入要目标系统中.
数据泵api在服务器端访问它的文件而不是在客户端.
这些工具也可以用来在远程数据库导出数据,或直接从源数据库导入到目标数据库.这就是网络模式,这种模式一般在导入数据到只读数据库特别的有用.
在每个数据泵操作的核心是主表(master table),用户运行数据泵作业的时候创建的表.主表维护作业的所有的方便.
在基于文件的导出作业中,主表建立了,在最后一步写到dump文件集中.相反的,把主表导入到当前用户的schema中是基于文件导入操作的第一步,也用在顺序创建所有要导入的对象.
当数据泵作业正常的完成的时候,主表被删.
数据泵导入导出的益处
数据访问方法
直接路径
外表
分离和重新连接到运行长时间的作业
重新启动数据泵作业
细度对象选择
显示的指定版本
并行操作(企业版)
估算导出作业空间消耗
在分步式环境中的网络模式
在导入的时候重新计算承受力
数据泵自动决定数据访问的方式.这些可以是直接路径也可以是外表.
不影响作业可以分离或重新连接到长运行的作业可以让你从多个地方来监控作业.所有停止的数据泵作业可以在不丢失数据的情况下重新启动,尽管足够的原信息仍然没有受到影响.不管这个作业是自愿的还是由于错误不情意的停止都没有关系.
exclude,include,content参数用在细度对象筛选上.
你可以为你要移动的对象知道版本参数来创建dump文件集,这样就会更以前的oracle版本兼容来支持数据泵.这个参数用来保留在以后的版本中.
你也可以使用parallel参数在指定活动执行用来代表这个export的作业服务器进程的最大数.
你也可以使用estimate_only参数来估计导出作业将消耗多少空间.
网络模式可以让你从远程数据库中直接导出为dump文件集.这可以通过数据库连接到源数据库来完成.
在导入的适合,你可以改变目标数据文件的名称,schema,和表空间.
总体实现概览
客户端进程对数据泵api进行调用.一旦作业启动了,客户端就不需要了.多个客户端为了监控或公主作业可以连接或断开这个作业.
当客户端登录到oracle数据库的适合,就创建了shadow进程.它为数据泵api的请求服务.当受到dbms_datapump.open请求的适合,shadow创建作业,这个作业主要包括创建master表,创建为各种进程通讯的aq对象,创建主控制进程.一旦作业运行了,shadow的主要任务通常包括为客户接受get_status请求.如果客户端断开,shadow也就没有了.
主控制进程控制数据泵的执行和顺序.它维护作业的状态,作业的描述,主表的重新启动和dump文件的信息.这个进程名称为DMnn.
接受到start_job的请求之后,主进程就根据parallel参数的值来创建许多工作进程.工作进程执行mcp受到请求的工作,主页是装载和卸载元数据和数据.工作进程的名称是DWnn.
如果外表的路径是作为装载和卸载数据的访问方法,工作进程根据装载和卸载的作业协调许多并行服务器进程.这样使得分区内的装载和卸载成为可能.
数据泵直接路径需要考虑的事项
细度访问控制的表在插入和选择模式是可以用的
lob类有域索引
现在有clustered的表
分区表的全局索引有单一分区的装载
bfile或不透明类型的列
引用完整性约束
有嵌入透明类型的varray列
数据泵支持对表的行数据的两种访问访问
使用直接路径api的直接路径
外表
数据泵自动的为每个表选择最合适的访问方法
当一个表的结构容许它和期望最大的单流性能的时候数据泵就使用直接路径装载和卸载数据.
然后如果上面的条件出现了,或者表含有加密列,或导入的表在装载和卸载的时候分区不一样,数据泵就使用外表而不是直接路径去移动数据.
数据泵文件位置
数据泵文件有三种类型
dump文件
日志文件
sql文件
绝对路径是不支持的
必须使用oracle路径对象
文件优先级
per-file路径
directory参数
data_pump_dir环境变量
dump文件包含要迁移的数据和元数据
log文件记录这个操作相关的信息
sql文件记录sqlfile操作的输出
因为数据泵是基于服务器的而不是客户端的,数据泵文件访问的是oracle的相对路径.为了安全的考虑,是不支持绝对路径的.
per-file路径对象必须为每个dump文件,log文件,sql文件指定.他们是通过冒号分隔的.
数据泵导入导出客户端通过directory参数来指定目录对象.这些路径对象描述了要访问的文件的位置.
你可以定义环境变量data_pump_dir,指定目录对象名而不用directory参数.数据泵客户端如果没有指定显示的路径对象就会去查找这个环境变量.
数据泵文件命名和大小
一个dump文件集可以包含多个文件
dumpfile指定dump 文件的列表
comma分隔的列表
%U模板
dump文件的初始个数依赖于
parallel参数
dumpfile参数
filesize参数决定每个dump文件的大小
已经存在相同的文件名的文件不会覆盖
dumpfile参数指定基于磁盘的dump文件的名称和路径(可选).如果是多个文件,就要用comma分开来列,或不同的dumpfile参数来指定.
文件名称可以包含%U变量来替代,这个表示要产生多个文件.%U变量在结构文件的名称解释成两位的,固长的从01单调递增的整数.如果没有指定dumpfile,默认名称就是expdat.dmp.默认的,dump文件的自动扩展的.
如果指定了filesize,每个文件的都是filesize那么多大,并且是不可以扩展的.如果指定了%U变量,或者需要更多的dump空间,filesize大小的文件自动创建.否则,客户端就说到要添加新文件的信息.
如果模板中指定了%U参数,一开始创建的文件的个数等于parallel参数.
如果跟生成的文件同名文件已经存在,它不会被覆盖.会产生一个错误,导致作业取消.
数据泵工具:接口和模式
数据泵导入导出接口
命令行
参数文件
交互式命令行
db control
数据泵导入导出模式
完全
schema
表
表空间
传输表空间
命令行可以让你直接在命令行下指定大多数导出参数.
参数文件接口可以在参数文件中让你指定大多数的命令行参数.例外是parfile参数.
交互行会显示导入导出提示,这样你可以输入各种命令.
你也可以在web页面来调用.
数据泵和过滤
细粒度对象选择
数据选择
和以前的exp/imp工具那样,你可以选择包含或忽略索引,触发器,授权和约束.数据泵作业可以包括或排除实际上是任何类型的对象.
exclude参数容许在导入或导出操作中排除任何数据库对象.
include参数容许在操作中只包含指定的对象类型.
content参数容许你请求当前的操作仅仅是元数据,或仅仅是数据,或都有.
query参数跟以前的export工具的方式相同,但有两个地方的改进:可以加表名,也可以在导入的时候使用.
数据泵导入的传输
你可以创建重映射
数据文件使用remap_datafile
表空间使用remap_tablespace
schema使用remap_schema
remap_datefile='c:oradatatbs6.f':'/u01/tbs6.f'
使用transform,你可以排除表和索引
storage和tablespalce子句
只有storage子句
因为对象原数据是作为xml存在dump文件集中的,这样在导入的时候形成ddl的时候就也容许去应用传输.数据泵的导入支持下面几种传输.
remap_datafile在不同文件系统的时候跨平台移动数据库非常有用.
remap_tablespace容许对象从一个表空间移到另外的表空间
remap_schema提供改变对象属主,就像以前的fromuser,touser
监控数据泵作业的视图
V$session_longops;
dba_datapump_jobs;
dba_datapump_sessions;
v$session;
超过六秒的事务就会放入到v$session_longops中.
你可以使用数据字典视图来查看数据泵的信息.
dba_datapump_jobs视图有一个实例或rac多个实例中的活动的数据泵作业.它也显示了所有还没有更活动作业联系的数据泵主表.
你也使用作业信息来连接上活动作业去停止它,改变它的并行度,或监控它的进程.你可以使用从job_name得到的主表信息,去重新启动一个停止的作业,或删除不需要的主表.
dba_datapump_session显示了连接到一个作业的会话信息.v$session_longops中有数据泵作业的入口,指示这个作业的进程,已经有多少m的数据传送了.这个入口包含归结的传输大学,它的定期的更新,反应了数据传送的实际数量.
你也可以访问db control主页维护标签的工具部分来启动数据泵工具.
每个连接,你都有向导帮助你定义数据泵作业的参数.
并行完全导入导出的例子
expdp system/manager full =y
parallel = 4
dumpfile = datadir1: full1%u.dat,
datafir2: full2%u.dat,
datadir3: full3%u.dat,
datadir4: full4%u.dat
filesize = 2g
impdp system/manager
directory = NET_STORAGE_1
parallel = 4
dumpfile = full1%u.dat,full2%u.dat,
full3%u.dat,full4%u.dat
限制的schema导出的例子(略)
网络模式导入的例子(略)
联系到已经存在的作业的例子
注意我们不必指定job名称,因为这样只有一个活动的job.
exp_ts1是默认的作业名称.
每个用户只有有一个作业.
重新启动停止的作业例子
只有数据的unload的例子
外表的population 概览
把数据卸载到外部平滑文件中
处理复杂的etl
在以前的版本中,外表是只读的.然后在10g中,外表也可以被写入.进程不可以对外表进行dml操作也不可以创建索引.但是你可以使用create table as select来populate外表到os无关的文件.
外表的population操作
使用oracle_datapump访问驱动
数据不能被修改
使用oracle_datapump访问驱动,结果文件是只读的.
你可以联合几个文件来导入.
为外表创建的数据文件可以移动或者作为这个数据库或别的数据库的另外一个外表的数据文件使用.然而他们只能由oracle_datapump访问驱动来访问.同样,不同的外表产生的数据文件也可以在另外的外表中指定location子句.这样提供了从多个来源汇集数据的简单方式.唯一的限制就是每个外表的元数据必须相同.
外表并行操作
可以创建多个文件
每个文件只有一个并行进程.
parallel和location影响了并行度.
因为外表可以很大,你可以使用并行操作来卸载数据到外表.当外表操作声明为parallel的时候,就开始并行执行了.
并行度也受到由访问驱动写的并发文件个数限制.
这样,在指定的时间点,决不会有一个以上的进程写一个文件.
location指定的文件的个数应该匹配并行度因为每个i/o服务进程需要它自己的文件.
.....
略.
第四章 自动管理
完成本章,你就会
使用自动数据库诊断监控器
使用自动共享内存管理
使用自动优化统计收集
使用阻挡undo retention调整
使用自动checkpoint调整
oracle10g自动通知你性能和资源分配的问题.另外还给你提供解决问题的建议,oracle10g还能自动为您解决问题.
自动数据库诊断监控概览
数据库中的性能诊断引擎
自动诊断性能问题
提供根本的分析以及推荐的解决方案
确定哪些地方没有问题
集成了所有的组件为各种类型的数据使用.
ADDM是自我诊断的引擎,直接在oracle数据库中,使用医学中的类比,我们可以把addm描述成您的全科医生.
它看你的正个系统,给出诊断,要么要么给出建议的治疗或给你去参考专家.
addm是由oracle数据库自动调用的,执行分析来看系统的主要问题.在许多情况下,addm推荐解决方案一般都得到期待的收益.
addm下钻到问题原因的根本原因,二不是症状,并且报告特定问题对整个系统的影响.如果有推荐,它就会报告期望的收益.
addm
也会把系统没有问题的地方进行文档.这样可以让你很快就可以看到那些地方没有问题,节省了你分析性能的时间.
因为addm使用的方法,它可以用在任何类型的数据库中,oltp,数据仓库,或混合型的.
addm性能监控
默认的,oracle数据库每个小时自动的从sga中捕捉统计信息,然后以快照的形式把它存在awr中.这些存在磁盘上的快照跟statspack快照很相似.然而,他们包含比statspack快照更精确的信息.
另外,addm通过新的mmon进程在每个数据库实例上计划的自动运行,提前的发现问题.每次进行快照的时候,addm触发去对这个时间段,根据最近两次快照进行分析.这样在问题还没有严重的时候就提前监控和发现了瓶颈.
每个addm分析的结果存在awr中,可以通过db control进行访问.
ADDM方法学
addm分析使用从顶向下的分析,集中在识别资源的瓶颈.这主要是通过新的时间统计模式来作的,这个大大的帮助了查看oracle把时间花在哪里.时间是真正的共同流通,在所有的调整组件中.(Time is indeed the common currency used across all tuning components.)
流通時間實際上是用在所有協調組件部分上。 (翻译好难)
这种方法使得addm首先确定最大影响的问题.addm使用树结构来代表所有可能的调整问题.这个树是基于oracle数据库使用的新的等待模型统计.这个分类树是基于几十年的oracle性能调整专家的意见.树的始节点代表症状,往下走到叶子,addm识别主要的性能问题.addm通过使用基于时间的基线(threshold)来遍厉每个节点.如果基于时间的基线(threshold)没有超过特定的节点,addm会剪去响应的子树.这就让addm发现了没有问题的区域.这个树的结构让addm有先的剪去快速识别问题的搜索空间.运行addm分析对系统的影响很小,而且不用三秒就可以完成.
一个很好的例子就是一个系统经历很高的登录率.单凭经验的方法也许是每秒超过10个登录率就是要修理的问题了.然而,许多系统可以运行很高的登录率,而对性能没有显著的影响.使用新的时间模型数据,addm可以报告数量上,登录花了oracle数据库的20%的时间.这些定量的数据可以让你更容易让你确信要处理这个问题.
发现的最头等的性能问题
头等(top)
在以前的oracle数据库版本中,statspacke是不能识别这个表中的以西问题,因为统计中没有粒度.随着10g数据库引入了新的等待时间统计模型,addm可以识别图中列出的头等性能问题.addm比statspack好的另外一点是addm关注于分析头等的性能问题,最影响系统的问题.
数据库control和addm的发现物
通过看你数据库的db control主页,你可以看到诊断总计部分,这会让你看到addm上次自动运行的发现物的数量.
通过点击性能发现物链接,你就链接到了addm页,这里你可以访问最近一次addm运行的详细.
addm分析结果
在addm页,你可以看到最近一次自动运行的详细发现物.数据库时间代表分析时间内这个数据库会话的非空闲时间.每个发现物都有特定的影响百分比.这个影响代表了分析时间过程中,相应的问题消耗的时间跟数据库时间的比.
1.图形显示了平台活动用户的数量在这个点急剧增长了.主要的问题就是等待.
2.这个图标显示了addm输出显示在对于这个时间点,在这个月的底部.你可以点其它的图标看以前的分析结果.
3.这个发现物给你一个你的addm发现的要调节的性能区的简单的总结.通过点击特定的问题,你可以直接进行性能发现详细页.
你也可以点查看报告按钮来得到文本个数的性能详细分析.
Addm推荐
在性能发现物详细页,你可以得到解决相应问题的推荐.
推荐按schema,sql调整,db配置和其它来分类.benefit%列给出如果推荐应用了,你可以在数据库时间上得到最大的降低.
addm考虑系统的许多的变化,它的推荐包括:
硬件的改变.添加cpu或i/o子系统的配置
数据库配置:改变初始化参数
schema改变:表或索引的哈希分区,或只有自动段空间管理.
应用程序改变:为序列或绑定变量使用cache选项
使用其它的建议:对紧迫的对象运行sql调节建议或高负载建议或断建议.
数据库control和addm任务
摩尔的,addm运行的每个oracle数据库快照都存在awr中.然后,你可以创建自己定义的addm任务去分析你指明的启始快照和终止快照这段时间.
要创建addm任务,到database主页,在相关链接部分,点advisor central链接,在advisor central也下面,点addm链接.
选择period start 时间选项,然后点在你要使用作为开始时间点的那个筷子,然后选择终止时间点的快照.
点ok,这就让你进入了addm页,在这里你可以看到新的任务要创建的确定.
在这页的性能分析部分,你可以得到你手工创建任务的结果.
改变addm属性
1.确定statistics_level设置为typical和all
2.addm一定i/o子系统期待的速度来分析i/o性能
a.计算你的i/o子系统的速度
b.设置期待的速度
addm默认的由statistics_level初始化参数控制的.要让addm自动运行,你不能把它设置成basic.默认的设置是typical.
addm依靠dbio_expected addm参数部分的分析i/o性能.
这个dbio_expected代表读一个数据库块的平均时间,单位是微秒.addm默认是10毫秒.对大多现代硬件是个合适的值.如果你的硬件不太一样,考虑不同的值.要决定dbio_expected值,执行下面的步骤.
1.测量你硬件单一数据块的读平均时间.注意这个是随机的i/o,包括你使用标准硬件的查找时间.典型值在5000到2万微秒之间.
2.接下来,设置你的dbio_expected值.例如,你测试的是8000微秒,你影响执行图中的第一个命令,用sys用户.上面的查询告诉你当前的参数.
使用sql得到addm报告
上面的例子显示了使用sql命令的查看最近的addm报告.
要诊断数据库性能问题,如果下面两个条件满足了,addm分析可以在两个awr快照之间进行.
*如果两个快照在创建的时候都没有错误,而且都没有被清除.
*在两个快照之间没有关闭和启动的操作.
第二个例子使用addmrpt.sql脚本.这个脚本可以用来在提供的任意两个awr之间运行addm.这两个快照必须是从同一个实例得到的.
这个脚本识别你的dbid,列出最近三天的快照标识符.这帮助你决定你要分析的快照对.
自动共享内存管理概览
自动适应工作负载变化
最大内存使用
帮助减少内出溢出错误
自动共享内存管理是oracle10g的另外一个自我管理的重要增强.这个功能自动的进行oracle数据库实例共享内存结构的管理,减轻了你手工配置那些组件.除了最大效率的使用内存,这样减少需要额外硬件内存资源的成本,asmm特性通过引进更动态的,弹性的和适应性的内存管理方案大大的简化了数据库管理.
例如,系统在白天运行大的oltp作业(需要大的缓冲),在晚上运行并行批作业(需要大的大池),你也许同时需要配置buffer cache和large pool来容纳你的顶峰需求.
有了asmm,运行oltp的时候,你的buffer cache就会抢到很多的内存为了很高的性能.后来运行dss批作业的时候,内存自动的移动到大池,这样就可以用来进行平行查询超载,而不会减少内存溢出错误.
sga调整原则
基于工作负载,mman在后台间断性的捕捉统计
mman使用不同的内存参考
内存移动到最需要它的地方
推荐使用spfile
-在关数据库的时候组件的大小保存了
-保留的值用来是启动时候的大小
-避免重新去得到这个优化的值
sga_max_size可以改变
初始值都是零,如果设定了,那么就是该值的下限.
asmm使用新的后台进程叫作mman.mman作为sga内存的经济人协调内存组件的大小.sga内存经纪人跟踪组件的大小和进行未完成的调整大小的操作.
sga内存经纪人为了决定内存的分配,观察系统和工作负载.它从不会满足,每格不到几分钟就执行这个检测,这样内存总是分配给它需要的地方.如果没有自动共享内存管理,组件的大小就是预期的他们的单一worst-case的内存需要.
基于工作负载信息,自动共享内存管理:
在后台间断性的捕捉统计
使用不同的内存参考
执行假定分析来决定内存的最好的分配
把内存移动到最需要它的地方
如果使用spfile就会保存组件大小
使用自动共享内存管理的优点
SGA_TARGET为总大小,如果不为零,表示打开自动管理.
SGA_MAX_SIZE最大的sga
SGA_TARGE当前用到的sga
asmm简化了sga的配置.过去,你要手工指定分配给数据库buffer cache,shared pool,java pool和large pool的大小.
这通常都是一个挑战.如果设置不够大,会导致性能很差,和内存溢出错误,如果设置过大,会导致浪费内存.
这个特性可以让你指定所有sga组件的总大小.oracle数据库有周期的重新分配这些内存.
在以前的版本中,你不能对sga的总大小进行控制,因为内存的固定的,对其它的内部元数据进行分配,除了这个总大小就是用户指定的sga参数,额外的内出通常是10到20m.
新的sga初始化参数sga_target报告sga所有的内存,包括自动设置组件的,手工设置组件还有启动的时候的其它内部分配.
数据库控制和asmm
你可以使用db control来配置asmm
1.点管理
2.在实例部分选内存参数
3.选sga
4.在asmm点enable,然后输入总的sga大小.
手工配置
自动管理的只有四个部分
db buffer cache
shared pool
large pool
java pool
你可以通过设置sga_target来配置asmm.
如果你为sga_target设置了非零值,下面四个内存池是自动配置大小的:
database buffer cache
shared pool
large pool
java pool
如果你把sga_target设置为零,asmm关闭了.默认的值就是0.
在过去的版本中的单独参数没有作废.
下面的参数还是手工设置大小的:
log buffer
other buffer caches(keep/recycle,other block sizes)
streams pool
fixed sga和其它的内部分配的
自动调整sga参数的行为
当sgs_target没有设置或设置为零的时候
-自动调整的参数向以前那样
-例外:shared_pool_size
select sum(bytes)/1024/1024 from v$sgastat
where pool= 'shared pool';
当sga_target设置了
-默认的自动设置的参数为0
-如果非零值就是下限
如果sga_target没有设或等于零,自动调整的sga参数就向以前的一样.然而,shared_pool_size是个例外:内部分布的元数据(例如用在进程和会话数据)现在已经包括在shared_pool_size参数中.这样,你为了分配这些内存,当升级你的oracle 10g数据库的时候需要加大你的shared_pool_size参数.例如,如果你在以前的版本中的共享池是256m,你的内部分配是32m,那为了得到同样的效果,在你的10g数据库中要设置为288m.上面的查询计算包括内部分配的shared_pool的大小.在运行升级之前,你首先要进行这次查询.
当sga_target设为非0,自动调整的参数默认都是0.他们的大小都是通过asmm算法自动设置的.例如,sga_target设为8g,shared_pool_size是1g,这样就告诉asmm算法不会把共享池设为1g以下,尽管更大的值更好.你也可以使用下面的查询看自动调整组件的大小.
select component,current_size/1024/1024
from v$sga_dynamic_components;
手工调整sga参数的行为
一些组件不是自动调整的:
-keep 和recycle 缓冲区
-块倍数的缓冲
-log 缓冲
-streams池
这些参数是用户指定的
精确的控制这些组件的大小
使用v$parameter视图
select name,value,isdefault
from v$parameter
where name like '%size';
重新设置sga_target的大小
sga_target初始化参数
是动态的
最大可以是sga_max_size的大小
可以减少到所有组件的最小值
sga_target影响仅仅是自动调整的组件
sga_target是动态参数,可以通过db control或alter system命令修改.
sga_target最大可以是sga_max_size的大小.它可以减少到任一个自动调整的组件到达了最小值,要么是用户指定的最小值,
要么是内部决定的最小值.
如果你增加sga_target的大小,增加的内存根据自动调整的测量分布到自动调整的组件上.
如果你减小sga_target的大小,内存就通过自动调整测量从一个或多个自动调整组件上取消.这样,sga_target的变化仅影响自动调整组件的大小.
取消自动共享内存管理
设置sga_target为零取消自动调整
自动参数设置为他们的值
sga的大小不影响
你可以动态的设置sga_target为零来取消自动共享内存管理.这个时候,所有的自动调整的参数都是相应组件当前的大小,即使用户早期设置了不同的非0值.
手工的改变动态sga参数的大小
对于自动调整的参数,手工的改变它的大小:
如果新的值的比当前的值大,立刻就会生效.
如果新的值比当前值小,就会改变到最小值
手工改变参数的大小影响sga的可调部分
当重新设置了sga_target的大小的时候,只有新值比当前组件的值大的时候才会立刻改变.如果你设置sga_target为8g,设置shared_pool_size为2g,你确信为了容纳必要的内存,共享池至少2g.当你把共享池调为1g的时候,不会立刻改变共享池的大小.它只会告诉自动内存调整算法在需要的时候,会把共享池改为1g.另外,如果一开始共享池是1g,你把它设置为2g,那么马上就生效.在重新改变操作中使用的内存是从一个或几个其它的自动调整的组件中得到了,手工的组件不受影响.
手工改变大小的组件也可以动态的修改,但是他们的不同就是马上就是设置的值.这样,如果手工组件的值增加,额外的内存就是从一个或多个自动调整的组件中获得的.如果手工组件的值减少了,释放出来的内存就给了自动调整大小的组件.
自动优化统计收集:概览
oracle8i提供dbms_stats包
dba决定怎么去收集统计
dba决定什么时候去收集统计
oracle9i决定怎么去收集统计
统计可以使用单个命令仅此收集
dba决定什么时候去收集统计
oracle10g完全自动收集统计的
dba不用去收集统计
默认就进行表监控
为了查询优化器产生更好的执行计划,在对象上必要有合法的统计.在过去,统计收集(或让作业去做)是典型的dba的责任.另外,有必要对改变的对象进行跟踪,来看什么时候有必要进行统计收集.如果对象的统计很陈旧或没有统计,就可能产生无效的sql执行计划.
在oracle9i(假定使用了监控)下面的dbms_status命令可以用来产生相应的统计"
dbms_stats.gather_schema_stats(schema_name,options=>'GATHER AUTO');
这个命令收集优化的统计,包括柱状图,对那些对象那些当前的统计是陈旧的.然后,你必须打开监控,并且有计划的执行这个命令.
在oracle10g中,自动优化统计收集自动这些任务,减少了你的收集统计的必要.
这个特性减少了由于sql语句统计失效或陈旧而导致性能很差的可能性,通过提高查询优化器的最家的输出提高了sql执行的性能.
GATHER_STATS_JOB
默认的,在数据库创建的时候就创建了gather_stats_job,执行dbms_stats.gather_database_stats_job_proc过程,使用schedular.
默认的定义了两个窗口.
WEEKENIGHT_WINDOW定义在下午10点到上午六点.从周一到周五.
WEEKEND_WINDOW定义从上午12电到周一12点.
默认的,MAINTENANCE_WINDOW_GROUP组包含这两个窗口也已经邓菁来源.
gather_stats_job使用特定的计划任务叫auto_tasks_job_class.这个类是自动创建的,而且跟特性的资源消费者组联系,这个消费者组叫做auto_task_consumer_group.这样确保任务使用auto_task_consumer_group.如果你想控制gather_stats_job的资源使用,你之需要为maintenance_window_group定义一个资源管理者组来为auto_task_cousumer_group分配资源.
为了让gather_stats_job工作正常,你必须确定statistics_level初始化参数设置为typical.
改变gather_stats_job的计划任务
你可以为定义的管理窗口来自定义开放时间.例如,你可以改变他们的时间间隔和重复的频度.你也可以添加资源计划到这些窗口中,来控制gather_stats_job使用的资源.
从db control主页,点击管理标签,然后在scheduler部分点击windows链接.就让你到了scheduler windows页.这里你可以选中一个窗口,并且可以点edit来修改它的特性.在这页,你还可以打开或关闭特定的窗口.只要你在下拉框为特定的窗口选择相应的行为,点ok就可以了.
锁定统计
阻止自动收集
主要用在可变的表中
-没有统计的锁定,意味着动态的取样.
-锁定代表值的统计
在oracle10g,你可以看到特定表的统计,通过新的dbms_stats包的lock_table_stats过程.你可以锁定一个表的统计,来阻止自动统计收集,这样你就可以使用动态的取样.你也可以在某个时间点锁定可变的表的统计,当它满了的时候.
你可以可以使用lock_schema_stats跑在sechma基本锁定统计.
你可以查看user/all/dba_tab_statistics视图来看stattype_locked列来看一个表是不是锁定了.
你也可以使用unlock_table_stats过程来锁定特定表的统计.
使用dbms_stats包
新的force参数
不考虑统计的锁定
在10g,dbms_status包delete_*_status,import_*_status,restore_*_status,set_*_stats新的参数就是force.
你可以使用force为ture,覆盖了统计,即使他们锁定了
自动统计收集应该考虑的事情
你在下面的情况还是应该手工收集.
在批操作之后
当使用外表的时候
收集系统统计
收集固定对象的统计.
优化器统计的历史
无论什么时候,优化统计在被dbms_status包修改之后,老的版本自动的保存,可以将来恢复.统计可以使用dbms_stats的restore过来来进行恢复.这个过程使用时间戳作为参数,把统计也是作为时间戳来恢复的.如果新的统计导致不是最佳的执行计划,你想使用以前的统计值,这是非常有用的.
你也可以使用dba_optstat_operation视图看所有的dbms_stats操作执行在schema和数据库基本的起始时间.
dba_tab_stats_history视图默认包含过去31天的表统计修改的历史.这意味你可以恢复到最近31天的任一个时间.老的数据自动的被清除.
管理历史优化统计
restore_table_stats恢复特定时间戳的表的统计.它也恢复相关的索引和列的统计.如果表的统计在特定的时间点是锁定的,那么这个过程也锁定这个统计.
restroe_schema_stats恢复指定时间戳的一个schema的索引的表的统计.
restore_database_stats恢复指定时间戳的数据库的所有表的统计.
restore_fixed_objects_stats恢复指定时间戳的所有固定表的统计.你必须有sysdba,或analyze any dictionary系统权限去执行这个过程.
restore_system_stats恢复指定时间戳的系统的统计
使用alter_stats_history_retention过程去配置保持时间.
get_stats_history_retention给出当年的统计历史保留时间的值.
sget_stats_history_availablity给出你的统计历史的最老的时间戳.
如果没有启动自动清除,你可以手工的使用purge_stats来清除旧的版本的统计.
自动undo保持时间调整
前期调整
undo保持时间是为最长时间的查询调整的
每30秒收集一次查询持续时间
反作用调整
由于空间的压力,这个保持时间会慢慢的变低
最老的没有过期的extent首先使用
undo保持时间不会比下面的两个小:undo_retention或15分钟.
默认是启动的
默认的,oracle10g通过收集数据库统计,例如最长时间的查询和undo产生率来自动调整undo保持时间.
这些统计是常规的收集来决定undo保留时间的最佳值.
你可以通过设置undo_retention参数来影响自动调整.默认的是900秒.如果你不设置值,或设为零,那么oracle10g自动的为当前的undo表空间调整值,900秒为最小的.如果你设的不是零,那么oracle10g继续使用自动调整保持时间,你设定的值为最小值.
尽管你有足够的undo空间,这个特性减少了你运行长查询的快照太老的发生可能性.
自动checkpoint调整
书上有错误.
10g无特别的改动,应该跟9i一样.
|