暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

Oracle优化常用经典参考(一)

东面而视 2018-01-29
829

2-调优步骤:  

设计调优 

应用调优 程序员代码

内存

连接

操作系统

2-已有产品的调优

 1 定位问题

 2 查看操作系统和oracle统计

 3 考虑通用系统错误

 4 假定问题

 5 通过参数修改去调优

 

3调优方法

 1 检查日志和trace  file

 2 检查参数文件

检查 内存 cpu

那些sql占用cpuio

如果相应时间慢;

 1分析工作实现和相应时间

检查那部分时间长

细化问题

 

 

查看alert  log

 1 查看位置

Show parameter dump

Name 是 backgroup_dump_dest 所对应的目录是alert log所在的目录

检查文件

  1 检查 错误是 ORA 的错误和快损坏错误

  2 分析这个文件

  3 定期移动和清空错误文件

     清空文件: cat  /dev/null  >文件名

 

 

 

改变系统值

 Alter system set 参数名=参数值 scope=  both 或 spfile 

 Both 代表同时改变内存和文件 

 

查看user trace file(用户操作日志文件)

Show parameter dump

Name 是 user_dump_dest 所对应的目录是user trace file所在的目录

产生trace文件的方法:

  1 修改自己的sessionalter  session set sql _trace=true

  2 使用sys用户登录,调用存储过程:将某个用户的session 产生trace文件

 



 

  3 sql_trace系统参数确定系统中的所有用户产生日志

5-dba的视图

 dba_tables,dba_tab_colums,dba_indexes,index_stats

 

重要的动态视图

系统相关视图

V$sysstat 系统统计

V$sgastat SGA统计

V$system_event 系统事件 事件名 v$event_name

 


session 相关的视图

 

 

v$sesstat session统计数据

v$sesstat_event 

重要视图

 

 

 

 

 

 

数据库设计

不同用途的数据放在不同的tablespace避免资源争用

不同的tablespace放在不同的物理驱动器调高I/O并发能力

日志文件放在速度快的磁盘上,数据文件可以放在速度慢的磁盘上

日志文件的同组中不同成员放在不同的物理磁盘

 

 

7通过物理文件的读写次数来调优

 

Select d.tablespace_name,d.file_name,f.phyrds,f.phywrts from v$filestat f,dba_data_files d where f.file#=d.file_id;

可以通过设置Oracle读写块的大小提高I/O效率

参数如下:

DB_FILE_MULTIBLOCK_READ_COUNT

 

8 striping(均匀分布数据)

 1 操作系统或文件系统支持striping

建表或更改表时使用 allocate 可以达到striping的目的

8 DB_FILE_MULTIBLOCK_READ_COUNT

可以通过设置Oracle读写块的大小提高I/O效率

 

大于6秒的操作查询

 V$session_longops

Select  name,value from v$sysstat where nane like ‘ %table scan%’

监控全表扫描

 

 

3监控大表运行情况

大于6秒的全表扫描记录在

v$session_longops

查看全表扫描的记录条数

 

Show parameter log_ch

 

9 Oracle启动时间

通过调整 FAST_START_MTTR_TARGET保证Oracle启动时间,Oracle可以根据这个参数调整其他参数

 

9重做日志文件

 如果没有足够重做日志文件,就会造成系统阻塞,

 

 

解决办法:

     

加大重做日志文件

增加归档进程

    设置参数:LOG_ARCHIVE_MAX_PROCESSES

   在alert log中出现如下错误说明日志文件已经写满

 

通过:

V$log_file

V$log

提高sql命中

11查询系统hard parse的次数

 

V$sysstat 表中的 parse count hard)是解析sql条数

11 提高sql相似sql在共享池中的命中率

 

12 使用绑定变量提高共享sql

   使用preparedStatement

 

13 查看共享池信息

 

 

13查看v$sgastat中的free memory决定是否要扩大共享内存

13 查看执行少于5次的sql通过查看解析次数与执行次数找到效率低的原因

 select sql_text from v$sqlarea where executions<5 order by upper(sql_text)

13 查看sql查看解析次数与执行次数找到效率低的原因

 select sql_text, parse_calls,executions from v$sqlarea 

14 存储过程的调用着是过程的属主,不是调用者

14 sql中添加表的用户可以减少访问数据字典的次数

14 在业务高发期使用ddl语句会降低sql的命中,因为sql需要重新解析

14 在业务高发期V$librarycache 中的reloadsinvalidations要尽可能小,如果reloads太大说明shared pool太小

14 查看sql命中率:

Select gethitratio from v$librarycache where namespace=’SQL AREA

调整shared pool

14查看那些sql正在执行:

Select sql_text,users_executing from v$sqlarea

 

15 查看v$share_pool_advice由Oracle提供共享池优化参数

 

16 使用下面的sql 估算共享内存

 

将以上两项值相加基本就是估算的librarycache 的内存大小

查看共享池信息

Show parameter shared

16 设置保留池的大小,以满足大对象和临时对象的使用

Shared_pool_reserved_size

 

   Request_failures持续太大说明保留池太小

   需要加大保留池和共享池

 

16调整共享池大小

  Shared_pool_size

  不能最大值取决于操作系统的内存

不能太小

 

17 在共享区,一直保留在内存区,不参与内存淘汰算法

 

清除shared pool

Alter system flush shared_pool

18 查询匿名块

 

 

 

18 调整Data Dictionary cache

通过v$rowcache

 

 

    调整共享池来调整DD cache

11 large pool

 

Large_pool_size

 Show parameter size

 

 

 

19Buffer cache 调优

 

 1 降低sql读入buffer数据

增大buffer cache

 

 

 

Free buffer inspected :找到空闲块之前做的消耗

Free buffer waits 没有可用的空闲块

Buffer busy waits 块被占用

 

21 查询等待的事件及等待块信息

 

 

21 计算命中率

 

 

 

大表多次扫描会降低命中率

好的命中率:命中率高,坏事件少

将常用的数据放在中间件层,减轻数据库压力

Cache使用

23增大cache_size

 

增大cache之前

没有3中事件

优化了sql

防止操作系统将sga放到os的交换区

命中率低

使用

 增加db_cache_size

 

增加时这个只不能大于sqa_size

 

 

 

23 Oracle 9i 有三中pool

Reclye pool

Keep pool

Default pool

  三个buffer pool大小不一样,算法一样,可以利用这一特性决定吧对象放在那个pool

 

使用办法:

热块放在 default pool

温块放在 keep pool

冷快放在 recycle pool

 

 

23放对象放在pool中的语法:

 

 

 

24查看对象使用的块

 

 

 

 

 

 

24计算命pool中率:

 

 

 

 

 

24创建cache 

 方法一:创建表时

 

 

方法2:修改普通表到cache 

方法3:查询后放在cache

 

 

25自动管理内存

 

25配置多个DBWn

  Alter system db_writer_precesses //操作系统必须支持异步I/O,多cpu使用

  

 

开启异步I/O 

在不支持异步I/O的情况下,修改dbwr_io_slaves数量也可以达到增加DBWn的效果

 

 

 

27LGWR是使性能下将

 

Redo Entries 存在的记录数:

Redo buffer allocation retries: 申请redo buffer 的次数,此值过大说明 redo buffer 太小

 

28当发生下列事件时会引起性能下降

  1 日志文件交换

 

   增大redo log files

  2 检查点未完成

 

 

 

 

解决办法:

a设置Fast_start_mttr_target越小增加checkPoint的次数

增加redo log 组和成员

 

归档引起

 

 

解决办法:


增加redo log 组和成员

2  archive文件太多,没地方写归档文件,可以删除文件

增加归档进程 log_archive_max_proceses

 

28加速数据插入的时间:

 使用无log方式,批量插入数据

 

 

共享服务器

 

 

 

 

 

 

 

 

 

 

优化排序

 

32优化排序-自动管理PGA

设置自动管理PGAwork_size_policy = auto 

在自动管理PAG模式下设置PAG大小:pga_aggregate_target 

 

 

 

 

32设置PGA建议:

 

 

32设置PGA的例子

 

32 oracle的内存设置:

Oracle的内存由SGAPGA 之和 决定

 

 

 

 

Over allocation count增大说明 aggregate pga target 太小

 

 

34 查询建议的PGA内存

 

 

Select round(pga_target_for_estimate/1024/1024) as target_mb,round(BYTES_PROCESSED/1024/1024) as process_mb,ESTD_PGA_CACHE_HIT_PERCENTAGE hit_ratio,ESTD_OVERALLOC_COUNT from v$pga_target_advice;

 

34 查看 sesstat

 

35单个用户的排序内存

 

 

36 统计排序

 

 

 

36避免排序:

 

36当磁盘排序/内存排序比值大于5%,需要增大排序内存

 

 

 

Sql调优

42 设置sql优化模式

 

Choose9i的默认值

All_rows:最大吞吐率 11的默认值

First_rows_n:最快相应时间,可以设定

First_rows: 10g后不要用

43稳定执行计划

 Optimizer_features_enable=数据库版本号

44 获得sql 的执行计划

创建plan

 @/目录/ultxplan.sql

@?代表oracle home目录

获得

 

查看执行计划

 A Select * from table_plan

B select * from table(dbms_xplan.display); 

44 生成trace文件及查看

开启trace功能

 

使用tkprof格式化文件

 

 

44 自动trace

创建table_plan

@/目录/ultxplan.sql

@?代表oracle home目录

2创建同义词并授权

 

执行脚本、授权

 

设置自动trace,并得到结果

 

 

统计信息

47获得表的统计信息

获得对象id

 

 

获得表的统计信息

 

 

 

 

 

52 查询表块使用情况

分析表

 

查看表

 

52扩展和取消块

 

 

 

 

 

 

 

 

 

 

OLTP系统使用小块4k8k

OLAP系统使用16k64k

 

索引管理

 

54 监控索引空间

 

Rebuild:会重建索引 ,代价高

Coalesce:修补索引

 

54查看索引使用情况:

查询表object_usage

 

 

Oracle数据块架构

55创建集群表:

将两张表放在一个segment

 

58创建索引集群表:

 

创建集群

Create cluster mycluster (deptno number(2)) size 1024

Deptno 集群的key

1024 一个block的大小,决定可以放几条记录。

默认是放一条记录

 

创建索引


 

 

 

 

 

 

59分区表

时间分区表:

 

 

 

 

 

 

 

 

 

Hash分区表

 

 

 

 


文章转载自东面而视,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论