zoukankan      html  css  js  c++  java
  • 第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%。

  • 相关阅读:
    Linux学习笔记:常用100条命令(三)
    Linux学习笔记:常用100条命令(二)
    k8s的imagePullSecrets如何生成及使用
    Jenkins基于https的k8s配置
    ubuntu supervisor管理uwsgi+nginx
    ubuntu Django + Uwsgi + Nginx 的生产环境部署
    ubuntu 安装和配置 GitLab
    ubuntu 安装harbor仓库
    ubuntu 安装Jenkins
    php过滤html标签截取部分内容
  • 原文地址:https://www.cnblogs.com/oraclesea/p/3550563.html
Copyright © 2011-2022 走看看