• 1. 自我介绍谢永生 网名:warehouse Itpub新技术区斑竹 Oracle独立技术顾问 ***特约讲师
  • 2. Oracle高性能调整数据库物理结构设计和实例级别的调整 数据库逻辑结构设计和应用级别的调整
  • 3. 数据库物理结构设计和实例级别的调整
  • 4. 多年的工作经验告诉我工作需要经历的4个阶段完成工作 高效完成工作 高效、安全完成工作 安全、高效完成工作
  • 5. Oracle性能因素
  • 6. Oracle性能优化方法论 Why tunes? Who tunes? What to tune? How to tune? When to tune?
  • 7. 为什么(why)要优化系统慢了? 其实慢只是表象 距离找到慢的原因可能路还很长…
  • 8. 优化什么(what)(需要找到慢的原因) 是系统的问题? 是数据库的问题? 是应用设计的问题? 是代码编写的问题? 是架构的问题?
  • 9. 怎样(how)优化 根据what中明确的问题,需要制定出调整策略 这个过程可能需要借助很多工具,如是系统的问题,可能需要借助topas、vmstat、iostat等;如果是db的问题则可能需要通过awr、ash、addm等
  • 10. 谁(who)来优化 系统架构师(系统架构的问题,麻烦大了) 系统管理员(os、storage问题) 数据库管理员(db问题) 应用程序设计人员(应用设计问题) 应用程序开发人员(代码书写问题)
  • 11. 什么时候(when)优化 7*24 高可用性系统 是否需要停应用 允许停机的时间 在可以停机的时间内是否能够顺利完成调整 调整前的准备工作(是否需要备份db以及oracle_home)
  • 12. oracle是如何工作的
  • 13. Oracle数据库的物理结构Spfile(pfile) Controlfile Datafile Redo logfile Password file Archivelog
  • 14. Oracle数据库的逻辑结构Database Tablespace Segment Extent Block Table Index
  • 15. 逻辑结构之间的关系
  • 16. 逻辑结构和物理结构的关系
  • 17. 什么是oracle实例
  • 18. Oracle实例的重要组成部分后台进程(background process) select * from v$bgprocess 共享内存(sga:system global area) select * from v$sga_dynamic_components
  • 19. Checkpoint和实例恢复调整理解checkpoint在oracle db中的重要意义 理解dbwr的写机制 理解lgwr的写机制 理解实例恢复的过程 理解redo的大小对性能的影响
  • 20. 合理使用计算机资源 不论何种应用,计算机和计算机交互无非是process和process之间充分使用下面4种资源交互: File (disk io) Memory (为什么计算机要使用内存?减少物理io) Network Cpu
  • 21. Io调整IO调整的原则 a.最小化io的访问(要贯穿整个应用的设计) b.均衡各类文件的分布(ctl,dbf,redo,archivedlog,tempfile) c.合理使用temporary tablespace(group)
  • 22. Io调整存储级调整 a.存储规划不合理,导致io过于集中 b.寻找证据 1)iostat 2)Topas 3)Select * from v$filestat 4)Select * from v$tempstat c.Sa(system administrator)或者厂商协助调整
  • 23. 明白存储级别上和io性能相关的重要概念Raid(redundant array of independent disks ) Mirror Strip Array Lun(logical unit number)
  • 24. 理解存储级别上的lun和os级别上的物理卷的对应关系Lun是存储上的逻辑概念 物理卷是主机上的物理概念 Lun和物理卷和disk相比都是逻辑概念 Lun和物理卷都不能决定磁盘的io性能 决定磁盘io性能的是array里真真包含的disk的数量,数量越多,性能越好
  • 25. 在存储级别上决定io性能的关键因素了解常用raid的数据冗余特性 明白创建array时为什么包含的disk数量越多约好
  • 26. 不同oracle文件类型的I/O统计
  • 27. Io调整Db级调整 a.了解数据库的物理结构 b.合理规划和io相关的文件分布 c.均衡(分散)io d.oracle物理结构中文件分布的原则
  • 28. 1)controlfile单独存放,mirror不要过多,2份足以 2)redo单独存放,不要放在raid 5上,member不要过多,2份足以 3)undo单独存放 4)datafile尽可能的要分散,尤其是分区表和分区索引所存储的数据文件 5)tempfile文件单独存放,不同的用户使用不同的临时表空间,最好能使用temporary tablespace group 6)index 和data分离,对io影响不大,便于管理(index的原理rowid) 7)archivelog和所有其他文件分离,要务必和redo绝对分离
  • 29. Os memory调整明确主机现有的物理内存 明确主机现有的free物理内存
  • 30. Os memory调整明确主机的swap使用情况
  • 31. Db memory 调整明确oracle使用内存的主件 理解sga使用内存的原理 理解pga使用内存的原理
  • 32. 了解和Sga相关的参数 理解lock_sga的作用,注意windows下不起作用 理解sga_max_size的作用(从9.2版本引入) 理解sga_target的作用(从10.1版本引入) 理解参数pre_page_sga的作用
  • 33. Sga的组成Shared_pool Data buffer Redo log buffer Large pool Java pool Stream pool
  • 34. Sga自动管理Sga自动管理的优缺点 如何设置sga自动管理 Sga自动管理之后老参数的作用 如何正确使用sga自动管理 如何通过sga advisor来给sga设定合理的值 使用sga advisor的条件 参数statistics_level的作用
  • 35. Sga advisor的数据来源数据源于下面查询 SELECT sga_size, (1-estd_db_time_factor)*100 FROM v$sga_target_advice order by 1 如何读懂advisor曲线 根据advisor判断sga设置是否合理
  • 36. Sga advisor的曲线分析根据曲线指示正确设置sga_target的值,防止设置过大浪费物理内存、设置过小影响系统性能
  • 37. Data buffer调整Data buffer的作用就如同memory对计算机的作用是同样的道理,没有memory的计算机我们无法想想哪的慢到什么程度 Sga自动管理下db_cache_size的作用 正确使用 buffer cache advisor Buffer cache advisor的数据来源 select size_for_estimate,a.estd_physical_read_factor from v$db_cache_advice a
  • 38. Buffer cache advisor的意义
  • 39. Shard pool的作用Oracle引入shard pool的意图 我们能正确领会oracle的意图吗 在某种程度上shared pool的大小不能直接决定系统的性能 什么是绑定变量 在oltp系统中不使用绑定变量的危害是什么 Olap系统为什么不建议使用绑定变量
  • 40. Shard pool 调整正确使用shared pool advisor Shared pool advisor的数据来源 select a.SHARED_POOL_SIZE_FOR_ESTIMATE,a.ESTD_LC_TIME_SAVED_FACTOR from v$shared_pool_advice a
  • 41. shared pool advisor曲线的意义根据曲线的含义正确设定shared_pool_size的值
  • 42. Pga 调整pga_aggregate_target的作用 Pga的内存在何时分配 Pga的内存是源于os还是oracle 什么是工作区 workarea_size_policy的意义 在pga自动管理的情况下,sort_area_size和hash_area_size在什么情况下还可以发挥作用
  • 43. Pga advisor的使用Pga advisor的数据来源 select * from v$pga_target_advice 如何读懂advisor曲线 根据advisor曲线判断pga设置是否合理
  • 44. Pga advisor曲线的意义select pga_target_for_estimate/1024/1024 ,a.ESTD_PGA_CACHE_HIT_PERCENTAGE,a.ESTD_OVERALLOC_COUNT from v$pga_target_advice a
  • 45. 和cpu资源相关的调整过度消耗cpu资源的sql诊断和调整 v$sqlarea ASH 减少和latch相关的等待 Cpu 100%模拟、诊断和调整
  • 46. Oracle里和process相关的调整进程的种类 a)background b)server c)user(client) 明确系统的在线用户最大数量 select * from v$resource_limit where resource_name in ('processes','sessions') 明确系统的并发用户最大数量 select * from v$session where status='ACTIVE'
  • 47. DEDICATED连接模式的特点响应及时、速度快 消耗的系统资源多 什么是session 进程对session是一对一的服务 判断session使用的是专用还是共享模式连接模式 什么样的系统该使用专用模式
  • 48. shared连接模式的特点响应可能不够及时、有延时 省系统资源 如何判断db是否支持shared连接模式 select count(*) from v$dispatcher shared count(*) from v$shared_server alert日志… dbca… 参数shared_servers>0
  • 49. Shared连接模式的结构Shared连接模式下一个client端发出一个处理请求的全过程
  • 50. 共享连接模式处理一个请求的过程Processing a Request When a user connects through the Shared Server architecture submits a database request: 1. The user process forwards the request to its dispatcher. 2. The dispatcher places the request into the common request queue in the SGA. 3. The next available shared server picks up the request from the request queue and processes the request. 4. The shared server places the response on the calling dispatcher’s response queue. Each dispatcher has its own response queue. 5. The dispatcher retrieves the response from its response queue. 6. The dispatcher returns the response to the user.
  • 51. Unix中process和windows中thread的区别如何理解windows下oracle.exe Oracle.exe中包含了哪些thread Oracle.exe中的一个thread导致windows db server cpu 100%如何诊断 Windows下如何查找一个占用cpu很高的thread和session Windows下如何kill一个占用cpu很高的thread
  • 52. block空间使用调整 Dmt和lmt比较 Dmt空间管理引起对uet$,fet$的操作在大量extent的情况下严重影响性能 空间管理锁类型为v$lock.type = ‘ST’ Lmt不再使用字典表(sys.uet$,sys.fet$)来记录extent分配和使用信息 使用文件头的bitmap来记录extent信息,一个bit表示相应的位置的extent 使用统一分配的extent大小(不主张使用自动分配) 大大提高空间的分配和释放的性能
  • 53. 数据块(block)最小的I/O单元 由一个或多个操作系统块组成 在数据库创建时设定 DB_BLOCK_SIZE是默认的块大小 9i开始支持最多5种不同大小的block(2k,4k,8k,16k,32k) 32k的block仅在一些平台上支持,windows平台不被支持
  • 54. Pctfree和pctused的作用以及相互制约关系
  • 55. Hwm(high water mark)什么是segment的hwm 为什么delete大量数据之后空间一点也不释放 为什么查询一个具有少量数据的表性能如此的差 Delete和truncate有何差别 如何降低hwm 通过move降低hwm之后index失效需要rebuild
  • 56. lockLock的type:exclusive和share Oracle里在行上只能加exclusive类型的锁 有独立的undo做保证在oracle里select操作无需在表上以及行上加任何类型的锁 为什么操作数据时需要在表上加锁 Oracle在表上支持的lock type: RS: row share RX: row exclusive S: share SRX: share row exclusive X: exclusive
  • 57. 表上lock type的兼容性
  • 58. 阻塞(block)引起block的原因 发生在表上引起的block 发生在行上引起的block 如何诊断block 如何解除block
  • 59. Block模拟及诊断分析Session 1: SQL> update t set id=1; 1 row updated. Session 2: SQL> update t set name='b'; -----发生阻塞 阻塞的原因是session无法在数据id=1上获得行级锁
  • 60. deadlock(死锁)数据库里的死锁其实就是程序里的死循环 死锁并不可怕,oracle会自动解除死锁 但是频繁的死锁会影响应用程序的稳定性 Alert中会详细记录引起死锁的session以及sql信息
  • 61. 死锁场景模拟
  • 62. LatchLatch是oracle里最难翻译的词汇 很多人翻译成闩锁,我通常不原意翻译它 Lock是保护数据库中对象的 Latch是保护实例级别的对象,准确的说是保护sga里内存结构的 Latch是一种串行化的、力度非常小的锁 Latch等待通常会消耗cpu资源
  • 63. 几种重要的latch等待模拟cache buffers chains Library cache pin Library cache lock
  • 64. Wait event什么是等待事件(v$event_name) oracle通过等待事件来反应系统的性能问题 通过等待事件诊断系统性能问题
  • 65. Wait_class10g引入的wait_class使我们更容易定位系统的问题所在
  • 66. 通过等待类大致锁定系统瓶颈select wait_class,sum(total_waits) sum_total_waits from v$system_event group by wait_class order by sum_total_waits desc(目前系统的突出等待类)
  • 67. statistics 什么是统计信息?它的作用是什么? 实例级的统计信息v$sysstat Session级别的统计信息v$sesstat Optimizer statistics(在应用调整里介绍) Optimizer statistics对oracle生成执行计划产生重要影响 系统统计信息
  • 68. System statistics相关的视图及关系
  • 69. Session statistics相关的视图及关系
  • 70. Materic(度量、指标)Metric是指累计的统计信息的变化率,Metric比statistics粒度更细,更容易说明问题,Metric的引入主要为了实现proactive(积极、主动)维护数据库,通过给metric设定一定的threshold,如果超过了这个threshold则系统自动报警,我们通过监视这些警告从而可以提前预防和解决问题
  • 71. Metric的种类Oracle从衡量系统性能的不同角度把metric分成了5类: 和instance有关的metric:v$sysmetric 和session有关的metric:v$sessmetric 和service(服务名)有关的metric: v$servicemetric 和file相关的metric:v$filemetric 和wait event相关的metirc:v$eventmetirc
  • 72. 和metirc相关的视图
  • 73. Metric的使用给度量设定值 SQL> create tablespace test datafile 'G:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\test .dbf' size 10m ; SQL> create table t1 tablespace test as select * from dba_objects; 表已创建。 SQL> insert into t1 select * from t1; 已创建11655行。 ………. SQL> commit; SQL> select bytes/1024/1024 m from dba_segments where segment_name='T1'; M ---------- 9 SQL> 查看告警
  • 74. Statspack(工欲善其事,必先利其器 )Statspack的思想 Statspack的安装 通过statspack搜集snapshot 生成statspack report 阅读statspack report 得出系统性能问题的报告 有针对性的调整系统
  • 75. Awr(auto workload repository)Awr比statspack搜集了更多、更详细的信息 Awr不需要安装了,oracle把awr做为oracle 内核的一部分集成在安装软件里了 Awr搜集了os信息而statspack没有搜集 Awr搜集的snapshot oracle自动维护通常无需dba干预 Awr包含了10g引入的time modle
  • 76. 数据库逻辑结构设计和应用级别的调整
  • 77. 设计表的原则遵循NF范式 根据业务尽可能的把相对独立的实体抽象出来 尽可能的减小实体的大小从而减少访问数据时不必要的开销 减小实体有助于较少锁冲突 根据业务特点选择适当的表类型
  • 78. 减小实体减少开销案例具体参考脚本:
  • 79. 减小实体较少锁冲突案例
  • 80. 减小实体减少行连接案例
  • 81. 了解oracle支持的table typeHeap Iot Partition Cluster temporary
  • 82. 合理使用分区表分区表的使用不能绝对的提高性能 合理的使用分区表可以方便管理 是否使用分区表很多时候是由业务的特点决定的,而不是由数据量决定的,当然数据量不大的表分区本身意义不大
  • 83. index逻辑上 单列或组合索引 唯一非唯一索引 物理上 分区或非分区 B 树 正常或反向键 位图
  • 84. 深入理解rowid
  • 85. B-tree index的结构
  • 86. Bitmap index的结构
  • 87. B-tree和bitmap index的比较
  • 88. Index的scan方式Unique scan Range scan Desc scan Index full scan Fast full scan Index skip scan
  • 89. 合理使用view View可以增加程序的可读性、控制数据的安全访问,也是面向对象特性的一个体现,但是view的使用在某种程度上对sql性能没有任何提高
  • 90. 合理使用trigger 在大型的、复杂的应用里尽可能的少使用trigger,使用它方便的同时可能不仅会使应用的灵活性受到限制同时可能会对性能产生影响 如果trigger实现的功能很复杂,那么最好把复杂的业务逻辑通过procedure或者function来实现之后再在trigger里调用process或者function
  • 91. 多使用procedure、function或者package procedure、function,package进行了预编译 procedure、function,package中sql自动使用绑定变量
  • 92. 尽可能的多使用synonymSynonym的引入是oracle面向对象思想的又一重要体现,在procedure、function,package里尽可能的多使用Synonym以减少由于对象(如表)名字改变而大量修改引用该对象的procedure、function,package;同时synonym的使用可以封装如:schema.object_namne@dblink这种远程对象的使用,使用户更加安全的透明访问对象
  • 93. 少使用sequence使用sequence有时候确实很方便,不过sequence不能保证绝对的连续,而且如果对sequence的一些特性(如cache)控制不好会对性能产生影响
  • 94. 合理使用外键 在大型的、复杂的应用里尽可能的少使用外键,外键的使用会使数据的完整性、一致性得到有力保障,但是它的使用有时会使应用的灵活性受到很大限制,如果不使用它,那么数据的完整性和一致性完全需要我们应用开发人员自己来控制,这对应用设计和开发人员都提出了很高的要求,这个到底是否使用根据自己的应用特点和团队技术实力自行选择
  • 95. 在外键上创建index可以大大提高效率同时防止死锁的出现
  • 96. 绑定变量 在以oltp为主的应用系统中多使用绑定变量,因为在oltp系统里都是一些小的事务对应的sql,sql的解析可能消耗的资源往往大于执行消耗的资源,因此我们尽可能的要减少解消耗的资源对系统性能的影响 在以olap为主的应用系统里通常不需要使用绑定变量,因为在olap应用系统里往往都是一些大的事务对应的长时间执行的sql,sql的执行时间远远大于sql的解析时间,因此使用绑定变量没有太多意义
  • 97. Oracle optimizer(优化器)介绍Rbo(Rule-Based Optimization ) Cbo(Cost-Based Optimization) Cbo下optimizer mode CHOOSE ALL_ROWS FIRST_ROWS FIRST_ROWS_1 FIRST_ROWS_10 FIRST_ROWS_100 FIRST_ROWS_1000
  • 98. Access Paths for the RBO RBO Path 1: Single Row by Rowid RBO Path 2: Single Row by Cluster Join RBO Path 3: Single Row by Hash Cluster Key with Unique or Primary Key RBO Path 4: Single Row by Unique or Primary Key RBO Path 5: Clustered Join RBO Path 6: Hash Cluster Key RBO Path 7: Indexed Cluster Key RBO Path 8: Composite Index RBO Path 9: Single-Column Indexes RBO Path 10: Bounded Range Search on Indexed Columns RBO Path 11: Unbounded Range Search on Indexed Columns RBO Path 12: Sort Merge Join RBO Path 13: MAX or MIN of Indexed Column RBO Path 14: ORDER BY on Indexed Column RBO Path 15: Full Table Scan
  • 99. Execution plan什么是执行计划 如何查看sql的执行计划 在sqlplus里设置set autotrace on 在plsql developer里通过F5 通过查询select * from v$sql_plan 通过explain plan for …
  • 100. 如何看懂执行计划The execution order in EXPLAIN PLAN output begins with the line that is the furthest indented to the right. The next step is the parent of that line. If two lines are indented equally, then the top line is normally executed first 阅读执行计划案例分析
  • 101. The execution order in EXPLAIN PLAN output begins with the line that is the furthest indented to the right. The next step is the parent of that line. If two lines are indented equally, then the top line is normally executed first.
  • 102. Optimizer statistics 什么Optimizer statistics Optimizer statistics的作用 如何搜集Optimizer statistics analyze table… dbms_stats 什么是histogram Histogram的作用和种类
  • 103. Table join method loop nested join sort merge join hash join 各种连接方式的原理和成本比较 各种连接方式的适用范围
  • 104. 如何控制Table access sort Ordered Leading use_hash use_nl use_merge
  • 105. Optimizer hint Optimizer hint 的作用 使用Optimizer hint的限制(只适合cbo) 常用hint介绍 index no_index full rule
  • 106. Sql trace和tkprof工具简要介绍诊断sql最强有力的工具sql trace介绍 处理sql trace跟踪文件tkprof工具介绍
  • 107. Sql调整指导公式T=S/VT代表sql执行所消耗的时间 S代表sql执行所消耗的资源 V代表sql执行时的速度 调整sql的目标就是减小T 调整sql的过程就是较少对S的消耗同时尽可能增大V的过程
  • 108. Sql调整指导公式T=S/V案例介绍
  • 109. A&Q Thanks
  • 110. warehouse的联系方式: mobile:13840879243 msn:xys_666888@hotmail.com qq:9020630 qq群:122642876 blog:http://warehouse.itpub.net 公司网址:www.feirui.net