oracle数据库调优培训备注:
1:
oracle在执行sql语句时,采用何种优化方式优化由参数 optimizer_mode 来决定。
参数查看及设置
查看:show parameter optimizer_mode
设置:1:session级别通过alter session set optimizer_mode=all_rows
2:instance级别我们可以通过在initSID.ora中设置optimizer_mode=all_rows
2:oracle块,盘区,段
数据块(block) : 是oracle的存储单位,也叫逻辑块,oracle块,是物理磁盘的一个空间。
区(extent):一组数据块构成一个区
段(Segment):
由一组区构成,被分配到一个特定的数据结构中,段只能存储于一个表空间中,不能跨表空间存储哦。
另一种解释:每个表在表空间中都留有一块单独的磁盘空间区域,成为段。每一个段依次在表空间中 留 有一块初始的磁
盘空间区域,成为初始扩展区(initial extent)。当段使用完了这个空间,磁盘的 空间的另一个单独区域的下一扩展区
(next extent)将被启用。如果这一块区域也使用完,那么还会有另外一个扩展区被启用。这个过程会随着每一个表持续
执行,知道整个表空间充满为止。此时,在表继续增长之前,必须为比哦啊空间添加一个新的数据文件,或者扩展表空间文
件。
3:oracle优化器 :分析sql,找到sql在oracle中的最佳执行路径。
4:oracle优化方式:
rule:RBO(基于规则的)及查询过来,表默认先找索引。
choose:oracle默认选择这种方式。有统计分析的表会选择CBO,没有就选择RBO
first rows:CBO 一个数据块中有几行,就先返回几行。
ALL ROWS:CBO。
5:关于oracle共享池参考文章http://www.oracle.com.cn/viewthread.php?tid=90671
当sql在oracle数据库执行,将执行下列步骤。
1)语法检查 检查sql语句拼写是否正确及词序。
2)检查所有的与数据字典不一致的表和列的名字。
3)轮廓存储检查。
检查数据字典,以确定该sql语句的轮廓是否已经存在。
在SQA系统全局区中有一块sql共享池(缓存)
sql第一次执行时会保存到共享池中。
第二次执行时,如果它和之前执行的语句相同时,oracle很快获得已经被解析的语句及最好的执行路径。
静态sql不能缓存。绑定变量才可以。java preparestatement
(此时会跳过步骤一和步骤二)
4)生成执行计划(基于成本的优化规则和数据字典中的统计表)
5)建立二进制代码
6:给表建立索引,只有执行统计之后,索引才能被使用到。