- 浏览: 121881 次
- 来自: ...
最近访客 更多访客>>
文章分类
最新评论
-
dwangel:
给messageSource设置属性
<property ...
Spring i18n的better practice(相对于appfuse) -
dwangel:
spring 的message tag有一个属性text,可以 ...
Spring i18n的better practice(相对于appfuse) -
sn201:
awk高级篇
有问题啊!有问题!有问题!有问题!有问题!
i ...
awk文本处理总结(入门,中级,高级) -
happy_javaboy:
...
Log4j日志管理系统简单使用说明
关于Oracle 10g性能方面,谈论最多的就是新的自动工作负荷存储库(AWR)特性和通过自动数据库诊断监视(ADDM)提供的前瞻性性能监视。
在数据库优化的时候,我们应该想法设法降低数据库的磁盘排序。为此,笔者有如下建议。
一、合理设置Sort_area_size参数。
虽然说Oracle10G以后的数据库会自动对内存进行管理。但是,在一些性能要求比较高或者排序频率比较高的数据库中,仍然有必要对一些影响内存分配的参数进行调整。其中,最重要的一个参数就是Sort_area_size。
Oracle数据库会为所有的链接Oracle会话分配Sort_area_size这个参数。所以,对于拥有大量用户的数据库来说,如果增加 这个参数的值,会让磁盘排序的几率明显降低,不过数据库也要为此付出这个代价,很容易导致内存过载。但是,如果这个参数的值设置的过低的话,又会导致过多 的磁盘排序。
所以,这个参数并不是越大越好。因为这个参数如果设置的过大的话,其带来的性能收益反而会降低。因为为了提高有限几个查询的速度,可能会浪费大量的内存。这无疑是我们数据库管理员不希望看到的。
在实际工作中,我们往往需要在两者之间进行一个均衡。设置一个合理的参数,尽量让数据库减少磁盘排序的几率,同时也不能使得服务器内存过载。
为此笔者有一个建议。数据库管理员应该每隔一段时间增加这个参数的值,并使用Statspack工具定时监控内存排序与磁盘排序的数据。在起初进行调整的时候最好每个小时查询一次。通过这些数据,我们就可以得到一个合理的参数值,在两这之间取得一个均衡。
前期调整完成后,在后期仍然需要进行监控。因为后期随着企业应用的改变,这个参数仍然需要根据实际情况进行调整,以提高数据库的性能。
二、尽量减少不必要的排序。
在某些情况下,尽管数据库管理员没有直接通过Order By等语句对数据库记录进行排序,可是Oracle数据库服务器仍然会对查询结果进行排序。因为这些语句需要起作用,必须要先对数据进行排序。所以,他们往往带有隐性的排序功能。
我们在数据库维护或者前台应用程序设计的时候,要尽量的减少这种不必要的排序。如Distinct关键字,它的作用就是取消重复的记录。但是, 要实现这个目的的话,则数据库必须要先对记录进行排序,然后才能够去除重复的记录内容。故在设计的时候,尽量要避免使用Distinct关键字。其实,笔 者在工作中,经常会碰到这种情况,某些记录其实不存在重复记录,但是程序开发人员为了保障数据的准确性,就在SQL语句中加入了Distinct关键字, 从而造成了不必要的排序。
另外,在其他一些情况下,也会导致不必要的排序。如排序合并连接,也会导致不必要的排序。故无论何时,只要使用了排序合并连接,就会执行排序已 连接关键值。故在数据库与应用程序设计的时候,要尽量避免排序合并连接。其实,在许多情况下,嵌套循环连接反而使更好的选择。因为这个嵌套循环连接,它更 加有效而且不会导致不必要的排序以及不比要的全表扫描。
其次,有时候缺失索引也会导致一些并不要的排序。
故数据库管理员在平时的工作中,要尽量的减少这些不必要的排序,以让宝贵的内存资源交给更重要的任务来适用。
三、利用Statspack工具监控排序活动。
Statspack工具是一款提高Oracle数据库性能的很好的辅助工具。因为它可以帮助我们收集很多有用的信息。故我们数据库管理员也可以利用Statspack工具对数据库中的排序活动进行监控。
对于一个有经验的数据库管理员来说,对内存排序和磁盘排序保持必要的排需是非常必要的。因为我们无法左右用户的行为;而用户的行为又会有所调整。用 户在调整的过程中,有可能又会增加额外的磁盘排序。当然,也有可能磁盘排序的几率会减少。但是,通常情况下,随着用户交易数据的增加,这个磁盘排序的几率 在理论上仍然是往上爬的。而实际上也是往上升的,只是这个升的速度没有理论上那么快而已。这主要是看数据库管理员如何进行管理了。
根据笔者的了解,企业用户的操作往往会有一个周期性的变化,如按年或者按月进行周期性的变化。数据库管理员应该养成一个好习惯,每个月利用Statspack工具定期的对数据库进行监控。特别是要监控数据库的排序情况。
Statspack工具还有额外的一个功能,就是自动监测与警告功能。也就是说,可以让Statspack这个工具在磁盘排序数量超过一个预设置的阀值 时,自动给数据库管理员发送一个警告,如通过邮件形式发送给管理员等等。笔者通过监控发现,每到月底与月初的时候,磁盘排序的数量会大大的增加。这主要是 因为在月底的时候,用户会对当月的交易数据进行统计。所以当月底月初的时候,由于交易记录比较多,所以,会有比较多的磁盘排序发生。在这种情况下,数据库 管理员有必要对相关参数进行调整。不过这个调整是暂时的调整,等到这个周期过去后,仍然要把参数调回来。只有如此,数据库的整体性能才会有所保障。即不会 因为内存过载而降低数据库性能;也不会因为磁盘排序而给数据库造成额外的负担。
所以,虽然排序是SQL语句执行中很微小的一个部分,但 是其对数据库性能影响却比较大,而且也是非常显著的。可惜的是,排序是SQL调整中往往被忽视的地方。在Oracle数据库中,排序对用户来说是透明的。 也就是说,排序对用户很少有所限制,用户可以根据自己的需要来对数据进行随意地排序。但是,用户并不知道,什么样的操作会降低数据库的性能。故如何降低用 户的不合理操作而产生额外的排序,甚至是磁盘排序,这是数据库管理员在平时工作中必须要考虑到的一个问题。通过以上三个方法,或许可以给数据库管理员找到 一些解决问题的思路。相信通过以上方法,可以最大程度的减少磁盘排序的发生,不再让磁盘排序成为影响数据库性能的罪魁祸首。
优化排序操作
1、概念
服务器首先在sort_area_size指定大小的内存区域里排序,如果所需的空间超过sort_area_size,排序会在临时表空间里进行。在专 用服务器模式下,排序空间在PGA中,在共享服务器模式下,排序空间在UGA中。如果没有建立large pool,UGA处于shared pool中,如果建立了large pool,UGA就处于large pool中,而PGA不在sga中,它是与每个进程对应单独存在的。
PGA:program global area,为单个进程(服务器进程或后台进程)保存数据和控制信息的内存区域。PGA与进程一一对应,且只能被起对应的进程读写,PGA在用户登录数据库创建会话的时候建立。
有关排序空间自动管理的两个参数:
Pga_aggregate_target: 10M-4000G,等于分配给oracle instance的所有内存减去SGA后的大小。
Workarea_size_policy: auto/manual,只有Pga_aggregate_target已定义时才能设置为auto。
这两个参数会取代所有的*_area_size参数。
措施:
尽可能避免排序;尽可能在内存中排序;分配合适的临时空间以减少空间分配调用。
2、需要进行排序的操作:
A、创建索引;
B、涉及到索引维护的并行插入
C、order by或者group by(尽可能对索引字段排序)
D、Distinct
E、union/intersect/minus
F、sort-merge join
G、analyze命令(仅可能使用estamate而不是compute)
3、诊断和措施
Select * from v$sysstat where name like ‘%sort%’;
Sort(disk):要求Io去临时表空间的排序数目
Sort(memory):完全在memory中完成的排序数目
Sort(rows):被排序的行数合计
Sort(disk)/ Sort(memory)<5%,如果超过5%,增加sort_area_size的值。
DISK MEM RATIO
———- ———- ———-
182 27333829 0.00066584
4、监控临时表空间的使用情况及其配置
Select tablespace_name,current_users,total_extents,used_extents,extent_hits,max_used_blocks,max_sort_blocks FROM v$sort_segment ;
Column Description
CURRENT_USERS Number of active users
TOTAL_EXTENTS Total number of extents
USED_EXTENTS Extents currently allocated to sorts
EXTENT_HITS Number of times an unused extent was found in the pool
MAX_USED_BLOCKS Maximum number of used blocks
MAX_SORT_BLOCKS Maximum number of blocks used by an individual sort
临时表空间的配置:
A、initial/next设置为sort_area_size的整数倍,允许额外的一个block作为segment的header
B、pctincrease=0
C、基于不同的排序需要建立多个临时表空间
D、将临时表空间文件分散到多个磁盘上
来源:http://oracle.chinaitlab.com/optimize/719755.html
发表评论
-
Oracle中的外连接简单介绍
2006-08-11 09:53 481在讲外连接之前,先举例介绍内连接,也就是一般的相等连接。 s ... -
SQLServer和Oracle常用函数对比
2006-08-11 09:55 341SQLServer和Oracle是大家经常用到的数据库,在此感 ... -
Oracle SQL 内置函数大全
2006-08-24 10:37 527... -
Oracle PL/SQL入门之慨述
2006-09-05 21:14 505一、PL/SQL出现的目的 结构化查询语言(Structur ... -
Oracle:PL/SQL 中如何使用Array
2006-09-18 20:41 617因为在PL/SQL 中并没有数 ... -
java高级编程:基于JNDI的应用开发
2006-10-02 18:08 573基于JNDI的应用开发 ... -
开源技术之Tomcat数据源配置总结
2006-10-06 14:55 580成功配置环境Tomcat5.0.28+ ... -
Java调用存储过程
2006-10-11 14:22 601摘要:本文阐述了怎 ... -
JNDI配置原理详解
2006-10-11 14:55 648最近写书,写到JNDI,到 ... -
ORACLE SEQUENCE的简单介绍
2006-12-28 11:01 724在oracle中sequence就是所 ... -
oracle系统表查询
2007-07-30 17:03 547数据字典dict总是属于Ora ... -
JOB
2007-09-04 17:42 411var jobno number begin sys.db ... -
网络收集:PLSQL常用方法汇总
2007-10-18 14:03 707网络收集:PLSQL常用方法汇总 在SQLPLUS下,实现中- ... -
oracle pl/sql 创建同义词
2007-10-24 11:05 1287CREATE OR REPLACE Procedure Cre ... -
索引分析和比较
2007-11-21 10:20 715转自:http://tb.blog.csdn.net/Trac ... -
ORACLE索引与高性能SQL介绍
2007-11-21 15:05 463转自:http://blog.csdn.net/annicyb ... -
oracle动态游标的简单实现方法
2008-05-27 09:17 739下面就是例子程序 --明细表打印予处理 通用报表: pro ... -
Oracle触发器
2008-05-27 15:22 610是特定事件出现的时候,自动执行的代码块。类似于存储过程,但是用 ... -
Oracle体系结构之-Oracle中各种名称
2008-05-31 15:18 768一、数据库名 数据 ... -
数据库设计准则(第一、第二、第三范式说明)
2009-01-04 11:53 608I、关系数据库设计范式介绍 1.1 第一范式(1NF)无重复的 ...
相关推荐
Oracle数据库应用系统的调优主要包括十个方面: (1)、优化数据库内存; (2)、在Oracle共享池中固定应用程序代码; (3)、优化数据存储; (4)、优化数据排序的技术; (5)、优化SQL语句; (6)、优化回退段; (7)、优化...
SGA io和配置 优化排序操作 诊断latch竞争 Rollback(undo) Segment 优化 Lock Contention 应用优化 提升block的效率 等等
你所管理的Oracle系统性能是否“极好”,你的回答可能是“否”。你的系统在正常运行的情况下是否能降低资源的消耗?性能问题是Oracle系统都会碰到的问题,如何使有限的计算机系统资源为更多的用户服务?如何保证用户...
外部的性能问题 : CPU 内存 网络 行的重新排序 SQL 语句的调优 调整 Oracle 的竞争 调整 Oracle 的排序操作 表格和索引存储参数设置的要求总结
性能调优及方法 寻找问题根源 System_Event 事件 Session_Event 事件 Session_Wait 应用优化 例程调优 I-O 优化 竞争优化 O-S 监控 数据库备份恢复 检查 Oracle 数据库备份结果 检查数据库备份日志...
├─第一篇 DBA工作手记 │ 01.Eygle的DBA工作手记 │ 02.Yangtingkun的DBA工作手记 │ 03.老熊的DBA手记 │ 04.BanPing的DBA工作手记 │ ├─第二篇 诊断案例篇 │ 01.ASM案例分析与诊断 ...一次排序的调整与优化
一、SGA 二、数据库配置和IO问题 三、优化排序操作 四、诊断latch竞争 五、Rollback(undo) Segment 优化 六、Lock Contention 七、应用优化 八、提升block的效率 九、SQL优化 十、操作系统优化和使用资源管理器
oracle动态性能表 学习动态性能表 第一篇--v$sysstat 2007.5.23 按照OracleDocument中的描述,v$sysstat存储自数据库实例运行那刻起就开始累计全实例(instance-wide)的资源使用情况。 类似于v$sesstat,该视图...
Michael Abbey是公认的数据库管理、安装、开发、应用迁移、性能调优和实现方面的权威。在过去的14年中,他与IanAbramson和MichaelCorey为OraclePress合著了一系列图书.Abbey在国际Oracle用户团体非常活跃,经常出席...
2.1.4 没有分析操作难度乱调优 26 2.2 如何缩短SQL调优时间 27 2.2.1 先获取有助调优的数据库整体信息 27 2.2.2 快速获取SQL运行台前信息 27 2.2.3 快速拿到SQL关联幕后信息 28 2.3 从案例看快速SQL调优 29 ...
有近20年使用Oracle技术产品以及Oracle数据库管理员/Oracle数据库应用管理员的经验,是真正应用集群、性能调优以及数据库内部属性方面的专家。同时是一位演讲家及Oracle ACE。 JARED STILL 从1994年就开始使用...
正在看的ORACLE教程是:Oracle SQL性能优化系列学习二。 4. 选择最有效率的表名顺序(只在基于规则的优化器中有效) ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表 ...
1.6.6. 步骤#6: 成为性能调优的专家 16 1.6.7. 步骤#7: 成为承载能力计划的专家 17 1.6.8. 步骤#8: 密切关注新的技术 17 1.7. 结论 17 2. DBA工作概述 18 2.1. DBA职责 18 2.1.1. 决定数据库中的信息内容和结构 18 ...
通过学习《Oracle Database 11g完全参考手册》,您可以了解如何实现最新的安全措施,如何调优数据库的性能,如何部署网格计算技术。附录部分内容丰富、便予参照,包括Oracle命令、关键字、功能以及函数等。 目录 ...
通过学习《Oracle Database 11g完全参考手册》,您可以了解如何实现最新的安全措施,如何调优数据库的性能,如何部署网格计算技术。附录部分内容丰富、便予参照,包括Oracle命令、关键字、功能以及函数等。 目录 ...
避免动态空间管理Oracle数据库增长空间是就以区的单位扩展的,区由块组成,区的增长方式有两种,一种是allocation_type是UNIFORM,每次分配区的大小是一致的,另一种Allocation_type是SYSTEM自动分配。区的大是...
1、MySQL大事记 1994年:Michael Widenius...2013年:MySQL 5.7发布,加入了JSON数据类型、有效地调整排序缓存和更好的性能优化等。 2018年:MySQL 8.0发布,提供窗口函数、变量范围和原生支持多种数据类型等新特性。
#查找根卷组下大于2M的文件, 并根据文件大小排序, 大文件在前. find / -xdev -size +1024 -ls |sort -r +6 8277 624 -r-xr-xr-x 1 root system 635390 Jul 31 2003 /sbin/helpers/jfs2/fsck 28 596 -rw-r--r-- 1 ...