Chinaunix首页 | 论坛 | 博客
  • 博客访问: 423490
  • 博文数量: 148
  • 博客积分: 3191
  • 博客等级: 中校
  • 技术积分: 1232
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-11 15:25
文章分类

全部博文(148)

文章存档

2011年(148)

我的朋友

分类: Oracle

2011-09-25 17:02:23

SQL优化思路

1. 基础数据做少量冗余,减少表关联

2. 对历史数据做迁移,保留最近一段时间数据

3. 80%的效率问题因为低效的SQL导致

4. AWR中主要查看項目

   SQL ordered by Elapsed Time查每个执行消耗的时间

   SQL ordered by CPU Time查每个执行消耗的时间

   SQL ordered by Gets        buffer gets 逻辑读 

   SQL ordered by Reads     物理读

5. 逻辑读物理读高的SQL及运行时间长的SQL需要优化

6. 通过执行计划优化SQL语句:explain plan, sql trace

SQL> explain plan for select * from dual;

SQL> select * from table(dbms_xplan.display);

7. OLTP中优化SQL原则:尽量减少数据的读取(只读取必要的数据)

8. 表的关联部分:不管多少表连接,都是先两个表得出结果集,

   然后结果集与表或结果集的操作。

9. 几个要素:预估记录数(操作后的结果集),开销(cost)及可选择性

10. 关联条件:where a.col1 =b.col1

    过滤条件:where a.col1<=103(常量)

11. 使用hint来改变存在问题的执行计划

12. 查询统计信息是否是最新的(表,列,索引,柱状图)

    推荐使用 DBMS_STATS.GATHER_XXX_STATS();

13. 复杂SQL采用拆分的方式进行优化

14. 考虑新建索引以及实施分区

15. 视图访问可以考虑使用物化视图取代,减少多表连接查询

16. 表连接选择:

    嵌套循环连接:有高选择性索引或进行限制性搜索时效率比较高,适用于返回较少结果集。

    排序合并连接:当缺乏索引或者索引条件模糊时,排序合并连接比嵌套循环有效。

                  适合对大数据量需要不全等于(>, >=,<, <=)操作的情况下。

    哈希连接    :当缺乏索引或者索引条件模糊时,哈希连接连接比嵌套循环有效。

                  通常比排序合并连接快。在数据仓库环境下,如果表的纪录数多,

                  效率高。用于等价连接下大数据关联。

17. 参数 OPTIMIZER_INDEX_COST_ADJ OPTIMIZER_INDEX_CACHING

18. CBO尽可能从过滤性最强的条件入手

19. 子查询上约束条件强,适用IN, 主语句上约束条件强,使用EXISTS

20. 调优相关的几个视图

v$session

V$sqltext

V$sql_plan

V$sql_plan_statistics

V$sql_plan_statistics_all

V$ses_optimizer_env

User_table_histograms

User_tab_statistics

User_tab_col_statistics

User_ind_statistics

21. 使用10046事件,可以跟踪某个SQL语句完整的执行过程,

获取其解析,执行,CPU使用时间,等待事件,每个操作的

具体耗时等信息。这对获取语句详细的执行计划,分析定位

其效率问题,从而有针对性地优化该语句,非常有用。

Alter session set events '10046 trace name conetxt,  level  n';

执行SQL

Alter session set events '10046 trace name conetxt,  off';

22. 使用outline固定执行计划

23. 使用DBMS_SQLTUNE包及DBMS_ADVISOR包获取语句最简执行计划建议

24. CBO采集系统的统计信息,执行计划将更优。

Exec dbms_stats.gather_system_stats(‘INTERVAL’, 180);

Select * from sys.aux_stats$;

25. DBMS_PROFILE包用来调优存储过程,通过跟踪及记录存储过程

    中每条SQL的执行时间,来确定哪些SQL语句最耗时。

25. 11gACS自适应共享游标克服绑定窥视的弊端

26. 11g中对联合列收集统计信息

 

阅读(1932) | 评论(0) | 转发(0) |
0

上一篇:ORACLE常见问题一千问[1至100]

下一篇:没有了

给主人留下些什么吧!~~