12, OCP - performance tuning

309
-1

Published on

Performance Tuning Basic

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
309
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

12, OCP - performance tuning

  1. 1. Performance Tuning
  2. 2. Overview• 系统调优是一个涉及面很宽泛的主题, 它可以 分为硬件、软件或者按系统层次分显示层、应 用层、数据库层等. 这一章介绍的是Oracle数 据库层的调优, 着重于一些工具的使用和系统 的配置, 包括: – 使用自动内存管理(Automatic Memory Management) – 使用内存顾问程序(Memory Advisor) 配置自动PGA 内存管理(Automatic PGA Memory Management) – 使用SQL调优顾问程序(SQL Tuning Advisor) – 使用SQL访问顾问程序(SQL Access Advisor)
  3. 3. Managing Memory - Overview & PGA• Oracle实例的内存管理分为两个部分: PGA内存管理和SGA内存管理. 从9i开 始实现了对PGA内存的自动管理, 10g实现了对SGA内存的自动管理, 在11g 中则更进一步允许将PGA和SGA作为一个整体进行自动管理.• PGA Memory Management – 用户会话由客户端进程和服务端进程组成, 与服务端进程相关联的是PGA内存, 这是每一个会话私有的. PGA内存用于存储与会话相关的数据, 包括: • 临时表数据(temporary tables) • 排序临时数据(sorting rows) • 合并位图(merging bitmaps) • 变量(variables) • 调用堆栈(call stack) 对于会话数据, 有的必须使用PGA内存, 比如调用堆栈; 另外的数据在PGA内存不 够的情况下会使用磁盘空间作为临时的存储, 比如临时表空间. – 在11g版本中PGA内存支持手动管理, 但这只是为了向后兼容. 使用如下两个参 数启用PGA内存的自动管理: • WORKAREA_SIZE_POLICY • PGA_AGGREGATE_TARGET 第一个参数的默认值是AUTO, 表示系统自动为会话分配PGA内存; 第二个参数 表示所有会话PGA内存总和的目标值.
  4. 4. Managing Memory - SGA• SGA包含以下内存结构, 它们的大小均可以进行独立的设置: – 共享池 数据块缓冲区 – 大池 流池 – Java池 重做日志缓冲区 这里不讨论大池、流池和Java池. Oracle官方推荐除日志缓冲区(由启动参 数log_buffer决定)之外, 对SGA使用自动内存管理, 在这种方式下系统会自 动调节各个组件占用的内存空间, 以达到最佳的效率.使用SGA自动内存管 理需要作如下设置: – 设置SGA_TARGET参数, 该参数表示SGA总体内存的目标值; 将下面所有用户SGA手动管理的参数设置为0: – SHARED_POOL_SIZE – DB_CACHE_SIZE – LARGE_POOL_SIZE – STREAMS_POOL_SIZE – JAVA_POOL_SIZE 在设置了SGA_TARGET参数的情况下, 如果对上述的任意参数设置了大于0的数值, 那么该设置将作为该SGA组件分配内存的最小值, SGA仍使用自动管理.
  5. 5. Automatic Memory Management - AMM• 前面分别介绍了PGA和SGA的自动内存管理, 这里介绍 将PGA和SGA两者作为一个整体进行自动管理, 这需要 设置参数MEMORY_TARGET, 前面介绍的参数均不作设 置.• 自动内存管理的好处是实现了在PGA和SGA之间的内存 转移, 当需要更多的PGA内存时可以将不用的SGA内存 分配出来, 反之也一样. Tip: MEMORY_TARGET参数是一个动态参数, 该参数的大 小需要小于MEMORY_MAX_TARGET参数的设置, 后者则 是一个静态参数. Tip: 在使用AMM的情况下, 如果设置了SGA_TARGET 和PGA_AGGREGATE_TARGET参数, 它们会被作为各自的 最小值使用.
  6. 6. Memory Advisor• AMM基于内存顾问程序做出内存分配的决策, 另外也可以通过视图v$pga_target_advice、 v$sga_target_advice和v$memory_target_advice 查看这些建议, eg:
  7. 7. SQL Tuning Advisor• SQL调优顾问程序会对执行的SQL语句进行分析, 并提出相关的SQL调 优策略, 比如创建索引、使用物化视图或者SQL重写, 也可以手动调 用SQL调优顾问程序. 该顾问程序执行下面的动作: – 统计数据分析(statistics analysis) 检查是否有失效或者丢失的统计数据, 如果存在则建议更新或者重新创 建; – SQL剖析(SQL Profiling) 部分执行(partial execution)SQL, 并存储相应的统计信息; – 访问路径分析(access paths) 分析创建索引、物化视图和分区的影响; – SQL结构分析(structure analysis) 尝试重组织SQL语句, 查看是否生成更好的执行计划.• STA可以使用下面来源的SQL语句进行分析 – 缓存在共享池中的SQL语句 – 预先创建的SQL – 来自AWR的SQL语句 – ad hoc SQL语句
  8. 8. SQL Tuning Advisor - DBMS_SQLTUNE• 使用DBMS_SQLTUNE包的如下过程对SQL语句进行 分析, • CREATE_TUNING_TASK • EXECUTE_TUNING_TASK • REPORT_TUNINIG_TASK 分别用于创建、执行SQL语句分析任务和查看结果. 另外 可以通过如下视图查看SQL语句分析的状态: – DBA_ADVISOR_LOG 查看任务的状态及执行时统计数据. – DBA_/USER_ADVISOR_TASKS 顾问程序任务的详细信息. – V$ADVISOR_PROGRESS 顾问程序任务执行的完成情况和剩余时间.
  9. 9. SQL Tuning Advisor - Demo• 首先创建示例使用的表 create table demo.object_analysis as select * from all_objects;• 创建任务 variable vtask varchar2(100); begin :vtask := dbms_sqltune.create_tuning_task(sql_text=> select distinct object_id from demo.object_analysis); end; /• 执行任务 execute dbms_sqltune.execute_tuning_task(:vtask);• 查看任务结果, 返回的是CLOB字段 select dbms_sqltune.report_tuning_task(:vtask) from dual;• 最后删除object_analysis表 drop table object_analysis;
  10. 10. SQL Access Advisor - DBMS_ADVISOR• SQL访问顾问程序主要提供与创建索引、物化视图以及分区相关的优化建议, 可以 使用dbms_advisor包进行调用, 示例: – 调用quick_tune过程 begin dbms_advisor.quick_tune( dbms_advisor.sqlaccess_advisor, task1, select distinct object_id from demo.object_analysis); end; / – 创建一个数据库目录, 该目录存储分析结果文件 create directory tune_scripts as /tmp/tune_scripts; – 将分析结果写入文件 begin dbms_advisor.create_file( dbms_advisor.get_task_script(task1), TUNE_SCRIPTS, tune_fts.sql); end; / – 接下来可以使用操作系统命令查看分析文件的内容, 该文件会包含 创建相应索引、物化视图等对象的脚本.
  11. 11. END

×