ITPub博客

首页 > Linux操作系统 > Linux操作系统 > one test

one test

原创 Linux操作系统 作者:mambo_shen 时间:2010-07-01 16:47:13 0 删除 编辑

:SQL Tuning

 

1:列举几种表连接方式

内部连接(inner join),简称内连结果即为TATB两集合的交集

左部连接(left join),简称左连AB左部连接的结果即为TA

右部连接(right join),简称右连AB右部连接的结果即为TB

全连接(full join),简称全连AB外部连接的结果即为TATB两集合的并集。

2:不借助第三方工具,怎样查看sql的执行计划

SET AUTOTRACE ON;

3:如何使用CBO,CBORULE的区别

Oracle的优化器有两种优化方式,即基于规则的优化方式(Rule-Based Optimization,简称为RBO)和基于代价的优化方式(Cost-Based Optimization,简称为CBO)

CBO方式:它是看语句的代价(Cost),这里的代价主要指Cpu和内存。优化器在判断是否用这种方式时,主要参照的是表及索引的统计信息。统计信息给出表的大小、有多少行、每行的长度等信息。这些统计信息起初在库内是没有的,是做analyze后才出现的,很多的时侯过期统计信息会令优化器做出一个错误的执行计划,因此应及时更新这些信息

优化模式包括RuleChooseFirst rowsAll rows四种方式

4:如何定位重要(消耗资源多)SQL

GETSQL script

5:如何跟踪某个sessionSQL

SQL> alter session set sql_trace=true;

SQL> alter session set sql_trace=false;

 

select sid,serial#,username from v$session where username is not null;

exec dbms_system.set_sql_trace_in_session(740,172,true);

exec dbms_system.set_sql_trace_in_session(740,172,false);

6:SQL调整最关注的是什么

调整的目的就是为了消耗最小的资源来完成功能,通过查看执行计划和各种统计信息来分辨调整后的sql对资源的耗费情况,来找出一个成本最小的sql语句,查看该SQLresponse time(db block gets/consistent gets/physical reads/sorts (disk))

7:说说你对索引的认识(索引的结构、对dml影响、对查询影响、为什么提高查询性能)

在有些情况下,Oracle 确实会选择全表扫描(Full Table Scan,而非索引扫描(Index Scan)。这些情况通常有:
1. 
表未做statistics, 或者 statistics 陈旧,导致 Oracle 判断失误。
2. 
根据该表拥有的记录数和数据块数,实际上全表扫描要比索引扫描更快。

最常用的是 B tree 索引。 B 的全称是Balanced , 其意义是,从 tree  root 到任何一个leaf ,要经过同样多的 level. 索引可以只有一个字段(Single column也可以有多个字段(Composite,最多32个字段.

8:使用索引查询一定能提高查询的性能吗?为什么?

索引不是越多越好。特别是大量从来或者几乎不用的索引,对系统只有损害。OLTP系统每表超过5个索引即会降低性能,而且在一个sql 中, Oracle 从不能使用超过 5个索引。

很多时候,单列索引不如复合索引有效率。

用于多表连结的字段,加上索引会很有作用。

B*Tree索引在检索高基数数据列(高基数数据列是指该列有很多不同的值)时提供了最好的性能。当取出的行数占总行数比例较小时B-Tree索引比全表检索提供了更有效的方法。但当检查的范围超过表的10%时就不能提高取回数据的性能。

Oracle 是否真正使用索引,使用索引是否真正有效,还是必须进行实地的测验。合理的做法是,对所写的复杂的 sql, 在将它写入应用程序之前,先在产品数据库上做一次explain . explain 会获得Oracle 对该 sql 的解析(plan,可以明确地看到 Oracle 是如何优化该 sql 的。

9:绑定变量是什么?绑定变量有什么优缺点?

查询通常只是因为改变where子句中的内容而产生不同的结果。为了在这种情况下避免(减少)硬解析,需要使用绑定变量(bind variable)。它是用户放入查询中的占位符,它会告诉Oracle"我会随后为这个变量提供一个值,现在需要生成一个方案,但我实际执行语句的时候,我会为您提供应该使用的实际值"
select * from emp where ename='KING'; //
不使用绑定变量
select * from emp where ename=:bv     //
使用绑定变量
一般在 procedure or function 中使用,可以优化共享池的使用。

10 什么是cursor_sharing?

cursor_sharing是从8I开始提出的在服务器端处理SQL绑定的参数,它有如下几个值。force, similar, exact

1: force表示强行对SQL语句进行变量绑定,

select * from mytest where name = 'jack';

SQL语句传到server端后,会生成select * from mytest where name =:"SYS_B_0" SQL版本,后面在运行相同的查询,name字段的传值不同,也会利用前面生成的查询计划,这个参数在一些没有绑定变量的应用程序里面会带来很好的性能收益,避免了过度的硬解析,但也有弊病,因为随着传入数据的不同,需要执行不同的查询方案,比如走full scan还是走index range scan,可能有时候会运用错误的方案进行查询,

2:exact表示每个SQL语句应该精确匹配,包括大小写,空格等,相同的才可能被重用。

3:similar是上面两者的结合体,如果查询的sarg字段存在柱状图信息,则随着传值的不同,每次都要硬解析,此时等同与exact,如果不存在柱状图信息,则强行绑定,等同与force(柱状图描述了相关字段的数据分布,这个对索引的选用有很大影响)

11:如何稳定(固定)执行计划

Oralce8.1开始,Oracle增加了一个新的特性就是Stored Outlines,或者称为Plan Stability(计划稳定性)。这个特性带来三个好处。首先,你可以优化开销很大的语句的处理。第二,如果有一些语句Oracle需要花费长时间来优化(而不是执行),你可以节省时间并且减少优化阶段的竞争。最后,它可以让你选择使用新的cursor_sharing参数而无需要担心因此而不采用优化的执行路径。

 

:数据库基本概念类

 

1:pctused and pctfree 表示什么含义有什么作用

pctused:如果数据块的使用率小于pctused的值,则该数据块重新加入到fresslist中。
pctfree
:如果数据块的使用率高于pctfree的值,则该数据块从freelist中移出。

假设你一个块可以存放100个数据,当存放到80个时,就不能存放新的数据,这是受pctfree来控制,预留的空间是给UPDATE用的,当你删除一个时,再想放个新数据行不行?回答是不行,必须是删除41个,即低于40个以后才能插入新的数据的,这是受pctused来控制的

2:简单描述table / segment / extent / block之间的关系

3:描述tablespacedatafile之间的关系

4:本地管理表空间和字典管理表空间的特点,ASSM有什么特点

Oracle 10g的自动段空间管理(ASSM

段管理方式

手动,Manual,这时Oracle将采用空闲列表(free list)来管理段的空闲数据块。这是为了和以前的版本兼容保留的。

自动,Auto,这时Oracle将使用位图(bitmap)来管理段的已用数据块和空闲数据块。即根据位图中单元的取值。

5:回滚段的作用是什么

保存数据的前像,保证数据读取的时间点一致性。Oracle里数据的多版本特性就是通过回滚段来实现的,正因为此,Oracle数据库实现了读写不竞争的性能优势!

6:日志的作用是什么

记录对数据库的操作,便于恢复。

7:SGA主要有那些部分,主要作用是什么

db_cache(缓存数据块)shared_pool(缓存sql,执行计划,数据字典信息等)large_pool(MTS模式、parallel rman等要用到)java pool(java程序如SQLJ存储过程运行时要用到)

8:oracle系统进程主要有哪些,作用是什么

smon(合并空间,实例恢复),pmon(清理失败的进程),归档进程(负责在日志切换的时候归档日志文件),lgmr(日志书写器进程,负责写日志),ckpt(检查点进程,触发检查点),dbwr(数据库写入器,负责把数据写入导datafile

 

:备份恢复类

 

1:备份如何分类

逻辑备份(exp)与物理备份。或者冷备份与热备份

2:归档是什么含义

把日志文件放到另一个地方

3:如果一个表在2004-08-04 10:30:00 drop,在有完善的归档和备份的情况下,如何恢复

recover database until time 2004-08-04 10:30:00
alter database open resetlogs;

4:rman
是什么,有何特点

rman叫恢复管理器。
特点很多。可以在线备份,到少目标数据库是mount状态。

1)热备份。
2
)可以存储脚本。
3
)可以增量备份。
4
)自动管理备份集。

5:standby的特点

利用传输重做日志来达到同步的目的。可以设定多个保护级别,9i后支持逻辑standbyDB

6:对于一个要求恢复时间比较短的系统(数据库50G,每天归档5G),你如何设计备份策略

每天一个全备份

 

:系统管理类

 

1:对于一个存在系统性能的系统,说出你的诊断处理思路

做一个statspack,根据top 5system loadtop sql等来做相应的调整。

2:列举几种诊断IOCPU、性能状况的方法

hp-unix:iostat -x 1 5
top/vmstat/glance

3:
statspack有何认识

答:一个性能诊断工具而已,其本质就是在两个时间点采样两个系统数据。(动态性能视图),然后根据两个snapshot,产生一个报告。

4:如果系统现在需要在一个很大的表上创建一个索引,你会考虑那些因素,如何做以尽量减小对应用的影响

1)增大sort_area_size8i/pga_aggregate_target9i)值。
2
)如果表有分区(一般大表都要用到分区的),按分区逐个建索引,如果是本地索引的话。
3
)系统空闲的时候建。

5:raid10 raid5有何认识

raid10是先镜像后条带,适合对写入速度要求较高的数据库系统,特别是online redolog文件,raid5适合大部分的数据库系统和数据仓库系统,读性能优于写性能。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16348200/viewspace-666849/,如需转载,请注明出处,否则将追究法律责任。

上一篇: comment
请登录后发表评论 登录
全部评论

注册时间:2008-10-09

  • 博文量
    86
  • 访问量
    74945