Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

2135

积分

502

好友

184

主题
1#
发表于 2012-8-2 11:58:20 | 查看: 6266| 回复: 8
dba interview test
1.说一下sql parse的大致过程
2.没法修改SQL语句的情况下如何调优SQL
3.出现ORA-60问题在trace无价值的情况下如何找出死锁的原因


随机的三个题目 , 欢迎踊跃回答
下载专业ORACLE数据库恢复工具PRM-DUL  For Oracle http://www.parnassusdata.com/zh-hans/emergency-services

如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!

诗檀软件专业数据库修复团队

服务热线 : 13764045638  QQ: 47079569   
2#
发表于 2012-8-2 12:09:39
1.检查语法正确性->从data dictionary中查找涉及的所有object->从data dictionary中获取object的statictics->生成执行计划并从可能的执行计划中选取自认为最好的一种,包括检查相关的Stored Outlines或者Materialized views->从data dictionary中检查object的security->生成编译好的statement(称为P-Code)

2.可以调整索引(列的顺序,存放位置,分区等),调整表的存放位置(快的磁盘,分区等)

3.找到详细代码, 去support.oracle.com上查找

回复 只看该作者 道具 举报

3#
发表于 2012-8-2 12:16:28
第二个问题是指用outline,profile等固定执行计划吧

回复 只看该作者 道具 举报

4#
发表于 2012-8-2 12:23:50
2 不改动sql的话相当于只在数据库上做调整,有两种情况可以优化,一是缺少索引或者索引太多的,可以加减索引解决。一种是执行计划有问题,通过重新分析或者profiles固定解决。还有一种特殊情况就是sql不能改,但相关业务逻辑、表结构可以改。

[ 本帖最后由 kingofworl 于 2012-8-2 12:27 编辑 ]

回复 只看该作者 道具 举报

5#
发表于 2012-8-2 12:48:10
2.没法修改SQL语句的情况下如何调优SQL

首先要找到这个SQL的执行计划哪里不好,超预期的开销发生在哪里
访问路径的问题,就去考虑是不是可以加索引、换索引
关联方式的问题,需要追究是不是哪里的选择率、基数估算错误,那么可能各种毛病,试列举:
统计信息滞后
对字段做了表达式运算(既然SQL不能改,那么间接还是统计信息的问题)
有多项谓词,选择率是相乘的关系,但字段间数据存在强相关性,导致总的选择率被低估

定位到基数问题,纠正的方法,试列举:
考虑定制统计信息的策略,动态统计信息是否适用
10g支持函数索引的基础上搜集隐藏列统计信息,11g则更方便
Dbms_stats.set_table_stats这个能伤及无辜,对其他SQL也有影响
不得已的办法,dbms_sqltune.import_sql_profile+estimate_opt干预,实际上是给基数乘一个系数加以调整,具体搜杨廷坤博客

特殊的:
not in 语句可能需要考虑关联字段的非空属性
DML语句注意额外的开销,如索引维护开销、父子表依赖关系中外键无索引的开销
绑定变量问题,看看能否运用cursor_sharing

回复 只看该作者 道具 举报

6#
发表于 2012-8-2 12:59:00
1.说一下sql parse的大致过程

答:检查语法语义(编译器)->检查执行权限对象(library cache)->到share pool查找是否有些sql
->有->执行软解析(按原来的执行计划执行)
->没有->执行硬解析->生成执行计划
-->执行-->访问的对象是否在buffer cache
--->有,进行逻辑读取
--->没有,进行物理读取
---->返回结果,完成;
2.没法修改SQL语句的情况下如何调优SQL

答:1.对索引进行调整
   2.对表和索引进行统计信息
   3.改变执行计划环境(first_rows(10),all_rows( ))
   4.调整系统参数optimizer_index_caching和 optimizer_index_cost_adj
   5.考虑是否将SQL中的对象设为keep放到内存
   6.增大session_cache_cursor
   7......

3.出现ORA-60问题在trace无价值的情况下如何找出死锁的原因

答:1.10g好像死锁会自动解锁的,所以发生情况应该是在10前吧
   2.根据SQL_id在v$active_session_history中查找blocking_session
     再查找SQL_id,查看sql_id的执行计划,对比分析sql
   3......

--------只有一题基础题。。。。第3题感觉朦朦胧
望刘大指导......

[ 本帖最后由 KFC 于 2012-8-2 13:01 编辑 ]

回复 只看该作者 道具 举报

7#
发表于 2012-8-4 21:49:06
大家的 答案其实都不错 , 此贴加精

回复 只看该作者 道具 举报

8#
发表于 2012-8-4 22:07:17
2. 表设计的调整也是一个方向,考虑原表的设计是否合理,是否可以优化分区、IOT,CLUSTER等,接合使用dbms_redefinition。

回复 只看该作者 道具 举报

9#
发表于 2012-8-6 10:30:32
3. 死锁可以尝试通过logminer结合V$active_session_history分析

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-11-16 02:44 , Processed in 0.052014 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569