oracle 参数调优

一.升级到11gR2之后

oracle数据库升级助手(DBUA)配置工具包括一个自动扩展系统文件的命令选项,能够从oracle express(XE或免费版)升级到其 他版本。

升级前脚本检查以下各项:

1.无效用户或角色

2.无效数据类型或对象

3.不支持的字符集

4.统计信息的收集

5.足够的资源(undo/rollback段,表空间和空闲磁盘空间)

6.缺失的升级需要的脚本

7.运行的监听器

8.oracle数据库软件已连接到database vault选件

如果在安装过程中指定ORACLE_BASE环境变量,oracle将使用此值设置DIAGNOSTIC_DEST参数,其中包括所有的ADR目录。

1.11g新特性

默认安装完,密码是区分大小写的

SEC_CASE_SENSITIVE_LOGON  默认是true 大小写敏感

SEC_MAX_FAILED_LOGIN_ATTEMPTS 默认值是10 设定尝试次数。

alter user username account unlock;

2.oracle的重要参数

MEMORY_TARGET

MEMORY_MAX_TARGET

SGA_TARGET

SGA_MAX_SIZE

PAG_AGGREGATE_TARGET

DB_CACHE_SIZE

SHARED_POOL_SIZE

默认读取参数文件的顺序

1.spfile<SID>.ora

2.spfile.ora

3.init<SID>.ora

如果使用alter system命令只修改spfile,而且在启动的时候发现设置错误,数据库将不会启动。这时,不能使用alter system命令去解决这个问题,需要根据spfile创建一个pfile,修改这个pfile,然后使用这个pfile来启动数据库。之后需要再创建spfile然后使用spfile重启数据库。

在V$PARAMETER视图里有两个关键的字段(V$PARAMETER显示会话级别有效的参数,V$SYSTEM_PARAMETER显示在整个实例级别有效的参数):

ISSES_MODIFIABLE:表明拥有alter session权限的用户是否可以在他们的会话级别修改这个初始化参数

ISSYS_MODIFIABLE:表明拥有ALTER SYSTEM权限的用户是否可以修改这个参数。

select name,value,isdefault,isses_modifiable,issys_modifiable from V$PARAMETER where issys_modifiable <> ‘FALSE‘ or  isses_modifiable <> ‘FALSE‘ order by name;

alter session set sort_area_size=10000000;

动态地修改初始化参数对开发人员和DBA来说是非常强大的特性。因此,如果不做限制的话,拥有alter session 特权的用户就可以随意地为某个会话的sort_area_size 分配大于100M的内存。

3.优化DB_CACHE_SIZE来提高性能

oracle 10g DB_BLOCK_BUFFERS变为隐含参数,在11g又被启用,默认为0,意思是除非设置它,否则它不会被使用(用DB_CACHE_SIZE取而代之)。

DB_CACHE_SIZE是为主数据库缓存或存放数据而初始分配的内存量。如果设置了MEMORY_TARGET或SGA_TARGET,那么该参数就无须设置。我们的目标应该是实现一个驻留在内存的数据库,至少要把所有将被查询的数据都放进内存里。

如果DB_CACHE_SIZE设置太低,不论怎样优化这个系统,oracle也没有足够的内存来有效的执行操作,系统运行状态也会很糟糕。如果设置过高,您的系统可能会使用交换空间,甚至停机。DB_CACHE_SIZE是SGA的一部分,用于存储和处理数据以及查询访问。设置过低,那么最近使用的数据会从内存中清除出去,如果有另外一个查询重新调用这些被清除的数据,就必须重新从磁盘中读取(将会使用到I/O和CPU资源).

MEMORY_TARGET,SGA_TARGET(如果使用的话)和DB_CACHE_SIZE(如果设置了最小值) 是用来优化数据缓存命中率的关键参数:命中率就是指那些不用从磁盘上执行物理读操作就可以访问到的数据块的比例。

如果系统负载情况不变,而缓存命中率剧烈变化,就应该立刻调查发生的原因。糟糕的连接和索引也会由于读取许多索引块而产生非常高的命中率,因此一定要保证命中率不是因为这些因素而提高的,而是因为系统经过良好调优而得到的。异常高的命中率通常也暗示有代码用到了糟糕的索引或连接。

通过比较随时间变化的命中率,可以帮助您注意系统某天发生的重大改变。

4.使用V$DB_CACHE_ADVICE优化DB_CACHE_SIZE

可以利用如下清单查看修改DB_CACHE_SIZE后对数据缓存命中率的影响

select name,size_for_estimate,size_factor,estd_pyhsical_read_factor from v$db_cache_advice;

NAME            size_for_estimate           size_factor          estd_pyhsical_read_factor

DEFAULT 4 .1667 1.8322

DEFAULT 8 .3333 1.0169

DEFAULT 12 .5 1.0085

DEFAULT 16 .6667 1

DEFAULT 20 .8333 1

DEFAULT 24 1 1

当前的缓存大小为24M size_factor=1

我们可以吧缓存大小减小为16M 并维持当前的缓存命中率,因为SGA减小到16M时,PHYSICAL_READ_FACTOR仍为1

保持数据缓存命中率超过95%

有些例子中,将命中率从95%增大到98%,就可以显著得提高性能--特别是最后命中在磁盘的那5%是系统的主要延迟,或者说磁盘的缓存已经不够用了。

5.监控V$SQLAREA视图以查找较慢的查询

尽管低于95%的命中率通常都表明DB_CACHE_SIZE被设置得过低。命中率失真和那些非DB_CACHE_SIZE问题包括:

1.递归调用

2.缺少索引或抑制索引

3.内存中驻留的数据

4.UNDO/回滚段

5.数倍的逻辑读

6.导致系统使用CPU的物理读

通过监控V$SQLAREA视图或企业管理器可以找到较慢的查询。

6.设定DB_BLOCK_SIZE来反映数据读的大小

如果系统中事务处理的吞吐量非常高或者系统内存有限,或许可以考虑把块大小设置为小于8K

可以把DB_BLOCK_SIZE增大到8K或者16K  或者把DB_FILE_MULTIBLOCK_READ_COUNT的值设定为(最大IO大小)DB_BLOCK_SIZE.这样 可以增大每次IO读到内存中的数据量。

如果由于DB_FILE_MULTIBLOCK_READ_COUNT造成很多全表扫描(因为优化器确定执行全表扫描更快,所以决定更多地使用),那么 把OPTIMIZER_INDEX_COST_ADJ设定于在1~10之间,这样可以强制索引使用的更频繁。

如果增大DB_BLOCK_SIZE,就必须重新创建数据库,增大DB_FILE_MULTIBLOCK_READ_COUNT可以允许在一次IO里读取更多块,这 样可以带来和增大块大小一样的好处。

7.把SGA_MAX_SIZE设置为主内存大小的25%到50%

如果使用SGA_MAX_SIZE参数,一般经验是一开始将主内存的20%至25%分配给它。

如果SGA_MAX_SIZE<1G  那么_KSM_GRANULE_SIZE的值是4M

如果1<SGA_MAX_SIZE<8G,那么_KSM_GRANULE_SIZE的值是16M

如果SGA_MAX_SIZE设置为2000M 将DB_CACHE_SIZE设置为9M,那么DB_CACHE_SIZE被四舍五入至16M(因为粒度是16M)

8.优化Shared_pool_size以获取最佳性能

oracle使用最近最少使用算法(LRU)

使用结果集缓存,需要设置RESULT_CACHE_SIZE=<需要大小> 和 RESULT_CACHE_MODE=FORCE参数(设置为FORCE以自动使用这个特性)。

为了确保最佳的利用共享SQL区域,请尽量使用存储过程,因为被解析的SQL每次都完全相同,因此可以将其共享。

SQL的编写必须完全一样,这样才能被重用。

PL/SQL把每条语句都转换成大写,然后整理了空格或换行符。

如果设定CURSOR_SHARING=FORCE 针对V$SQLAREA的查询结果将会改变,这是因为oracle可以在内部构建前面所有语句共享的语句。现在共享语句只包含一条所有用户共享的简单语句。

设置足够大的shared_pool_size以保证充分利用db_cache_size

保证数据字典命中率高于95%

select ((1-(sum(getmisses))/ (sum(gets) + sum(getmisses))))*100) "hit rats" from v$rowcache where gets+ getmisses <> 0;

可以对V$ROWCACHE视图使用修改后的查询,以查看这些参数如何组成数据字典缓存,也称为行缓存

select parameter,gets,getmisses,modifications,flushes,(getmisses/decode(gets,0,1,gets)) getmiss_ratio,(case when (getmisses/decode(gets,0,1,gets)) > .1 then ‘*‘ else ‘ ‘ end) " " from v$rowcache where gets + getmisses <> 0;

保证库缓存的重载率为0,并使命中率在95%以上,如果重载率超过1%,可能就应该增大参数shared_pool_size;

有两种方法可以监控库缓存:

1.生成STATSPACK报告

2.使用V$LIBRARYCACHE

使库缓存的PIN命中率接近100%

数据字典缓存的丢失率应该少于10%~15%

oracle通过SHARED_POOL_RESERVED_SIZE参数为紧急操作保留了空间,V$SGASTAT视图显示了共享池内存的消耗速度。

使用X$KSMSP表来查看共享池里的详细情况。

时间: 2024-10-25 21:20:59

oracle 参数调优的相关文章

Oracle SQL调优记录

目录 一.前言 二.注意点 三.Oracle执行计划 四.调优记录 @ 一.前言 本博客只记录工作中的一次oracle sql调优记录,因为数据量过多导致的查询缓慢,一方面是因为业务太过繁杂,关联了太多表.面对复杂的业务场景,确实有些情况是需要关联很多表的.当然有些情况是可以将业务实现放在Java代码里,有些情况可以不要关联很多表. 二.注意点 对于SQL调优,不要马上就说加索引什么的,加索引不一定就能解决问题的,加错索引,反而会导致查询变慢,注意加索引的同时也会影响数据库写数据的速度. 三.O

大数据技术之_30_JVM学习_01_JVM 位置+JVM 体系结构概览+堆体系结构概述+堆参数调优入门+JVM 的配置和优化+Tomcat 的配置和优化

1.JVM 位置2.JVM 体系结构概览3.堆体系结构概述4.堆参数调优入门5.JVM 的配置和优化6.Tomcat 的配置和优化 熟悉 JVM 架构与 GC 垃圾回收机制以及相应的 JVM 调优,有过在 Linux 系统下的调优经验. 淘宝的周志明<深入理解 Java 虚拟机>中说 JVM 的优化,其中 99% 优化的是堆,1% 优化的是方法区. 内地女歌手照片--李嘉欣,贴在桌面上. 1.JVM 位置 JVM 是运行在操作系统之上的,它与硬件没有直接的交互 2.JVM 体系结构概览 详解如

inux IO 内核参数调优 之 参数调节和场景分析

http://backend.blog.163.com/blog/static/2022941262013112081215609/ http://blog.csdn.net/icycode/article/category/5966733 http://blog.sina.cn/dpool/blog/s/blog_b374c0f30102wboi.html 1. pdflush刷新脏数据条件 (linux IO 内核参数调优 之 原理和参数介绍)上一章节讲述了IO内核调优介个重要参数参数. 总

Linux6.x内核参数调优

## 本人在测试机上测试过,效果不错 fs.file-max = 6553600 net.ipv4.ip_local_port_range = 1024 65000 net.ipv4.tcp_max_orphans = 3276800 net.ipv4.tcp_max_syn_backlog = 262144 net.ipv4.tcp_timestamps = 0 net.ipv4.tcp_mem = 94500000 915000000 927000000 net.ipv4.tcp_fin_t

spark参数调优

摘要 1.num-executors 2.executor-memory 3.executor-cores 4.driver-memory 5.spark.default.parallelism 6.spark.storage.memoryFraction 7.spark.shuffle.memoryFraction 8.资源参数参考示例 内容 1.num-executors 参数说明:该参数用于设置Spark作业总共要用多少个Executor进程来执行.Driver在向YARN集群管理器申请资

Oracle SQL 调优健康检查脚本

Oracle SQL 调优健康检查脚本 我们关注数据库系统的性能,进行数据库调优的主要工作就是进行SQL的优化.良好的数据架构设计.配合应用系统中间件和写一手漂亮的SQL,是未来系统上线后不出现致命性能问题的有力保证. 在CBO时代,一个SQL的执行计划是多样的.影响执行计划的因素也从过去RBO时代的SQL书写规则变为综合性因素.这为我们生成更加优秀执行计划提供了基础,同时也给我们进行调优带来的很多麻烦. 目前我们通常的做法,是通过AWR报告或者调试手段,发现某某SQL有问题,之后从Librar

大并发高负载下的PHP-FPM参数调优

大并发高负载下的PHP-FPM参数调优 主要针对PHP在Linux下的参数调优 调整文件描述符限制 # ulimit -n 1000000 # vi /etc/security/limits.conf # Setting Shell Limits for File Descriptors *  soft nofile 1000000 *  hard nofile 1000000 禁止PHP代码文件所在分区的文件系统访问时间更新 # vi /etc/fstab 比如PHP代码所在分区: /dev/

JVM参数调优:Eclipse启动实践

本文主要参考自<深入理解 Java 虚拟机>.这本书是国人写的难得的不是照搬代码注释的且不是废话连篇的技术书,内容涵盖了 Java 从源码到字节码到执行的整个过程,包括了 JVM(Java Virtual Machine)的架构,垃圾收集的介绍等.这里摘录出关于配置 JVM 基本参数来调优 Eclipse 启动的过程,比较初级,供初学者参考. 基础知识 针对 JVM 的参数调优主要集中在数据区大小的控制和垃圾回收策略的选择.关于 JVM 运行机制等更多内容可参考其他博文 JVM 的运行时数据区

php-fpm参数调优

关于php-fpm.conf参数调优,只对重要的参数进程调优.其它可参数前辈的. http://php.net/manual/zh/install.fpm.configuration.php (官方的) http://www.cnblogs.com/argb/p/3604340.html http://www.cnblogs.com/jonsea/p/5522018.html https://www.zybuluo.com/phper/note/89081 http://blog.64mazi.