Oracle性能调优思路问oracle进程内存占用一直增加 达到 G左右的时候就会连接失败 监听进程死掉 或者CPU达到 % 如何解决?
Peak Wong
Oracle性能调优一直是一个很有意思的命题 增强硬件配置是一种方法 但我们平时遇到的最多的问题是如何在没办法增强硬件配置的情况下 将数据库性能优化 这里给出一个思维流程 希望对各位有益
PATCH是否都打了 ORACLE系统内存参数是否太大 超出OS的MEMORY
查查是不是程序没有关闭连接导致连接数不断上升引起的 你是什么操作系统?
服务器都作了什么设置呢?比如sga的分配 是什么情况呢?
要进行调优 及参数设置
启动 Enterprise Management Console 以SYS/**** as SYSDBA身份进入系统
ORACLE i调优只涉及如下几个参数
a) processes = ;
b) open_links = ;
c)open_cursors = ;
d)sessions= ;
e) parallel_automatic_tuning=true
f) undo_retention=
g) undo_management=AUTO
请确保在 SPFILE 中保存 在Oracle i缺省的启动参数是spfile 不要用pfile文件启动数据库
物理内存大于 G以上的通用设置:
启动 Enterprise Management Console 以SYS/**** as SYSDBA身份进入系统
配置SGA和PGA大小方法如下
物理内存大于 G以上的通用设置
中文名 参数名 参数值 设置方法
SGA的最大大小 Sga_max_size M 例程 配置 内存项卡
日志缓冲区 Log_buffer 例程 配置 一般信息选项卡 所有初始化参数
大型池 Large_pool_size M 例程 配置 内存项卡
Java池 Java_pool_size M 例程 配置 一般信息选项卡 所有初始化参数
共享池 Shared_pool_size M 例程 配置 内存项卡
数据缓冲区高速缓存 Db_cache_size M 例程 配置 内存项卡
Keep池 Db_keep_cache_size M 例程 配置 一般信息选项卡 所有初始化参数
Pga自动管理 workarea_size_policy AUTO 例程 配置 一般信息选项卡 所有初始化参数
总计pga目标 pga_aggregate_target M 例程 配置 内存项卡
说明:
此内存设置不包含在数据库服务器上的其它应用程序的物理内存的大小 如果有其它的应用程序 可以参照下面的计算: sga_max_sizepga_aggregate_target 应用程序物理内存 OS物理内存 = 系统物理内存* % 如果服务器上只有Oracle服务器 在 G以上物理内存的服务器上Oracle内存参数都可以参照上面的设置 如果服务器上有其它的应用 而服务器总的物理内存大于 请自己计算后再选择的方案
sga_max_sizepga_aggregate_target = G 在 bit操作系统上有这个限制
lishixinzhi/Article/program/Oracle/201311/17386
数据库性能优化有哪些措施?1、调整数据结构的设计
这一部分在开发信息系统之前完成,程序员需要考虑是否使用ORACLE数据库的分区功能 , 对于经常访问的数据库表是否需要建立索引等 。
2、调整应用程序结构设计
这一部分也是在开发信息系统之前完成,程序员在这一步需要考虑应用程序使用什么样的体系结构,是使用传统的Client/Server两层体系结构,还是使用Browser/Web/Database的三层体系结构 。不同的应用程序体系结构要求的数据库资源是不同的 。
【oracle怎么性能优化 oracle数据库性能优化方法论和最佳实践】3、调整数据库SQL语句
应用程序的执行最终将归结为数据库中的SQL语句执行 , 因此SQL语句的执行效率最终决定了ORACLE数据库的性能 。ORACLE公司推荐使用ORACLE语句优化器(OracleOptimizer)和行锁管理器(row-levelmanager)来调整优化SQL语句 。
4、调整服务器内存分配
内存分配是在信息系统运行过程中优化配置的,数据库管理员可以根据数据库运行状况调整数据库系统全局区(SGA区)的数据缓冲区、日志缓冲区和共享池的大小;还可以调整程序全局区(PGA区)的大小 。需要注意的是 , SGA区不是越大越好,SGA区过大会占用操作系统使用的内存而引起虚拟内存的页面交换,这样反而会降低系统 。
5、调整硬盘I/O
这一步是在信息系统开发之前完成的 。数据库管理员可以将组成同一个表空间的数据文件放在不同的硬盘上,做到硬盘之间I/O负载均衡 。
6、调整操作系统参数
例如:运行在UNIX操作系统上的ORACLE数据库 , 可以调整UNIX数据缓冲池的大?。扛鼋趟苁褂玫哪诖娲笮〉炔问?。
实际上,上述数据库优化措施之间是相互联系的 。ORACLE数据库性能恶化表现基本上都是用户响应时间比较长,需要用户长时间的等待 。但性能恶化的原因却是多种多样的,有时是多个因素共同造成了性能恶化的结果,这就需要数据库管理员有比较全面的计算机知识,能够敏感地察觉到影响数据库性能的主要原因所在 。另外,良好的数据库管理工具对于优化数据库性能也是很重要的 。
一、ORACLE数据库性能优化工具
常用的数据库性能优化工具有:
ORACLE数据库在线数据字典 , ORACLE在线数据字典能够反映出ORACLE动态运行情况,对于调整数据库性能是很有帮助的 。
操作系统工具 , 例如UNIX操作系统的vmstat,iostat等命令可以查看到系统系统级内存和硬盘I/O的使用情况 , 这些工具对于管理员弄清出系统瓶颈出现在什么地方有时候很有用 。
SQL语言跟踪工具(SQLTRACEFACILITY),SQL语言跟踪工具可以记录SQL语句的执行情况 , 管理员可以使用虚拟表来调整实例,使用SQL语句跟踪文件调整应用程序性能 。SQL语言跟踪工具将结果输出成一个操作系统的文件,管理员可以使用TKPROF工具查看这些文件 。
ORACLEEnterpriseManager(OEM),这是一个图形的用户管理界面,用户可以使用它方便地进行数据库管理而不必记住复杂的ORACLE数据库管理的命令 。
EXPLAINPLAN——SQL语言优化命令 , 使用这个命令可以帮助程序员写出高效的SQL语言 。
二、ORACLE数据库的系统性能评估
信息系统的类型不同 , 需要关注的数据库参数也是不同的 。数据库管理员需要根据自己的信息系统的类型着重考虑不同的数据库参数 。
1、在线事务处理信息系统(OLTP),这种类型的信息系统一般需要有大量的Insert、Update操作 , 典型的系统包括民航机票发售系统、银行储蓄系统等 。OLTP系统需要保证数据库的并发性、可靠性和最终用户的速度,这类系统使用的ORACLE数据库需要主要考虑下述参数:
数据库回滚段是否足够?
是否需要建立ORACLE数据库索引、聚集、散列?
系统全局区(SGA)大小是否足够?
SQL语句是否高效?
2、数据仓库系统(DataWarehousing),这种信息系统的主要任务是从ORACLE的海量数据中进行查询 , 得到数据之间的某些规律 。数据库管理员需要为这种类型的ORACLE数据库着重考虑下述参数:
是否采用B*-索引或者bitmap索引?
是否采用并行SQL查询以提高查询效率?
是否采用PL/SQL函数编写存储过程?
有必要的话,需要建立并行数据库提高数据库的查询效率
三、SQL语句的调整原则
SQL语言是一种灵活的语言,相同的功能可以使用不同的语句来实现,但是语句的执行效率是很不相同的 。程序员可以使用EXPLAINPLAN语句来比较各种实现方案,并选出最优的实现方案 。总得来讲,程序员写SQL语句需要满足考虑如下规则:
1、尽量使用索引 。试比较下面两条SQL语句:
语句A:SELECTdname,deptnoFROMdeptWHEREdeptnoNOTIN
(SELECTdeptnoFROMemp);
语句B:SELECTdname,deptnoFROMdeptWHERENOTEXISTS
(SELECTdeptnoFROMempWHEREdept.deptno=emp.deptno);
这两条查询语句实现的结果是相同的,但是执行语句A的时候 , ORACLE会对整个emp表进行扫描,没有使用建立在emp表上的deptno索引,执行语句B的时候,由于在子查询中使用了联合查询,ORACLE只是对emp表进行的部分数据扫描,并利用了deptno列的索引,所以语句B的效率要比语句A的效率高一些 。
2、选择联合查询的联合次序 。考虑下面的例子:
SELECTstuffFROMtabaa,tabbb,tabcc
WHEREa.acolbetween:alowand:ahigh
ANDb.bcolbetween:blowand:bhigh
ANDc.ccolbetween:clowand:chigh
ANDa.key1=b.key1
AMDa.key2=c.key2;
这个SQL例子中,程序员首先需要选择要查询的主表,因为主表要进行整个表数据的扫描 , 所以主表应该数据量最小,所以例子中表A的acol列的范围应该比表B和表C相应列的范围小 。
3、在子查询中慎重使用IN或者NOTIN语句,使用where(NOT)exists的效果要好的多 。
4、慎重使用视图的联合查询,尤其是比较复杂的视图之间的联合查询 。一般对视图的查询最好都分解为对数据表的直接查询效果要好一些 。
5、可以在参数文件中设置SHARED_POOL_RESERVED_SIZE参数,这个参数在SGA共享池中保留一个连续的内存空间 , 连续的内存空间有益于存放大的SQL程序包 。
6、ORACLE公司提供的DBMS_SHARED_POOL程序可以帮助程序员将某些经常使用的存储过程“钉”在SQL区中而不被换出内存,程序员对于经常使用并且占用内存很多的存储过程“钉”到内存中有利于提高最终用户的响应时间 。
四、CPU参数的调整
CPU是服务器的一项重要资源,服务器良好的工作状态是在工作高峰时CPU的使用率在90%以上 。如果空闲时间CPU使用率就在90%以上 , 说明服务器缺乏CPU资源,如果工作高峰时CPU使用率仍然很低,说明服务器CPU资源还比较富余 。
使用操作相同命令可以看到CPU的使用情况,一般UNIX操作系统的服务器,可以使用sar_u命令查看CPU的使用率 , NT操作系统的服务器,可以使用NT的性能管理器来查看CPU的使用率 。
数据库管理员可以通过查看v$sysstat数据字典中“CPUusedbythissession”统计项得知ORACLE数据库使用的CPU时间,查看“OSUserlevelCPUtime”统计项得知操作系统用户态下的CPU时间 , 查看“OSSystemcallCPUtime”统计项得知操作系统系统态下的CPU时间,操作系统总的CPU时间就是用户态和系统态时间之和,如果ORACLE数据库使用的CPU时间占操作系统总的CPU时间90%以上 , 说明服务器CPU基本上被ORACLE数据库使用着,这是合理,反之 , 说明服务器CPU被其它程序占用过多,ORACLE数据库无法得到更多的CPU时间 。
数据库管理员还可以通过查看v$sesstat数据字典来获得当前连接ORACLE数据库各个会话占用的CPU时间,从而得知什么会话耗用服务器CPU比较多 。
出现CPU资源不足的情况是很多的:SQL语句的重解析、低效率的SQL语句、锁冲突都会引起CPU资源不足 。
1、数据库管理员可以执行下述语句来查看SQL语句的解析情况:
SELECT*FROMV$SYSSTATWHERENAMEIN
('parsetimecpu','parsetimeelapsed','parsecount(hard)');
这里parsetimecpu是系统服务时间,parsetimeelapsed是响应时间,用户等待时间,waitetime=parsetimeelapsed_parsetimecpu
由此可以得到用户SQL语句平均解析等待时间=waitetime/parsecount 。这个平均等待时间应该接近于0 , 如果平均解析等待时间过长,数据库管理员可以通过下述语句
SELECTSQL_TEXT,PARSE_CALLS,EXECUTIONSFROMV$SQLAREA
ORDERBYPARSE_CALLS;
来发现是什么SQL语句解析效率比较低 。程序员可以优化这些语句,或者增加ORACLE参数SESSION_CACHED_CURSORS的值 。
2、数据库管理员还可以通过下述语句:
SELECTBUFFER_GETS,EXECUTIONS,SQL_TEXTFROMV$SQLAREA;
查看低效率的SQL语句,优化这些语句也有助于提高CPU的利用率 。
3、数据库管理员可以通过v$system_event数据字典中的“latchfree”统计项查看ORACLE数据库的冲突情况,如果没有冲突的话,latchfree查询出来没有结果 。如果冲突太大的话,数据库管理员可以降低spin_count参数值,来消除高的CPU使用率 。
五、内存参数的调整
内存参数的调整主要是指ORACLE数据库的系统全局区(SGA)的调整 。SGA主要由三部分构成:共享池、数据缓冲区、日志缓冲区 。
1、共享池由两部分构成:共享SQL区和数据字典缓冲区,共享SQL区是存放用户SQL命令的区域 , 数据字典缓冲区存放数据库运行的动态信息 。数据库管理员通过执行下述语句:
select(sum(pins-reloads))/sum(pins)"LibCache"fromv$librarycache;
来查看共享SQL区的使用率 。这个使用率应该在90%以上,否则需要增加共享池的大小 。数据库管理员还可以执行下述语句:
select(sum(gets-getmisses-usage-fixed))/sum(gets)"RowCache"fromv$rowcache;
查看数据字典缓冲区的使用率,这个使用率也应该在90%以上,否则需要增加共享池的大小 。
2、数据缓冲区 。数据库管理员可以通过下述语句:
SELECTname,valueFROMv$sysstatWHEREnameIN('dbblockgets','consistentgets','physicalreads');
来查看数据库数据缓冲区的使用情况 。查询出来的结果可以计算出来数据缓冲区的使用命中率=1-(physicalreads/(dbblockgets consistentgets)) 。
这个命中率应该在90%以上,否则需要增加数据缓冲区的大小 。
3、日志缓冲区 。数据库管理员可以通过执行下述语句:
selectname,valuefromv$sysstatwherenamein('redoentries','redologspacerequests');
查看日志缓冲区的使用情况 。查询出的结果可以计算出日志缓冲区的申请失败率:
申请失败率=requests/entries,申请失败率应该接近于0,否则说明日志缓冲区开设太?。?需要增加ORACLE数据库的日志缓冲区 。
昆明北大青鸟java培训班转载自网络如有侵权请联系我们感谢您的关注谢谢支持
oracle数据库的性能优化有哪些方法?你最好买一本专门讲ORACLE性能优化的书,好好看看\x0d\x0a1、调整数据库服务器的性能\x0d\x0aOracle数据库服务器是整个系统的核心 , 它的性能高低直接影响整个系统的性能,为了调整Oracle数据库服务器的性能,主要从以下几个方面考虑: \x0d\x0a1.1、调整操作系统以适合Oracle数据库服务器运行\x0d\x0aOracle数据库服务器很大程度上依赖于运行服务器的操作系统,如果操作系统不能提供最好性能,那么无论如何调整 , Oracle数据库服务器也无法发挥其应有的性能 。\x0d\x0a1.1.1、为Oracle数据库服务器规划系统资源 \x0d\x0a据已有计算机可用资源, 规划分配给Oracle服务器资源原则是:尽可能使Oracle服务器使用资源最大化,特别在Client/Server中尽量让服务器上所有资源都来运行Oracle服务 。\x0d\x0a1.1.2、调整计算机系统中的内存配置 \x0d\x0a多数操作系统都用虚存来模拟计算机上更大的内存,它实际上是硬盘上的一定的磁盘空间 。当实际的内存空间不能满足应用软件的要求时 , 操作系统就将用这部分的磁盘空间对内存中的信息进行页面替换,这将引起大量的磁盘I/O操作,使整个服务器的性能下降 。为了避免过多地使用虚存,应加大计算机的内存 。\x0d\x0a1.1.3、为Oracle数据库服务器设置操作系统进程优先级 \x0d\x0a不要在操作系统中调整Oracle进程的优先级,因为在Oracle数据库系统中 , 所有的后台和前台数据库服务器进程执行的是同等重要的工作,需要同等的优先级 。所以在安装时,让所有的数据库服务器进程都使用缺省的优先级运行 。\x0d\x0a1.2、调整内存分配\x0d\x0aOracle数据库服务器保留3个基本的内存高速缓存 , 分别对应3种不同类型的数据:库高速缓存,字典高速缓存和缓冲区高速缓存 。库高速缓存和字典高速缓存一起构成共享池,共享池再加上缓冲区高速缓存便构成了系统全程区(SGA) 。SGA是对数据库数据进行快速访问的一个系统全程区 , 若SGA本身需要频繁地进行释放、分配 , 则不能达到快速访问数据的目的,因此应把SGA放在主存中 , 不要放在虚拟内存中 。内存的调整主要是指调整组成SGA的内存结构的大小来提高系统性能,由于Oracle数据库服务器的内存结构需求与应用密切相关,所以内存结构的调整应在磁盘I/O调整之前进行 。\x0d\x0a1.2.1、库缓冲区的调整 \x0d\x0a库缓冲区中包含私用和共享SQL和PL/SQL区 , 通过比较库缓冲区的命中率决定它的大小 。要调整库缓冲区,必须首先了解该库缓冲区的活动情况,库缓冲区的活动统计信息保留在动态性能表v$librarycache数据字典中 , 可通过查询该表来了解其活动情况,以决定如何调整 。\x0d\x0a \x0d\x0aSelect sum(pins),sum(reloads) from v$librarycache;\x0d\x0a \x0d\x0aPins列给出SQL语句,PL/SQL块及被访问对象定义的总次数;Reloads列给出SQL 和PL/SQL块的隐式分析或对象定义重装载时在库程序缓冲区中发生的错误 。如果sum(pins)/sum(reloads) ≈0,则库缓冲区的命中率合适;若sum(pins)/sum(reloads)1, 则需调整初始化参数 shared_pool_size来重新调整分配给共享池的内存量 。\x0d\x0a1.2.2、数据字典缓冲区的调整 \x0d\x0a数据字典缓冲区包含了有关数据库的结构、用户、实体信息 。数据字典的命中率,对系统性能影响极大 。数据字典缓冲区的使用情况记录在动态性能表v$librarycache中,可通过查询该表来了解其活动情况,以决定如何调整 。\x0d\x0a \x0d\x0aSelect sum(gets),sum(getmisses) from v$rowcache;\x0d\x0a \x0d\x0aGets列是对相应项请求次数的统计;Getmisses 列是引起缓冲区出错的数据的请求次数 。对于频繁访问的数据字典缓冲区,sum(getmisses)/sum(gets)
回答于 2022-11-15
oracle怎么性能优化的介绍就聊到这里吧,感谢你花时间阅读本站内容 , 更多关于oracle数据库性能优化方法论和最佳实践、oracle怎么性能优化的信息别忘了在本站进行查找喔 。
推荐阅读
- 怎么把安卓平板变成苹果桌面,怎么把安卓平板变成苹果桌面显示
- 孝感网站建设制作开发,孝感网站建设公司
- 移动硬盘系统怎么迁移,移动硬盘系统迁移到固态硬盘
- 怎么设置excel绘图区,excel中绘图
- 直播衬衫讲解文案,直播衣服讲解稿
- php连接数据库火车 php连接数据库教程
- 鸿蒙系统内存容易满,鸿蒙系统内存占用越来越大
- jquery选中radio,jquery选中多个元素
- 赛车游戏模拟器飞跃,飞行赛车模拟游戏