第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;
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;
3.检查表空间的段空间管理模式
select segment_space_management,tablespace_name from dba_tablespaces where tablespace_name in ('MSSM','ASSM');
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';
5.使用在线重定义方式转换表存放的表空间,把T表从MSSM表空间迁移到ASSM表空间
基于primary key的在线重定义(场景有主键的表)
(1)验证是否满足基于主键在线重定义要求
execute dbms_redefinition.can_redef_table('JCH8','t',dbms_redefinition.cons_use_pk);
(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');
(4)启动在线重定义
exec dbms_redefinition.start_redef_table('JCH8','t','t_interim'); 此时不能删除表了,启动的一瞬间就同步了一次数据
select * from t_interim;
(5)手工同步数据
exec dbms_redefinition.sync_interim_table('JCH8','t','t_interim'); 数据的差异越小,完成在线重定义的时间越少,对系统的开销也越少
(6)完成在线重定义
exec dbms_redefinition.finish_redef_table('JCH8','t','t_interim'); 在finish完成的一瞬间进行最后一次同步数据马上转换表名在finish转换过程中原表是锁定状态
(7)再次检查t表和t_interim表所在的表空间
select table_name,tablespace_name from user_tables where table_name in ('T','T_INTERIM');
select * from t;
select * from t_interim;
此时这两个表记录数是一致的
使用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';
小结:可见此时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';
(2)验证是否满足基于rowid的在线重定义要求
exec dbms_redefinition.can_redef_table('jch8','t',dbms_redefinition.cons_use_rowid);
(3)创建在线重定义中间表
create table t_interim (a number) tablespace assm;
select * from t_interim;
(4)查看t表和t_interim表所在的表空间
select table_name,tablespace_name from user_tables where table_name in ('T','T_INTERIM');
(5)启动在线重定义
exec dbms_redefinition.start_redef_table('jch8','t','t_interim',null,dbms_redefinition.cons_use_rowid);
select * from t_interim; 启动时就刷了一遍数据,我们要使用这个中间表进行在线重定义因此这个表此时不能drop
(6)手工同步数据
exec dbms_redefinition.sync_interim_table('jch8','t','t_interim');
(7)完成在线重定义
exec dbms_redefinition.finish_redef_table('jch8','t','t_interim'); --瞬间交换表名,只有完成在线重定义才能删除表
(8)再次查看t表和t_interim表所在的表空间
select table_name,tablespace_name from user_tables where table_name in ('T','T_INTERIM');
同样效果
七 检查点
官方文档: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
测试功能是否实现
手工触发检查点
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
多执行几次 alter system checkpoint; 的结果:
八 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; 静态
shutdown immediate
startup
show parameter sga_max_size;
2.调整sga_target值为352M
alter system set sga_target=352M;
show parameter sga_target;
alter system set sga_target=352M; 动态
show parameter sga_target;
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
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
shutdown immediate
startup
小结:SGA和PGA,SGA占物理内存的45%~50%,PGA占物理内存10%~20%。