OracleOCP笔记(23)性能管理-⽆效对象
Oracle OCP笔记(23)性能管理 - ⽆效对象
⼀.决定数据库性能的因数
1.内存使⽤
Oracle实例的内存使⽤对性能起着⾄关重要的作⽤,如果未按最佳⽅式为各种结构分配内存量,性能将急转直下。
分配的内存量不能过少,也不能过多。
2.数据库对象的状态
如果⽆法使⽤索引,SQL语句的执⾏速度可能⼤⼤降低,并更密集地使⽤资源。
如果PL/SQL对象是⽆效的,则会对性能产⽣负⾯影响,也可能导致错误。应该识别、了解和修复所有不可⽤的对象和⽆效对象。
⼆.修改⽆效对象和⽆⽤对象
1.⽆效对象
理想状态下,所有对象都处于有效(valid)状态。PL/SQL对象和视图可能变得⽆效(invalid).
PL/SQL对象包括: 过程、函数、触发器、程序包、对象类型
在PL/SQL过程对象引⽤的任何数据对象在编译后发⽣了变化,则会将此过程标记为INVALID.
Oracle始终会⾃动重新编译⽆效的PL/SQL对象和视图,但并不⼀定能够成功。
查看⽆效对象:
select owner,object_name,object_type from dba_objects where status='INVALID'
尝试编译⽆效对象:
alter object_type object_name compile;
alter procedure procedure_name compile;
alter view view_name compile;
show errors                      -- 查看编译错误(视图不⽀持)
select * from dba_dependencies;  -- 查看对象依赖表
2.⽆⽤的索引
⼀个索引由若⼲按照顺序排列的索引键值组成,其中每个索引键值都具有相关联的rowid,rowid是索引键引⽤的⾏的位置物理指针。
如果某个表的rowid发⽣变化,那么索引就会被标记为⽆⽤。
索引可能变得⽆⽤(unusable),原因很多,最常见的原因是使⽤alter table table_name move命令移动了指定的表,表的移动操作会改变所有⾏的物理位置。
在旧版本数据库中,出现⽆⽤索引,会话会返回错误消息。
oracle ocp培训在10g以后版本中,如果SQL语句视图使⽤⽆⽤的索引,语句会重新使⽤不需要该索引的执⾏计划,执⾏总会成功,但性能可能显著降低。可以设置参数:
skip_unusable_indexes  -- 跳过⽆⽤索引,默认值为TRUE.
如果希望实现旧版本中⽆⽤索引返回错误消息的功能,修改参数为FALSE.
alter system set skip_unusable_indexes=false;
查看⽆⽤的索引:
select owner,index_name from dba_indexes where status='UNUSABLE';
重建索引:
alter index index_name rebuild online nologging;
选项:
tablespace -- 指定表空间,默认在当前的表空间重建.
online    -- 重建过程会为DML命令锁定指定的表,使⽤online选项可以避免这种状况.
nologging  -- 不为索引重建操作⽣成重做,可以快速重建,但需要⽴即对包含指定索引的表空间进⾏备份.    默认⽅式下,重建需要表锁,并将⽣成重做。
重建索引需要额外的存储空间,需做预先规划,确保具有可⽤的空间。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。