第8课 数据库性能 作业(二)

六 自动段空间管理ASSM

要求使用在线重定义方式迁移表

优点:支持在线读/写,不影响大查询,对海量数据的表进行操作效率非常好,实质只更新数据字典,不移动数据

缺点:在线重定义后表上的主键、索引不会同步过来,必须重建,只变换表名.在finish转换过程中原表是锁定状态

官方文档: PL/SQL Packages and Types Reference -> 搜索在线重定义dbms_redefinition

1.创建MSSM表空间

conn jch8/jch8

drop tablespace MSSM including contents and datafiles;

create tablespace MSSM datafile '/u01/app/oracle/oradata/JCH2/mssm01.dbf' size 20m extent management local segment space management manual;

clipboard

2.创建ASSM表空间

drop tablespace ASSM including contents and datafiles;

create tablespace ASSM datafile '/u01/app/oracle/oradata/JCH2/assm01.dbf' size 20m extent management local segment space management auto;

clipboard[1]

3.检查表空间的段空间管理模式

select segment_space_management,tablespace_name from dba_tablespaces where tablespace_name in ('MSSM','ASSM');

clipboard[2]

4.在MSSM表空间上创建t表

conn jch8/jch8

drop table t purge;

create table t (a number constraint pk_t primary key) tablespace MSSM;

insert into t values(10);

insert into t values(20);

insert into t values(30);

insert into t values(40);

insert into t values(50);

commit;

select * from t;

select table_name,tablespace_name from user_tables where table_name='T';

clipboard[3]

5.使用在线重定义方式转换表存放的表空间,把T表从MSSM表空间迁移到ASSM表空间

基于primary key的在线重定义(场景有主键的表)

(1)验证是否满足基于主键在线重定义要求

execute dbms_redefinition.can_redef_table('JCH8','t',dbms_redefinition.cons_use_pk);

clipboard[4]

(2)创建在线重定义中间表

drop table t_interim purge;

create table t_interim (a number) tablespace assm; 要求两表的字段名必须一致,但字段类型可以不一致(① vachar2(10) ② vachar2(30))

(3)查看t表和t_interim表所在的表空间

select table_name,tablespace_name from user_tables where table_name in ('T','T_INTERIM');

clipboard[5]

(4)启动在线重定义

exec dbms_redefinition.start_redef_table('JCH8','t','t_interim'); 此时不能删除表了,启动的一瞬间就同步了一次数据

select * from t_interim;

clipboard[6]

(5)手工同步数据

exec dbms_redefinition.sync_interim_table('JCH8','t','t_interim'); 数据的差异越小,完成在线重定义的时间越少,对系统的开销也越少

(6)完成在线重定义

exec dbms_redefinition.finish_redef_table('JCH8','t','t_interim'); 在finish完成的一瞬间进行最后一次同步数据马上转换表名在finish转换过程中原表是锁定状态

clipboard[7]

(7)再次检查t表和t_interim表所在的表空间

select table_name,tablespace_name from user_tables where table_name in ('T','T_INTERIM');

clipboard[8]

select * from t;

select * from t_interim;

clipboard[9]

此时这两个表记录数是一致的

使用online选项重建索引

由于在线重定义不支持主键和索引同步,因此需要重建

select index_name,table_name,tablespace_name,status from user_indexes where index_name='PK_T';

alter index pk_t rebuild tablespace assm online;

select index_name,table_name,tablespace_name,status from user_indexes where index_name='PK_T';

clipboard[10]

小结:可见此时t表已经从MSSM表空间转换到ASSM表空间,通过交换角色完成。

基于rowid的在线重定义(场景没有主键的表)

(1)重新初始化环境

drop table t purge;

drop table t_interim purge;

create table t (a number) tablespace MSSM;

insert into t values(10);

insert into t values(20);

insert into t values(30);

insert into t values(40);

insert into t values(50);

commit;

select * from t;

select table_name,tablespace_name from user_tables where table_name='T';

clipboard[11]

(2)验证是否满足基于rowid的在线重定义要求

exec dbms_redefinition.can_redef_table('jch8','t',dbms_redefinition.cons_use_rowid);

clipboard[12]

(3)创建在线重定义中间表

create table t_interim (a number) tablespace assm;

select * from t_interim;

clipboard[13]

(4)查看t表和t_interim表所在的表空间

select table_name,tablespace_name from user_tables where table_name in ('T','T_INTERIM');

clipboard[14]

(5)启动在线重定义

exec dbms_redefinition.start_redef_table('jch8','t','t_interim',null,dbms_redefinition.cons_use_rowid);

clipboard[15]

select * from t_interim; 启动时就刷了一遍数据,我们要使用这个中间表进行在线重定义因此这个表此时不能drop

clipboard[16]

(6)手工同步数据

exec dbms_redefinition.sync_interim_table('jch8','t','t_interim');

(7)完成在线重定义

exec dbms_redefinition.finish_redef_table('jch8','t','t_interim'); --瞬间交换表名,只有完成在线重定义才能删除表

clipboard[17]

(8)再次查看t表和t_interim表所在的表空间

select table_name,tablespace_name from user_tables where table_name in ('T','T_INTERIM');

clipboard[18]

同样效果

七 检查点

官方文档:Reference -> LOG_CHECKPOINTS_TO_ALERT

要求将检查点信息写入alert日志

场景:默认情况下检查点信息不会写入alert日志,为了更详细的监控数据库读写状态,了解检查点工作频率可以把其信息写入alert日志。

检查点作用:

1.写脏数据,利用DBWR进程

2.同步数据文件头和控制文件SCN号

3.MRRT参数指定触发间隔,可以控制“实例恢复”时间

调整log_checkpoints_to_alert参数为“true”

alter system set log_checkpoints_to_alert=false;

show parameter checkpoints

alter system set log_checkpoints_to_alert=true; 调整后就可以写入到alert日志了

show parameter checkpoints

clipboard[40]

测试功能是否实现

手工触发检查点

alter system checkpoint;

alter system checkpoint;

检查alert日志是否记录检查点信息

tail -f /u01/app/oracle/admin/JCH2/bdump/alert_JCH2.log

Beginning global checkpoint up to RBA [0x6.12442.10], SCN: 223546

Completed checkpoint up to RBA [0x6.12442.10], SCN: 223546

Beginning global checkpoint up to RBA [0x6.12442.10], SCN: 223547

Completed checkpoint up to RBA [0x6.12442.10], SCN: 223547

clipboard[41]

多执行几次    alter system checkpoint;    的结果:

clipboard[42]

八 ASMM

官方文档:SQL Reference -> ALTER SYSTEM

要求数据库启用自动共享模式ASMM管理内存

ASMM:auto share memory manager 让Oracle自动管理SGA中的各个内存大小,根据实际业务需要自动调整大小

说明:

(1)sga_target=0 禁用ASMM模式

(2)sga_target>0 启用ASMM模式

要求

设置SGA的最大值为400M

PGA调整到100M

JAVA_POOL调整到52M(当使用java组件时用到的内存缓冲区)

1.调整sga_max_size值为400M

alter system set sga_target=300M scope=spfile;

show parameter sga_max_size;

alter system set sga_max_size=400M scope=spfile; 静态

clipboard[43]

shutdown immediate

startup

show parameter sga_max_size;

clipboard[44]

2.调整sga_target值为352M

alter system set sga_target=352M;

show parameter sga_target;

alter system set sga_target=352M; 动态

show parameter sga_target;

clipboard[45]

3.调整pga_aggregate_target值为100M

alter system set pga_aggregate_target=60M;

show parameter pga_aggregate_target

alter system set pga_aggregate_target=100M; 动态

show parameter pga_aggregate_target

clipboard[46]

4.调整java_pool_size值为52M

alter system set java_pool_size=0;

show parameter java_pool_size

alter system set java_pool_size=52M;

show parameter java_pool_size

clipboard[47]

shutdown immediate

startup

小结:SGA和PGA,SGA占物理内存的45%~50%,PGA占物理内存10%~20%。

原文地址:https://www.cnblogs.com/oraclesea/p/3550563.html