zoukankan      html  css  js  c++  java
  • oracle 11g ocp 笔记(25)--性能调整

    一、内存的管理

    1、PGA管理

        PGA作用:

                临时表、排序行、合并位图、标量、调用堆栈。

               相关参数: PGA_AGGERGATE_TARGET PAG最大值。

                                  WORKAREA_SIZE_POLICY  默认是AUTO

                建议使用自动内存管理

    2、SGA管理:

             SHARED_POOL_SIZE

            DB_CHACHE_SIZE

            LARGE_POOL_SIZE

            STREMAS_POOL_SIZE

           JAVA_POOL_SIZE

           如果启用内存管理,则这些都是0,使用SGA_TARGET   LOG_BUFFER特殊,不能自动管理。

    3、自动内存管理

           MEMORY_TARGET  动态的

          MEMORY_MAX_TARGET  静态 的。

    二、内存顾问

         v$pga_target_advice

         v$sga_target_advice

        v$memory_target_advance;

      三个视图。xxx_target_pactor=1的是现在的值,db_time是数据库的时间。

         statistics_level =typical 或者all 的时候才可以。

    三、SQL调整顾问

          DBMS_SQLTUNE包
    ---------------------------------------------------------------------------

    1、DBMS_SQLTUNE.CREATE_TUNING_TASK 创建任务。

    1. DECLARE  
    2.   my_task_name VARCHAR2(30);  
    3.   my_sqltext   CLOB;  
    4. BEGIN  
    5.   my_sqltext   := 'select count(*) from bigtab a, smalltab b where a.object_name=b.table_name';  
    6.   my_task_name := DBMS_SQLTUNE.CREATE_TUNING_TASK(sql_text    => my_sqltext,  
    7.    user_name   => 'U1',   -- 注意是大写,不然会报错,用户无效  
    8.    scope       => 'COMPREHENSIVE',  
    9.    time_limit  => 60,  
    10.    task_name   => 'tuning_sql_test',  
    11.    description => 'Task to tune a query on a specified table');  
    12. END;  

    在函数CREATE_TUNING_TASKsql_text是需要优化的语句,user_name是该语句通过哪个用户执行,scope是优化范围(limitedcomprehensive),time_limit优化过程的时间限制(单位秒),task_name优化任务名称,description优化任务描述。

    2、执行优化任务。

          sys@ORCL> exec DBMS_SQLTUNE.EXECUTE_TUNING_TASK(task_name => 'tuning_sql_test'); 

     

    检查状态     SELECT task_name,status FROM USER_ADVISOR_TASKS WHERE task_name ='tuning_sql_test'; 

    3、获取结果:

        SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK( 'tuning_sql_test') from DUAL; 

    -----------------------------------------------------------------------

    四、SQL访问顾问

       exec dbms_advisor.quick_tune() 直接快速的运行。

    五、识别和修复不可用的对象

     二.修改无效对象和无用对象
    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命令移动了指定的表,表的移动操作会改变所有行的物理位置。
        在旧版本数据库中,出现无用索引,会话会返回错误消息。
        在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  -- 不为索引重建操作生成重做,可以快速重建,但需要立即对包含指定索引的表空间进行备份.
        默认方式下,重建需要表锁,并将生成重做。


        重建索引需要额外的存储空间,需做预先规划,确保具有可用的空间。

    六、database replay

    0概述

        为什么要使用 replay

      个别操作不会被捕获。

    1、捕获工作负荷。

       exec dbms_workload_capture.start_capture('play capture','DBPLY_DIR');

    2、终止捕获

    exec dbms_workload_capture.finish_capture;

    3、预处理

     

    exec dbms_workload_replay.process_capture('DBPLY_DIR');

     

     

    3、启动重放

    exec dbms_workload_replay.initialize_replay('play capture','DBPLY_DIR');

     

    exec dbms_workload_replay.prepare_replay;
     
    4、查看报告
    select id,capture_id,directory,start_time,end_time from dba_workload_replays;

     

            ID CAPTURE_ID DIRECTORY                      START_TIM END_TIME

    ---------- ---------- ------------------------------ --------- ---------

            13         89 DBPLY_DIR                      25-JUL-15 25-JUL-15

            12         81 DB_REPLAY                      24-JUL-15 24-JUL-15


    设置屏幕输出的缓冲区  

    set long 100000

    select dbms_workload_replay.report(13,'TEXT') from dual;

     

  • 相关阅读:
    规则引擎集成接口(一)初始体验
    转载--Defunct僵尸进程
    转载--sigprocmask阻塞进程
    转载--__attribute__ 你知多少?
    转载--va_list
    转载--如何使用# ## ... _ _VA_ARGS_ _
    转载--C语言中的__FILE__、__LINE__和__func__
    转载--wait waitpid解释
    转载--c语言宏定义(1)
    转载--c语言宏定义(2)
  • 原文地址:https://www.cnblogs.com/hezt1114/p/9000816.html
Copyright © 2011-2022 走看看