OCA读书笔记(13) - 性能管理

使用EM监控性能
使用自动内存管理(AMM)
使用Memory Advisor分配内存
查看性能相关动态视图
诊断无效的和不可用的对象

创建问题SQL
sqlplus / as sysdba
conn scott/tiger;
declare
i number;
j number;
begin
i := 0;
loop
j := sqrt(i);
i := i + 1;
end loop;
end;
/

查找问题SQL
[root@nylg ~]# top --查看pid
su - oracle
sqlplus / as sysdba;
set long 1000;
select sql_fulltext from v$sqlarea where sql_id=(select sql_id from v$session where paddr=(select addr
from v$process where spid=&pid))

AMM(自动内存管理,针对SGA和PGA)
指定总的内存,系统自动分配SGA和PGA。

show parameter memory_max_target
show parameter memory_target

alter system set memory_target=1024M;
alter system set memory_max_target=1024M scope=spfile;
startup force;

ASMM(自动共享内存管理)
指定SGA,系统自动分配SharedPool, BufferCache, LargePool, JavaPool, LargePool等值。
select component, current_size from v$memory_dynamic_components;

查看性能相关动态视图
select table_name from dict where table_name like '%SYSSTAT%';
select table_name from dict where table_name like '%SESSTAT%';
select table_name from dict where table_name like '%SERVICE_STAT%';
select table_name from dict where table_name like '%SYSTEM%';
select table_name from dict where table_name like '%SESSION%';
select table_name from dict where table_name like '%SERVICE%';

无效和不可用对象
索引和试图引用的对象不存在导致索引和试图无效或不可用
无效对象:
sqlplus / as sysdba;
grant create view to scott;

conn scott/tiger;
create table e as select * from emp;
create view v1 as select * from e;

conn / as sysdba;
select owner,name,type,referenced_owner,referenced_name,referenced_type from dba_dependencies where owner='SCOTT';
alter table e move;
select owner, object_name, object_type from dba_objects where status='INVALID';

运行下面的命令尝试编译所有无效对象。
@?/rdbms/admin/utlrp
alter view v1 compile;

不可用索引
注意:如果希望数据库实现旧版本中无用索引导致返回错误消息的功能,那么可以执行命令:
alter system set skip_unusable_indexes=false;
select owner,index_name, status from dba_indexes where status='UNUSABLE';
alter index i1 rebuid;

索引条目
键列值 -- rowid
select ename, empno, rowid from emp;

select empno, ename, dbms_rowid.rowid_object(rowid) as "Object#", dbms_rowid.rowid_relative_fno(rowid) as "File#", dbms_rowid.rowid_block_number(rowid) as "Block#", dbms_rowid.rowid_row_number(rowid) as "Row#" from emp;

conn / as sysdba;
select owner, object_type,object_name from dba_objects where object_id='<Object#>';
select file_name, tablespace_name from dba_data_files where file_id=4;

 实验:

1.创建实验表:
conn scott/tiger
create table valid_t as select * from all_users;

2.创建一些依赖于此表的对象:
create index valid_i on valid_t(username);
create view valid_v as select * from valid_t;

create procedure valid_p as
begin
insert into valid_t values('name',99,sysdate);
commit;
end;
/

3.确认对象的状态:
col OBJECT_NAME for a11
select object_name,object_type,status from user_objects where object_name like 'VALID%';
select status from user_indexes where index_name = 'VALID_I';

其状态是VALID

4.针对表执行将会破坏对象的DDL命令:
alter table valid_t drop column created;
alter table valid_t move;

5.
select object_name,object_type,status from user_objects where object_name like 'VALID%';
select status from user_indexes where index_name = 'VALID_I';

6.使用无效的对象:
execute valid_p;
select * from valid_v;

7.尝试更正错误:
alter view valid_v compile;
alter procedure valid_p compile;
alter index valid_i rebuild online nologging;
由于表发生了更改,编译将会失效

8.将列再添回表中,更正错误:
alter table valid_t add(created date);
alter view valid_v compile;

9.
execute valid_p;
select * from valid_v;
执行成功

10.重新运行查询,所有的对象均以恢复正常,原因是尝试时将强制执行自动重新编译
select object_name,object_type,status from user_objects where object_name like 'VALID%';
select status from user_indexes where index_name = 'VALID_I';

11.实验结束,清理环境
drop table valid_t purge;
drop procedure valid_p;
drop view valid_v;

转载于:https://www.cnblogs.com/thlzhf/p/3382508.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值