文档库 最新最全的文档下载
当前位置:文档库 › oracle10g优化数据库

oracle10g优化数据库

oracle10g优化数据库
oracle10g优化数据库

一基本概念

1实例和数据库

(1)什么是实例:数据库启动以后,各个进程调入到内存中,各个进程之间的相互协调构成了实例

(2)什么是数据库:各个数据文件的集合: 10.0\oradata\%sid%\目下有各种文件(CTL(控制文件),LOG(日志文件),DBF(数据

文件))

(3)数据库的物理结构

系统的初始化参数:存放的位置为% oracle_home%\product\10.0\Db_1\database\initorcl.ora 数据库日志文件:分为联机日志文件(重做日志文件(redo日志文件):不停的覆盖)和归档日志文件(在数据库热备份的时候使

用);联机日志文件写完以后,依次往下写,全部写满,重新

覆盖原来的,此时就是非归档形式。

控制文件:控制日志文件和数据文件。数据库启动的时候,首先启动控制文件,然后由控制文件打开数据文件,对应数据中的形式就是:database mount ,然后是database open。

查看数据库得文件:

数据库的连接:sqlplus system/bjsxt as sysdba

对应的控制文件从v$controlfile视图中查看。

desc v$controlfile (查看描述)

select status ,controlfile from v$controlfile。(查看内容)

对应的数据文件从v$datafile视图中查看。

desc v$datafile

select status, name from v$datafile

对应的日志文件从v$logfile视图中查看。

desc v$logfile

select member from v$logfile

2内存结构

(1)SGA(系统全局区)的各个缓冲区

SGA被实例的所有进程所共享,包含高速缓存区(DB Buffer)、大的共享区、共享池、日志缓冲区、固定的SGA。

DB 高速缓冲区:使用系统内存,加快数据库访问数据文件中的数据。

共享池:缓冲执行的SQL语句、程序块、执行计划、常用的数据字典。

Redo buffer:日志文件缓冲区。

大共享区:提供了一个可选的内存块区,当需要备份或者执行大的SQL语句时可能需要它。

固定SGA:完全由oracle内部控制。

查看SGA的使用情况:

SELECT NAME, BYTES FROM SYS.V_$SGASTAT ORDER BY NAME ASC

3逻辑结构

(1)表空间

(2)段

(3)盘区

(4)数据块

查看数据文件的信息:

desc dba_data_files;

select substr(file_name,1,50),tablespace_name,blocks from dba_data_files;

查看表空间信息:

desc dba_tablespaces;

查看段信息:

desc dba_segments

查看盘区信息:

desc dba_extents;

二调优工具介绍

1SQL_TRACE

(1)SQL_TRACE说明:

注意:从oracle 10g开始,SQL_TRACE成为了动态参数

SQL_TRACE为true,表示运行,会对整个实例产生严重的性能影响,所以在产品环境下,如非必要,一定不要设置这个参数。如果必须在系统下启动SQL_TRACE,必须保证以下条件对系统性能影响最小:

保证25%的cpu idle

为user_dump_dest分配足够的空间。

(2)在使用SQL_TRACE之前,几个注意事项需要说明一下: 初始化参数TIMED_STATISTICS

参数TIMED_STATISTICS最好设置为true,否则一些重要

信息将无法收集

设MAX_DUMP_FILE_SIZE

在9i中默认为unlimited,表示可以任意大小

Alter session set MAX_DUMP_FILE_SIZE=unlimited

(3)SQL_TRACE可以通过初始化参数来设置,也可以通过alter system (从10g开始)在全局中设置,也可以在具体的session中设置

在参数文件中设置(pfile/spfile)指定:

Sql_trace=true;

在oracle 10g动态全局指定

Alter system set sql_trace=true;

在当前session中指定

Alter session set sql_trace =true;

2使用tkprof工具来查询sql性能工具

SQL trace工具集收集正在执行的sql的性能状态数据,并将数据记录到一个跟踪文件中,这个跟踪文件提供很多有用的信息,如cpu时间,总消耗时间,读取磁盘数量,查询中返回的记录数目等。

使用命令查看一下tkprof的帮助fkprof 然后回车在这些参数比较有用的是:

fchela (按照elapsed time fetching来对分析的结果排序)

sys这个参数设置为no可以阻止所有以sys用户执行的sql被显示出来

使用步骤:

?在数据库上设置TIMED_STATISTICS为TRUE(在9i上

默认为true,可以使用命令:show parameter timed_statistics

查看);

Alter system set timed_statistics=true;

?启动当前会话的sql_trace:

alter session set sql_trace=true;

(停止当前会话的sql_trace: alter session set sql_trace=false;)

?跟踪文件的存放位置由初始化参数user_dump_dest控制,

(可以用命令show parameter user_dump_dest来查看).可

能通过修改时间来找到最新生成的跟踪文件。生成的跟踪

文件扩展名为.trc.是二进制文件。找到了对应的跟踪文件

orcl_ora_3888.trc.

?对trace文件使用tkprof工具进行分析

Tkprof tracefile outfile [options]

例子:

tkprof orcl_ora_3576.trc report.txt sort=fchcpu sys=no;

Tfprof文件参数解析:

?CALL:每次SQL语句的处理都分成三个部分(Parse,

Execute,Fetch)

?Parse:这步将SQL语句转换成执行计划,包括检查是否

有正确的授权和所需要用到的表、列以及其他引用到的对象是否存在。

?Execute:这步是真正的由Oracle来执行语句。对于insert、

update、delete操作,这步会修改数据,对于select操作,这步就只是确定选择的记录。

?Fetch:返回查询语句中所获得的记录,这步只有select

语句会被执行。

?COUNT: 这个语句被parse、execute、fetch的次数。

?CPU:这个语句对于所有的parse、execute、fetch所消耗

的cpu的时间,以秒为单位。

?ELAPSED:这个语句所有消耗在parse、execute、fetch

的总的时间。

?DISK:从磁盘上的数据文件中物理读取的块的数量。一

般来说更想知道的是正在从缓存中读取的数据而不是从磁盘上读取的数据。

?QUERY:在一致性读模式下,所有parse、execute、fetch

所获得的buffer的数量。一致性模式的buffer是用于给一个长时间运行的事务提供一个一致性读的快照,缓存实际上在头部存储了状态。

?CURRENT:在current模式下所获得的buffer的数量。一

般在current模式下执行insert、update、delete操作都会获

取buffer。在current模式下如果在高速缓存区发现有新的

缓存足够给当前的事务使用,则这些buffer都会被读入了

缓存区中。

?ROWS: 所有SQL语句返回的记录数目,但是不包括子查

询中返回的记录数目。对于select语句,返回记录是在fetch

这步,对于insert、update、delete操作,返回记录则是在

execute这步。

问题判断:

?elapsed/cpu 太大表示执行过程中花费了大量的时间等待

某种资源

?cpu OR elapsed 太大表示执行时间过长,或消耗了大量

的CPU时间,应该考虑优化

3在pl/slq中使用set timing on与使用sql_trace的区别

三调优方式:(SQL)

1在数据量比较大表上建立相关的索引

Create index abc_b_index on abc(b);

2Where 子句的连接顺序

?ORACLE采用自上而下的顺序解析WHERE子句,根据这

个原理,表之间的连接必须写在其他WHERE条件之前,

那些可以过滤最大数据记录的条件必须写在WHERE子句

的末尾。

select empno,ename,job,sal from emp where

job='PRESIDENT' and sal>1000

select empno,ename,job,sal from emp where sal>1000

and job='PRESIDENT'

注:(select count(*) from emp where sal>1000:(查询的数

目为15068))

(select count(*) from emp where job='PRESIDENT'; 查询

的数目为1952)

3Select 子句中避免使用’*’;

如果在select子句中查询所有的字段,使用*是比较方便的,但是效率比较低,原因在于ORACLE在解析* 的时候,要将* 依次转化为字段名称,这个转化过程是通过查询数据字典完成的。

4减少访问数据库的次数

当执行每条sql语句时,ORACLE在内部执行很多工作:解析SQL,估算索引的利用率,绑定变量,读数据块等。

查询编号为34的员工的姓名,工作,工资;再查询一下编号为35的员工(低效)

select ename,job,sal from emp where empno=34;

select ename,job,sal from emp where empno=35;

在一个sql直接实现查询编号为34和35的员工信息(高效)

select ename,job,sal from emp where empno=34 or empno=35

5使用DECODE函数来减少处理时间

(1)DECODE使用说明:decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)

该函数的含义如下:

IF 条件=值1 THEN

RETURN(翻译值1)

ELSIF 条件=值2 THEN

RETURN(翻译值2)

......

ELSIF 条件=值n THEN

RETURN(翻译值n)

ELSE

RETURN(缺省值)

END IF

(2)使DECODE可以避免重复扫描相同记录或者重复连接相同的表

select count(*),sum(sal) from emp where ename='SMITH' and deptno=20;

select count(*),sum(sal) from emp where ename='SMITH' and deptno=10

select count(decode(deptno,10,'X',NULL)) D10_COUNT, count(decode(deptno,20,'X',NULL)) D20_COUNT,

sum(decode(deptno,10,sal,NULL)) D10_sum,

sum(decode(deptno,20,sal,NULL)) D20_sum

from emp where ename = 'SMITH'

6删除重复记录

Oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的,rowid确定了每条记录是在ORACLE中的哪一个数据文件、块、行上。在重复的记录中,可能所有列的内容都相同,但rowid不会相同,所以只要确定出重复记录中那些具有最大rowid的就可以了,其余全部删除。

(1)方法一

创建一个相同备份表

create table tbl_test_temp as select * from tbl_test

在原有的表里增加记录

insert into tbl_test select * from tbl_test

查询重复记录的信息

select id,name,pid ,count(*) from tbl_test group by id,name ,pid having count(*)>1

删除重复记录

delete from tbl_test_temp x where x.rowid>(select min(rowid)

from tbl_test_temp e where x.id=e.id)

(或者)delete from tbl_test_temp x where x.rowid<(select max(rowid) from tbl_test_temp e where x.id=e.id)

(或者)delete from tbl_test_temp x where x.rowid!=(select max(rowid) from tbl_test_temp e where x.id=e.id)

(2)第二种方法:

?创建一个临时表,保存不重复的数据

create table temp as select distinct * from tbl_test_temp

?丢弃原来的表:

drop table tbl_test_temp

?创建原来的表

create table tbl_test_temp as select * from temp

?丢弃临时表

drop table temp

7TRUNCATE代替DELETE

当删除表的记录时,通常情况下,回滚段(rollback segments)用来保存可以被恢复的信息,如果你没有COMMIT事务,ORACLE会将数据恢复到删除之前的状态,而当运用TRUNCATE时,回滚段不再存放任何可被恢复的信息,当命

令运行后,数据不能被恢复,因此很少的资源被调用,执行时间也会很短。

8尽量多用commit

只要有可能尽量多用COMMIT,这样程序的性能得到提高,需求也会因为COMMIT所释放的资源而减少,COMMIT释放的资源:

?回滚段上用于恢复数据的信息

?被程序语句获得的锁

?Redo log buffer中的空间

9计算记录条目数和一般的观点相反,count(*)要比count(1)快,但是count(索引字段)是最快的。

10用Where子句替换HA VING子句避免使用HA VING子句,HA VING只会在检索出所有记录之后才对结果集进行过滤,这个处理需要排序,总计等操作。如果能通过WHERE子句限制记录的数目,那就能减少这方面的开销。(导入新的表)

?select sum(zdkpje),nsrsbh,swjg_dm from zzs_da_ybnsr group

by nsrsbh,swjg_dm having swjg_dm not like '1000%'(低校)

?select sum(zdkpje),nsrsbh,swjg_dm from zzs_da_ybnsr where

swjg_dm not like '1000%' group by nsrsbh,swjg_dm (高

效)

?

11在含有子查询的语句中,尽量减少对表的查询

?select * from emp where deptno in (select deptno from dept

where loc like 'NEW YORK' ) or deptno in (select

deptno from dept where DNAME like 'SALES' )

?select * from emp where deptno in (select deptno from dept

where loc like 'NEW YORK' or DNAME like 'SALES')

12使用表的别名(Alias),这样可以一方面减少系统解析的时间,另一方面可以减少由column造成的歧义错误。

13Exist和in(not exist 和not in)

?in 是把外表和那表作hash join,而exists是对外表作loop,

每次loop再对那表进行查询。这样的话,in适合内外表都

很大的情况,exists适合外表结果集很小的情况。in 是把

外表和那表作hash join,而exists是对外表作loop,每次

loop再对那表进行查询。

如:select * from emp where deptno in (select deptno from dept) (或者)select * from emp where exists(select 'x' from dept where dept.deptno=emp.deptno)

分析如下:

?Select * from T1 where x in ( select y from T2 )

执行的过程相当于:

select * from t1, ( select distinct y from t2 ) t2

where t1.x = t2.y;

select * from t1 where exists ( select null from t2 where y = x )

执行的过程相当于:

for x in ( select * from t1 )

loop

if ( exists ( select null from t2 where y = x.x )

then

OUTPUT THE RECORD

end if

end loop

表 T1 不可避免的要被完全扫描一遍

四常见的Oracle的面试题:

1oracle中truncate和delete命令有何区别?

(1)delete将在回滚段中产生回滚信息,truncate不产生,因此无论表中的记录多少,truncate执行都很快。

(2)truncate 是DDL,执行隐含的commit,truncate不能回滚。任何没有提交的DML 改变也将会和truncate一起提交。

(3)truncate 重置表及其索引高水位标志。全表扫描和索引快速全扫描读高水位标志下的所有数据块,因此在delete后全扫描性能没有提高,但truncate后将会变快。

(4)truncate 不触发delete 触发器。

(5)没有对象权限允许一个用户truncate 另一个用户的表。这样做需要DROP ANY TABLE 系统权限。

(6)当一个表被truncate,表及其索引的存储将被重置回初始大小。而delete 不收缩表及其索引的大小。

(7)当父表有一个可用的引用完整性约束时不能被truncate。必须先disable 引用父表的外键约束,再truncate。

2Oracle中char和varchar2数据类型有什么区别?有数据”test”分别存放到char(10)和varchar2(10)类型的字段中,其存储长度及类型有何区别?char是定长字符类型,varchar2是变长字符类型。“test”在char(10)中被补齐空格,存储长度是10字节,在varchar2(10)中存储长度是4字节。

3简单描述table / segment / extent / block之间的关系

答:一个table至少是一个segment,如果分区表,则每个分区是一个segment,table可以看成是一个逻辑上的概念,segment可以看成是这个逻辑概念的物理实现;

segment由一个或多个extents组成,segment不可以跨表空间但可以跨数据文件;

extent由多个连续的blocks组成,不可以跨数据文件;

block由1-多个os块组成,是oracle i/o的最小存储单位。

4描述tablespace和datafile之间的关系

答:tablespace是逻辑上的概念,datafile是物理上的概念。

一个tablespace可以由多个datafile组成,一个datafile不能跨越多个tablespace。

5回滚段的作用是什么

答:保存数据的前像,保证数据读取的时间点一致性。Oracle里数据的多版本特性就是通过回滚段来实现的,正因为此,Oracle数据库实现了读写不竞争的性能优势!

6日志的作用是什么

便与恢复。

答:纪录对数据库的操作

7SGA主要有那些部分,主要作用是什么

答:db_cache(缓存数据块),shared_pool(缓存sql,执行计划,数据字典信息等),large_pool(MTS模式、parallel 、rman等要用到),java pool(java程序如SQLJ

存储过程运行时要用到)

8:SQL调整最关注的是什么

查看该SQL的response time(db block gets/consistent gets/physical reads/sorts (disk))

Linux下Oracle10g创建数据库

Linux下Oracle10g创建数据库流程 通过Redhat as4 Linux 下的两种途径来创建数据库,详细描述各个步骤的来龙去脉,让理清创建一个数据库的整体流程。 前提:用户已经成功的安装ORACLE数据库服务器到对应的LINUX平台,下面的动作都是基于ORACLE+REDHAT AS4的基础上完成的。 在linux平台创建数据库的方法有两种:1.通过oracle数据库建库脚本直接到终端下运行对应的脚本即可,前提是这些脚本报保证它的正确性;2.通过linux平台下提供的图形界面来创建数据库,这种方式用的最多也是最简便的一种 1.图形界面安装oracle数据库 登陆到linux操作系统界面下,切换到root用户,执行命令xhost,具体如下: xhost +ip/hostname ---主要是让本机终端能够访问x server图形界面服务 切换用户到oracle,执行env查看DISPLAY环境变量的值,通常DISPLAY=:0.0,这时需要把对应的ip/hostname设置到DISPLAY中,执行命令: export DISPLAY=ip:0.0 如果一切正常的话,那么这时候我们直接进入oracle用户下执行dbca命令。 进入安装界面

直接点击上图的下一步。

在上图 Database Templates 页面上,选择创建数据库使用的数据库模板类型。您可以单击 Show Details 查看每种数据库类型的配置。选择适合于您的数据库将支持的工作负载的类型的模板。如果您不确定,选择默认的 General Purpose(一般用途)模板。直接点击上图的下一步。

大型ORACLE数据库优化设计方案

大型ORACLE数据库优化设计方案 本文主要从大型数据库ORACLE环境四个不同级别的调整分析入手,分析ORACLE的系统结构和工作机理,从九个不同方面较全面地总结了ORACLE数据库的优化调整方案。 对于ORACLE数据库的数据存取,主要有四个不同的调整级别,第一级调整是操作系统级 包括硬件平台,第二级调整是ORACLE RDBMS级的调整,第三级是数据库设计级的调整,最后一个调整级是SQL级。通常依此四级调整级别对数据库进行调整、优化,数据库的整体性能会得到很大的改善。下面从九个不 同方面介绍ORACLE数据库优化设计方案。 一.数据库优化自由结构OFA(Optimal flexible Architecture) 数据库的逻辑配置对数据库性能有很大的影响,为此,ORACLE公司对表空间设计提出了一种优化结构OFA。使用这种结构进行设计会大大简化物理设计中的数据管理。优化自由结构OFA,简单地讲就是在数据库中可以高效自由地分布逻辑数据对象,因此首先要对数据库中的逻辑对象根据他们的使用方式和物理结构对数据库的影响来进行分类,这种分类包括将系统数据和用户数据分开、一般数据和索引数据分开、低活动表和高活动表分开等等。数据库逻辑设计的结果应当符合下面的准则:(1)把以同样方式使用的段类型存储在一起; (2)按照标准使用来设计系统;(3)存在用于例外的分离区域;(4)最小化表空间冲突;(5)将数 据字典分离。 二、充分利用系统全局区域SGA(SYSTEM GLOBAL AREA) SGA是oracle数据库的心脏。用户的进程对这个内存区发送事务,并且以这里作为高速缓存读取命中的数据,以实现加速的目的。正确的SGA大小对数据库的性能至关重要。SGA 包括以下几个部分: 1、数据块缓冲区(data block buffer cache)是SGA中的一块高速缓存,占整个数据库大小 的1%-2%,用来存储从数据库重读取的数据块(表、索引、簇等),因此采用least recently used (LRU,最近最少使用)的方法进行空间管理。 2、字典缓冲区。该缓冲区内的信息包括用户账号数据、数据文件名、段名、盘区位置、表 说明和权限,它也采用LRU方式管理。 3、重做日志缓冲区。该缓冲区保存为数据库恢复过程中用于前滚操作。 4、SQL共享池。保存执行计划和运行数据库的SQL语句的语法分析树。也采用LRU算法 管理。如果设置过小,语句将被连续不断地再装入到库缓存,影响系统性能。 另外,SGA还包括大池、JAVA池、多缓冲池。但是主要是由上面4种缓冲区构成。对这

OracleSQL性能优化方法

OracleSQL性能优化方法 Oracle性能优化方法(SQL篇) (1) 1综述 (2) 2表分区的应用 (2) 3访咨询Table的方式 (3) 4共享SQL语句 (3) 5选择最有效率的表名顺序 (5) 6WHERE子句中的连接顺序. (6) 7SELECT子句中幸免使用’*’ (6) 8减少访咨询数据库的次数 (6) 9使用DECODE函数来减少处理时刻 (7) 10整合简单,无关联的数据库访咨询 (8) 11删除重复记录 (8) 12用TRUNCATE替代DELETE (9) 13尽量多使用COMMIT (9) 14运算记录条数 (9) 15用Where子句替换HA VING子句 (9) 16减少对表的查询 (10) 17通过内部函数提高SQL效率 (11) 18使用表的不名(Alias) (12) 19用EXISTS替代IN (12) 20用NOT EXISTS替代NOT IN (13) 21识不低效执行的SQL语句 (13) 22使用TKPROF 工具来查询SQL性能状态 (14) 23用EXPLAIN PLAN 分析SQL语句 (14) 24实时批量的处理 (16)

1综述 ORACLE数据库的性能调整是个重要,却又有难度的话题,如何有效地进行调整,需要通过反反复复的过程。在数据库建立时,就能依照顾用的需要合理设计分配表空间以及储备参数、内存使用初始化参数,对以后的数据库性能有专门大的益处,建立好后,又需要在应用中不断进行应用程序的优化和调整,这需要在大量的实践工作中不断地积存体会,从而更好地进行数据库的调优。 数据库性能调优的方法 ●调整内存 ●调整I/O ●调整资源的争用咨询题 ●调整操作系统参数 ●调整数据库的设计 ●调整应用程序 本文针对应用程序的调整,来讲明对数据库性能如何进行优化。 2表分区的应用 关于海量数据的表,能够考虑建立分区以提高操作效率。建立分区一样以关键字为分区的标志,也能够以其他字段作为分区的标志,但效率不如关键字高。建立分区的语句在建表时能够进行讲明: create table TABLENAME() partition by range (PutOutNo) (partition PART1 values lessthan (200312319999) partition PART2 values lessthan (200412319999) 。。。。。。 如此,在进行大部分数据查询,数据更新和数据插入时,Oracle自动判定操作应该在哪个分区进行,幸免了整表操作,提高了执行的效率

( O管理)ORACLESL性能优化(内部培训资料)

(O管理)ORACLESL性能优化(内部培训资料)

ORACLESQL性能优化系列(一) 1.选用适合的ORACLE优化器 ORACLE的优化器共有3种: a.RULE(基于规则) b.COST(基于成本) c.CHOOSE(选择性) 设置缺省的优化器,可以通过对init.ora文件中OPTIMIZER_MODE参数的各种声明,如RULE,COST,CHOOSE,ALL_ROWS,FIRST_ROWS.你当然也在SQL句级或是会话(session)级对其进行覆盖. 为了使用基于成本的优化器(CBO,Cost-BasedOptimizer),你必须经常运行analyze命令,以增加数据库中的对象统计信息(objectstatistics)的准确性. 如果数据库的优化器模式设置为选择性(CHOOSE),那么实际的优化器模式将和是否运行过analyze命令有关.如果table已经被analyze过,优化器模式将自动成为CBO,反之,数据库将采用RULE形式的优化器. 在缺省情况下,ORACLE采用CHOOSE优化器,为了避免那些不必要的全表扫描(fulltablescan),你必须尽量避免使用CHOOSE优化器,而直接采用基于规则或者基于成本的优化器.

2.访问Table的方式 ORACLE采用两种访问表中记录的方式: a.全表扫描 全表扫描就是顺序地访问表中每条记录.ORACLE采用一次读入多个数据块(databaseblock)的方式优化全表扫描. b.通过ROWID访问表 你可以采用基于ROWID的访问方式情况,提高访问表的效率,,ROWID包含了表中记录的物理位置信息..ORACLE采用索引(INDEX)实现了数据和存放数据的物理位置(ROWID)之间的联系.通常索引提供了快速访问ROWID的方法,因此那些基于索引列的查询就可以得到性能上的提高. 3.共享SQL语句 为了不重复解析相同的SQL语句,在第一次解析之后,ORACLE将SQL语句存放在内存中.这块位于系统全局区域SGA(systemglobalarea)的共享池(sharedbufferpool)中的内存可以被所有的数据库用户共享.因此,当你执行一个SQL语句(有时被称为一个游标)时,如果它和之前的执行过的语句完全相同,ORACLE就能很快获得已经被解析的语句以及最好的执行路

oracle数据库优化报告

o r a c l e数据库优化报告公司内部编号:(GOOD-TMMT-MMUT-UUPTY-UUYY-DTTI-

oracle数据库 优化报告 目录 1、概述 随着应用软件用户负载的增加和愈来愈复杂的应用环境,操作系统的各项性能参数、数据库的使用效率、用户的响应速度、系统的安全运行等性能问题逐渐成为系统必须考虑的指标之一。性能测试以及优化通常通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试,用来检测系统是否达到用户提出的性能指标,及时发现系统中存在的瓶颈,最后起到优化系统的目的。

随着需求不断增加,特别是复杂逻辑的需求,一旦出现高并发量时,也将可能导致数据库主机无法承载,因此数据库优化亟待解决。 2、数据库优化部分 从2018年1月份开始跟踪及分析,发现托管区数据库在环境、设计及SQL 三方面,都存在不少问题。在SQL类优化中,本地化代码编写和设计不良,是比较明显的问题。下面将分成环境、设计、SQL优化三类进行持续分析,并给出相关建议、整改方案、整改进度。 、环境优化 被关闭 zonghe托管区数据库统计信息未自动收集,如果未打开收集,会对系统性能造成较大的影响。 需要开启统计信息 开启方法如下: --执行 BEGIN (client_name => 'auto optimizer statscollection', operation => NULL, window_name =>NULL); END;

部分索引失效 需要将索引进行删除。删除命令参考如下: drop index index_name; 、设计优化 设计类问题概述 设计类问题优化建议 1、对于表的创建开发人员需要与业务人员确认后再定义 2、经常与其他表进行连接的表,在连接字段上应该建立索引 3、索引应该建在选择性高的字段上。例如:表示性别的数据列,由于只有男女两种值,就属于选择性低

ORACLE 性能优化

ORACLE 数据库性能优化 参考书目: 《ORACLE 9i Database Performance Tuning Guide and Reference》《ORACLE 9i Database Reference》 《ORACLE 9i SQL Reference》 《ORACLE 9i Database Administrator’s Guide》

一、数据库实例创建过程参数确定 在创建数据库实例过程中,需要确定以下几个参数: 1. 数据块大小(DB_BLOCK_SIZE) 该参数指明了ORACLE所处理的数据存贮于数据文档以及SGA内存中的数据块大小。 该参数的可选择的范围为:4k,8k,16k,32k,64k。对于OLTP系统而言,取值可以为4K或8K,对于DSS系统而言,则可以取较大的数据,如32K或64K 建议统一取8K(即8192) 说明 DB_BLOCK_SIZE的大小将影响创建表时的EXTENT的大小。例如指定db_block_size=16K,某表空间的EXTENT MANAGEMENT 为local autoallocate,则其系统将extent的大小最小指定为1M.所以将可能导致空间的浪费。 2. 字符集(Character set) 该参数确定数据库以何种字符集来存贮CHAR以及V ARCHAR、V ARCHAR2等字符类型的值。对于ORACLE数据字典中的字符(如表及字段的COMMENT 内容)具有同样的作用。因此需要考虑如字符集的使用。对于国际项目,因为数据库中的comment内容(包括表及字符、存贮过程中的中文字符等内容)可能性需要以中文存贮,而用户业务数据使用的字符可能性是使用本地的语言,基于此,该参数需要选择支持UNICODE的字符编码的字符集。目前ORACLE9i支持以下二种UNICODE字符集: ?UTF8 ?AL32UTF8 建议统一取AL32UTF8

oracle10g优化数据库

一基本概念 1实例和数据库 (1)什么是实例:数据库启动以后,各个进程调入到内存中,各个进程之间的相互协调构成了实例 (2)什么是数据库:各个数据文件的集合: 10.0\oradata\%sid%\目下有各种文件(CTL(控制文件),LOG(日志文件),DBF(数据 文件)) (3)数据库的物理结构 系统的初始化参数:存放的位置为% oracle_home%\product\10.0\Db_1\database\initorcl.ora 数据库日志文件:分为联机日志文件(重做日志文件(redo日志文件):不停的覆盖)和归档日志文件(在数据库热备份的时候使 用);联机日志文件写完以后,依次往下写,全部写满,重新 覆盖原来的,此时就是非归档形式。

控制文件:控制日志文件和数据文件。数据库启动的时候,首先启动控制文件,然后由控制文件打开数据文件,对应数据中的形式就是:database mount ,然后是database open。 查看数据库得文件: 数据库的连接:sqlplus system/bjsxt as sysdba 对应的控制文件从v$controlfile视图中查看。 desc v$controlfile (查看描述) select status ,controlfile from v$controlfile。(查看内容) 对应的数据文件从v$datafile视图中查看。 desc v$datafile select status, name from v$datafile 对应的日志文件从v$logfile视图中查看。 desc v$logfile select member from v$logfile 2内存结构 (1)SGA(系统全局区)的各个缓冲区

Oracle SQL性能优化方法研究

Oracle SQL性能优化方法探讨 Oracle性能优化方法(SQL篇) (1) 1综述 (2) 2表分区的应用 (2) 3访问Table的方式 (3) 4共享SQL语句 (3) 5选择最有效率的表名顺序 (5) 6WHERE子句中的连接顺序. (6) 7SELECT子句中幸免使用’*’ (6) 8减少访问数据库的次数 (6) 9使用DECODE函数来减少处理时刻 (7) 10整合简单,无关联的数据库访问 (8) 11删除重复记录 (8) 12用TRUNCATE替代DELETE (9) 13尽量多使用COMMIT (9) 14计算记录条数 (9) 15用Where子句替换HAVING子句 (9) 16减少对表的查询 (10) 17通过内部函数提高SQL效率 (11)

18使用表的不名(Alias) (12) 19用EXISTS替代IN (12) 20用NOT EXISTS替代NOT IN (13) 21识不低效执行的SQL语句 (13) 22使用TKPROF 工具来查询SQL性能状态 (14) 23用EXPLAIN PLAN 分析SQL语句 (14) 24实时批量的处理 (16)

1综述 ORACLE数据库的性能调整是个重要,却又有难度的话题,如何有效地进行调整,需要通过反反复复的过程。在数据库建立时,就能依照顾用的需要合理设计分配表空间以及存储参数、内存使用初始化参数,对以后的数据库性能有专门大的益处,建立好后,又需要在应用中不断进行应用程序的优化和调整,这需要在大量的实践工作中不断地积存经验,从而更好地进行数据库的调优。 数据库性能调优的方法 ●调整内存 ●调整I/O ●调整资源的争用问题 ●调整操作系统参数 ●调整数据库的设计 ●调整应用程序 本文针对应用程序的调整,来讲明对数据库性能如何进行优化。 2表分区的应用 关于海量数据的表,能够考虑建立分区以提高操作效率。建

大型ORACLE数据库优化设计方案

大型ORACLE数据库优化设计方案 摘要主要从大型数据库ORACLE环境四个不同级别的调整分析入手,分析ORACLE的系统结构和工作机理,从九个不同方面较全面地总结了ORACLE数据库的优化调整方案。 关键词ORACLE数据库环境调整优化设计方案 对于ORACLE数据库的数据存取,主要有四个不同的调整级别,第一级调整是操作系统级包括硬件平台,第二级调整是ORACLERDBMS级的调整,第三级是数据库设计级的调整,最后一个调整级是SQL级。通常依此四级调整级别对数据库进行调整、优化,数据库的整体性能会得到很大的改善。下面从九个不同

方面介绍ORACLE数据库优化设计方案。 一.数据库优化自由结构OFA(OptimalflexibleArchitecture) 数据库的逻辑配置对数据库性能有很大的影响,为此,ORACLE公司对表空间设计提出了一种优化结构OFA。使用这种结构进行设计会大大简化物理设计中的数据管理。优化自由结构OFA,简单地讲就是在数据库中可以高效自由地分布逻辑数据对象,因此首先要对数据库中的逻辑对象根据他们的使用方式和物理结构对数据库的影响来进行分类,这种分类包括将系统数据和用户数据分开、一般数据和索引数据分开、低活动表和高活动表分开等等。 二、充分利用系统全局区域SGA (SYSTEMGLOBALAREA) SGA是oracle数据库的心脏。用户的进程对这个内存区发送事务,并且以这里作为高速缓存读取命中的数据,以实现加速的目的。正确的SGA大小对数据库

的性能至关重要。SGA包括以下几个部分: 2、字典缓冲区。该缓冲区内的信息包括用户账号数据、数据文件名、段名、盘区位置、表说明和权限,它也采用LRU 方式管理。 3、重做日志缓冲区。该缓冲区保存为数据库恢复过程中用于前滚操作。 4、SQL共享池。保存执行计划和运行数据库的SQL语句的语法分析树。也采用LRU算法管理。如果设置过小,语句将被连续不断地再装入到库缓存,影响系统性能。 另外,SGA还包括大池、JA V A池、多缓冲池。但是主要是由上面4种缓冲区构成。对这些内存缓冲区的合理设置,可以大大加快数据查询速度,一个足够大的内存区可以把绝大多数数据存储在内存中,只有那些不怎么频繁使用的数据,才从磁盘读取,这样就可以大大提高内存区的命中率。三、规范与反规范设计数据库

ORACLE10G安装过程成功解决网络配置检测

Oracle10g安装过程成功解决网络配置检测: 注:ORACLE的安装路径中不能出现中文字符及空格(这也是Oracle为什么不能安装到C:\Program Files的原因),否则即使使用如下配置Microsoft LoopBack Adapter网络配置检测也不能通过。 在安装ORACLE10G前系统会检测安装的一些前提条件是否满足,往往会提示说:将Microsoft LoopBack Adapter配置为系统的主网络适配器。如果你没有这样配置,且你不希望安装过程由于这个而出错,那么过程如下: (1)停掉当前的网络连接(安装时只开通下面创建的Microsoft loopback Adapter,所有的其他网络连接都停掉); (2)控制面板-->添加硬件-->下一步-->是,我已经连接了此硬件-->添加新硬件-->安装我手动从列表选择的硬件-->网络适配器-->microsoft-->Microsoft loopback Adapter-->下一步-->安装完成 添加完成,你会发现新建了个“本地连接”,用的就是这个假的“Microsoft Loopback Adapter”(因为我根本就没有连接这个硬件,只是骗下Oracle而已)。把这个本地连接的IP设下(如192.168.0.1); (3)好了,现在回去重新让Oracle检测一遍吧,肯定是通过了。 应用程序访问方式:访问当前本地连接地址(Microsoft loopback Adapter是否该关闭?记得非常成功的一次是最好关闭),例如Microsoft Loopback Adapter的IP为192.168.0.1,而我当前网络的对外通路(即本地)连接为192.168.0.2,则访问此Oracle的地址为192.168.0.2 〖经验〗 (1)如果在安装时没有停掉本地连接,只是拔掉网线,网络断开,则仍可正确安装和使用,只是在开启Oracle10g服务之前必须开启Microsoft Loopback Adapter,否则Oracle10g服务无法启动. 在网络上其他机器Oracle9i Console连接此Oracle10g服务时使用sys之SYSDBA身份可以正常登录,而system提示授权不足无法登录 (2)如果在安装时没有停掉本地连接,也没有拔掉网线,而使本机在网络连通状态下,又如上配置Microsoft Loopback Adapter并开启,如此安装仍可成功,并且PLSQL、SQLPLUS 等Oracle10g环境下都可正常访问,但是局域网中的其他Oracle9i Console也无法连接此Oracle10g服务,而且本机和网络中的java程序都无法访问,apache-tomcat-6.0.14控制台将打印以下错误: 2007-10-823:31:47org.apache.catalina.startup.HostConfig checkResources 信息:Reloading context[/P54_AutoRefresh] java.sql.SQLException:Io异常:The Network Adapter could not establish the connection at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134) at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179) at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:333) at oracle.jdbc.driver.OracleConnection.(OracleConnection.java:404) at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java:468) at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:314) at java.sql.DriverManager.getConnection(DriverManager.java:548) at java.sql.DriverManager.getConnection(DriverManager.java:179) at classmate.DB.(DB.java:16)

ORACLE性能优化31条

1.ORACLE的优化器共有3种 A、RULE (基于规则) b、COST (基于成本) c、CHOOSE (选择性) 设置缺省的优化器,可以通过对init.ora文件中OPTIMIZER_MODE参数的各种声明,如RULE,COST,CHOOSE,ALL_ROWS,FIRST_ROWS 。你当然也在SQL句级或是会话(session)级对其进行覆盖。 为了使用基于成本的优化器(CBO,Cost-Based Optimizer) ,你必须经常运行analyze 命令,以增加数据库中的对象统计信息(object statistics)的准确性。 如果数据库的优化器模式设置为选择性(CHOOSE),那么实际的优化器模式将和是否运行过analyze 命令有关。如果table已经被analyze过,优化器模式将自动成为CBO ,反之,数据库将采用RULE 形式的优化器。 在缺省情况下,ORACLE采用CHOOSE优化器,为了避免那些不必要的全表扫描(full table scan) ,你必须尽量避免使用CHOOSE优化器,而直接采用基于规则或者基于成本的优化器。 2.访问Table的方式 ORACLE 采用两种访问表中记录的方式: A、全表扫描 全表扫描就是顺序地访问表中每条记录。ORACLE采用一次读入多个数据块(database block)的方式优化全表扫描。 B、通过ROWID访问表 你可以采用基于ROWID的访问方式情况,提高访问表的效率,ROWID包含了表中记录的物理位置信息。ORACLE采用索引(INDEX)实现了数据和存放数据的物理位置(ROWID)之间的联系。通常索引提供了快速访问ROWID的方法,因此那些基于索引列的查询就可以得到性能上的提高。 3.共享SQL语句 为了不重复解析相同的SQL语句,在第一次解析之后,ORACLE将SQL语句存放在内存中。这块位于系统全局区域SGA(system global area)的共享池(shared buffer pool)中的内存可以被所有的数据库用户共享。因此,当你执行一个SQL语句(有时被称为一个游标)时,如果它和之前的执行过的语句完全相同,ORACLE就能很快获得已经被解析的语句以及最好的执行路径。ORACLE的这个功能大大地提高了SQL 的执行性能并节省了内存的使用。 可惜的是ORACLE只对简单的表提供高速缓冲(cache buffering),这个功能并不适用于多表连接查询。 数据库管理员必须在init.ora中为这个区域设置合适的参数,当这个内存区域越大,就可以保留更多的语句,当然被共享的可能性也就越大了。 当你向ORACLE提交一个SQL语句,ORACLE会首先在这块内存中查找相同的语句。这里需要注明的是,ORACLE对两者采取的是一种严格匹配,要达成共享,SQL语句必须完全相同(包括空格,换行等)。 数据库管理员必须在init.ora中为这个区域设置合适的参数,当这个内存区域越大,就可以保留更多的语句,当然被共享的可能性也就越大了。 共享的语句必须满足三个条件: A、字符级的比较:当前被执行的语句和共享池中的语句必须完全相同。 B、两个语句所指的对象必须完全相同: C、两个SQL语句中必须使用相同的名字的绑定变量(bind variables)。 4.选择最有效率的表名顺序(只在基于规则的优化器中有效) ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表driving table)将被最先处理。在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。当ORACLE处理多个表时,会运用排序及合并的方式连接它们。首先,扫描第一个表(FROM子句中最后的那个表)并对记录进行派序,然后扫描第二个表(FROM子句中最后第二个表),最后将所有从第二个表中检索出的记录与第一个表中合适记录进行合并。 如果有3个以上的表连接查询,那就需要选择交叉表(intersection table)作为基础表,交叉表是指

关于Oracle10g数据库系统性能优化与调整的研究

关于Oracle 10g数据库系统性能优化与调整的研究【摘要】当前Oracle数据库应用极为广泛,但是不断增加的数据量和访问量等因素导致数据库系统性能的降低,出现吞吐量降低、响应时间变长等相关的数据库性能问题,这就产生了对数据库系统的优化的需求。如何对数据库系统进行优化和调整,才能获得更快的响应时间、更大的吞吐量、以及更少的资源占用呢?在本文中笔者就Oracle 10g数据库系统性能优化与调整进行了相关方面的研究。【关键词】Oracle 10g数据库;系统性能;优化与调整;SQL语句优化 1.前言 IT系统随着支持用量的增长和新业务的不断扩展,数据处理量大量增加,业务处理模式日趋复杂,必然导致主机CPU和I/O占用不断呈线性增加。因此,充分使用先用硬件的处理能力对于保护投资至关重要。Oracle数据库是现在使用最广泛的大型数据库之一,但是在实际的应用中,不断增加的数据量和访问量都会导致Oracle数据库系统性能的降低现象,这就产生了对Oracle数据库系统的优化的需求,通过相关的优化和调整手段,以实现更快的响应时间、更大的吞吐量、以及更少的资源占用等。 2.影响数据库系统性能的因素 就Oracle 10g数据库来说,影响其系统运行性能的主要因素以及这些因素在Oracle 10g数据库系统性能中的地位如表1所示。 表1 影响Oracle10g数据库系统性能的相关因素

3.数据库系统性能优化与调整 数据库系统的优化与调整的目的是通过对Oracle 10g数据库性能的相关优化以达到有效提高Oracle 10g数据库性能。Oracle 10g数据库的性能优化与调整应从影响系统性能的因素(如数据库服务器性能、数据库配置等)着手,实现对数据库的体系结构、软件结构、具体的业务和技术等方面的优化效果,使得数据库系统实现更快的响应时间、更大的吞吐量、以及更少的资源占用等性能。 3.1内存区调整与优化 对Oracle 10g数据库实例的内存结构进行内存区调整与优化应从SGA和PGA 两个方面着手。其中SGA是Oracle数据库的核心部分,对SGA进行相关的调整与优化对Oracle 10g数据库系统性能工作中具有极为重要的影响,SGA的调整与优化主要包括数据缓冲区、字典缓冲区、日志缓冲区以及SQL共享池的调整与优化。 3.1.1数据块缓冲区优化 这部分缓冲区占整个数据库大小的1%-2%,如果Oracle 10g数据库用户请求的数据在数据块缓冲区,则被请求的数据可以不经由服务器进程读取数据而直接被返回给用户,这种方式将数据库用户获取数据的时间大为缩短。而对于用户访问数据不在数据块缓冲区的情况,则用户查询的数据首先要经过服务器读取这一“中间”过程,使得用户获取的时间大为延长。因此,对数据块缓冲区进行必要的优化,保证尽量多的用户请求数据在缓冲区中对于提高系统服务器性能是极为重要的。 3.1.2重做日志缓冲区 这一缓冲区的主要用途为在Oracle 10g数据库恢复过程中用于前滚操作,

Oracle 10g安装教程带图片

ORACLE 10g 安装教程 刚刚接触ORACLE的人来说,从那里学,如何学,有那些工具可以使用,应该执行什么操作,一定回感到无助。所以在学习使用ORACLE之前,首先来安装一下ORACLE 10g,在来掌握其基本工具。俗话说的好:工欲善其事,必先利其器。我们开始吧! 首先将ORACLE 10g的安装光盘放入光驱,如果自动运行,一般会出现如图1安装界面: 图1

单击“开始安装”,就可以安装ORACLE 10g,一般会检查系统配置是否符合要求,然后出现“Oracle DataBase 10g安装”对话框,如图2所示: 图2

在安装Oracle DataBase 10g时可以选择“基本安装”和“高级安装”两种方法。选择“基本安装”时,“Oracle主目录位置”用于指定Oracle DataBase 10g软件的存放位置;“安装类型”用于指定Oracle产品的安装类型(企业版、标准版和个人版)。如果选择“创建启动数据库”,那就要指定全局数据库名称和数据库用户的口令。 选择“高级安装”,单击“下一步”,会出现“指定文件对话框”,在源路径显示的是安装产品所在的磁盘路径;目标名称用于资定Oracle主目录所对应的环境变量,目标路径用于指定安装Oracle软件的目标安装路径。设置目标名称为:OraDb10g_home1,目标路径为:D:oracleproduct10.1.0db1。如图3: 图3

单击“下一步”,会加载Oracle产品列表,然后出现“选择安装类型”对话框;如图4: 图4

选择安装类型时一般选择“企业版”,单击“下一步”,会出现“选择数据库配置”对话框,如图5 : 图5

Oracle性能优化

ORACLE的优化器共有3种 A、RULE (基于规则) b、COST (基于成本) c、CHOOSE (选择性) 设置缺省的优化器,可以通过对init.ora文件中OPTIMIZER_MODE参数的各种声明,如RULE,COST,CHOOSE,ALL_ROWS,FIRST_ROWS 。你当然也在SQL句级或是会话(session)级对其进行覆盖。 为了使用基于成本的优化器(CBO, Cost-Based Optimizer) ,你必须经常运行analyze 命令,以增加数据库中的对象统计信息(object statistics)的准确性。 如果数据库的优化器模式设置为选择性(CHOOSE),那么实际的优化器模式将和是否运行过analyze命令有关。如果table已经被analyze过,优化器模式将自动成为CBO ,反之,数据库将采用RULE形式的优化器。 在缺省情况下,ORACLE采用CHOOSE优化器,为了避免那些不必要的全表扫描(full table scan) ,你必须尽量避免使用CHOOSE优化器,而直接采用基于规则或者基于成本的优化器。 2.访问Table的方式 ORACLE 采用两种访问表中记录的方式: A、全表扫描 全表扫描就是顺序地访问表中每条记录。ORACLE采用一次读入多个数据块(database block)的方式优化全表扫描。 B、通过ROWID访问表 你可以采用基于ROWID的访问方式情况,提高访问表的效率, ROWID 包含了表中记录的物理位置信息。ORACLE采用索引(INDEX)实现了数据和存放数据的物理位置(ROWID)之间的联系。通常索引提供了快速访问ROWID的方法,因此那些基于索引列的查询就可以得到性能上的提高。 3.共享SQL语句 为了不重复解析相同的SQL语句,在第一次解析之后,ORACLE将SQL语句存放在存中。这块位于系统全局区域SGA(system global area)的共享池(shared buffer pool)中的存可以被所有的数据库用户共享。因此,当你执行一个SQL语句(有时被称为一个游标)时,如果它和之前的执行过的语句完全相同, ORACLE就能很快获得已经被解析的语句以及最好的执行路径。ORACLE的这个功能大提高了SQL的执行性能并节省了存的使用。 可惜的是ORACLE只对简单的表提供高速缓冲(cache buffering),这个功能并不适用于多表连接查询。

Oracle 10g安装与简介

中文名: Oracle 10g For Windows 英文名: Oracle 10g For Windows 别名: Oracle;10g 资源格式: 光盘镜像 版本: 10.1.0 发行时间: 2004年 制作发行: Oracle 甲骨文 地区: 大陆,美国 简介: [已通过安全检测] 瑞星17.57.42 [安装测试]WinXP SP2 上安装 Oracle 数据库 10g 共享服务时间:每天上午10点-下午6点

共享服务器:随机 软件版权归原作者及原软件公司所有,如果你喜欢,请购买正版软件 已经有人发过Linux版,那么再发一份Win版.安装需要机器配置较高. 一、概要 Oracle Database 10g 是第一个为企业级网格计算而设计的数据库,允许IT快速响应业务需求,在降低成本的同时,提供最高质量的服务。最重要的是,它易于部署和管理。 企业级网格计算的关键是要创建大型的行业标准的、模块化的存储器和服务器池。利用这种体系结构,每一个新系统都可以从这个组件池中快速得到供应。用户也不需要根据高峰负载来确定系统规模,因为可以容易地从这些资源池中按需要增加或重新分配容量。 企业级网格计算通过多种途径显着地降低了大型应用系统所需的存储器和服务器成本。凭借使用低成本的组件和提高资源利用水平,降低了硬件成本。同时因为每一个系统都可以按照相同的设计来构建,加上集中化管理和管理工具减轻了维护和监控的负担和相应的人工成本。利用这种更高的效率,IT能够快速响应业务需求,而且大大降低了总体风险。 二、高效的存储技术 对数据库而言,存储器是主要的资源之一。在今天的标准环境中,为获得最大的吞吐量而在不同磁盘存储器上存放数据的过程可能是一个费时的过程,并且数据库每次向存储区增加或从存储区删除磁盘时,都要重复这个过程。 Oracle Database 10g中新的自动存储管理(ASM)功能解决了这些挑战。ASM允许数据库直接管理原始磁盘。使得一个文件系统和卷管理器不需要同时管理数据文件和日志文件。ASM自动地跨磁盘为所有数据建立带区,提供了最高的I/O吞吐量,且无需任何管理成本。当增加或删除磁盘时,ASM自动维护带区。利用可选的镜像功能,提高了数据利用率,并且可以在线添加和删除磁盘。此外,因为由ASM处理已不再是数据库的文件的删除,从而消除了因人为错误而造成数据丢失

Oracle性能优化

y物理模型CheckList (Oracle,性能) 1. 系统级优化 数据库参数配置 合理分配SGA及其内部参数(经验值如下): SGA=phy*(60%-80%) Share pool=SAG*45% DB Cache=SGA*45% Log Buffer: 1~3M 注:Oracle9i在Windows下有bug,是由Windows下的SGA最大 值有2G的限制造成的 注意调整process和open cursor参数,这两个参数直接影响 数据库的session量 分离表和索引:将表和索引建立在不同的表空间,决不要将 不属于Oracle内部系统的对象存放到SYSTEM表空间。同 时,确保数据表空间和索引表空间置于不同的硬盘,减少I/O 竞争; 如果是企业版数据库,大表可以考虑采取分区存储措施,提 高系统的性能; 优化Export和Import工作:使用较大的BUFFER(比如10MB , 10,240,000)可以提高EXPORT和IMPORT的速度 定期分析查询计划,提高数据库的性能;

2. 索引相关 要对经常查询的字段建立索引,但是由于索引管理的开销, 在增删改操作频繁的情况下避免建立不必要的索引; 对于只读或者接近只读的场合,如数据仓库,对于势值比较 小的列可以考虑使用bitmap索引; 如果索引是建立在多个列上, 只有在它的第一个列(leading column)被where子句引用时,优化器才会选择使用该索引. 3. SQL相关 Oracle的From子句表的顺序:记录越多的表放在越前面 (左); Oracle的where子句表达式的顺序:过滤掉最大数目记录的条 件放到where子句的末尾; Select子句中避免使用‘*’,增加了查询表的列的开销; 在执行结果等效的情况下,使用Truncate代替Delete; 为了在查询过程中要尽量使用索引,对于like语句避免使用 右匹配或者中间匹配的模糊查询; 将过滤条件尽可能放到Where子句中,而不是放到Having子 句中; 在SQL语句中,要减少对表的查询,特别是在含有子查询的 SQL子句中; 使用表的别名可以减少解析的时间并避免引起歧义; 使用exists替代in; 用NOT EXISTS替代NOT IN; 通常情况下,采用表连接的方式比exists更有效率; 当提交一个包含一对多表信息(比如部门表和雇员表)的查询

Oracle性能优化总结

个人理解,数据库性能最关键的因素在于IO,因为操作内存是快速的,但是读写磁盘是速度很慢的,优化数据库最关键的问题在于减少磁盘的IO,就个人理解应该分为物理的和逻辑的优化,物理的是指oracle产品本身的一些优化,逻辑优化是指应用程序级别的优化物理优化: 一、优化内存

V$ROWCACHE视图结构

3.管理员可以通过下述语句来查看数据缓冲区的使用情况 select name,value from v$sysstat where name in ('db block gets', 'consistent gets ', 'physical reads'); 数据缓冲区使用命中率(physical reads除以db block gets加consistent gets之和)一定要小于10%,否则需要增加数据缓冲区大小 4.管理员可以通过执行下述语句,查看日志缓冲区的使用情况 select name,value from v$sysstat where name in ('redo entries','redo log space requests') 根据查询出的结果可以计算出日志缓冲区的申请失败率:requests除以entries 申请失败率应该解决与0,否则说明日志缓冲区开设太小,需要增加Oracle数据库的日志缓冲区 二、物理I/0的优化 1.在磁盘上建立数据文件前首先运行磁盘碎片整理程序 为了安全地整理磁盘碎片,需关闭打开数据文件的实例,并且停止服务。如果有足够的连续磁盘空间建立数据文件,那么就容易避免数据文件产生碎片。 2.不要使用磁盘压缩(Oracle文件不支持磁盘压缩) 3.不要使用磁盘加密

oracle数据库优化报告

oracle数据库 优化报告

目录 1、概述 (3) 2、数据库优化部分 (3) 2.1、环境优化 (3) 2.1.1 统计信息收集被关闭 (3) 2.1.2 部分索引失效 (4) 2.2、设计优化 (4) 2.2.1 设计类问题概述 (4) 2.2.2 设计类问题优化建议 (5) 2.3、SQL优化 (5) 2.3.1 SQL_ID= 7gf3typgc469a (5) 2.3.2 SQL_ID= bdcfdz26x5hm9 (6) 3、数据库优化总结 (7)

1、概述 随着应用软件用户负载的增加和愈来愈复杂的应用环境,操作系统的各项性能参数、数据库的使用效率、用户的响应速度、系统的安全运行等性能问题逐渐成为系统必须考虑的指标之一。性能测试以及优化通常通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试,用来检测系统是否达到用户提出的性能指标,及时发现系统中存在的瓶颈,最后起到优化系统的目的。 随着需求不断增加,特别是复杂逻辑的需求,一旦出现高并发量时,也将可能导致数据库主机无法承载,因此数据库优化亟待解决。 2、数据库优化部分 从2018年1月份开始跟踪及分析,发现托管区数据库在环境、设计及SQL三方面,都存在不少问题。在SQL类优化中,本地化代码编写和设计不良,是比较明显的问题。下面将分成环境、设计、SQL优化三类进行持续分析,并给出相关建议、整改方案、整改进度。 2.1、环境优化 2.1.1 被关闭 zonghe托管区数据库统计信息未自动收集,如果未打开收集,会对系统性能造成较大的影响。

需要开启统计信息 开启方法如下: --执行 BEGIN dbms_auto_task_admin.enable(client_name => 'auto optimizer statscollection', operation => NULL, window_name =>NULL); END; 2.1.2 部分索引失效 需要将索引进行删除。删除命令参考如下: drop index index_name; 2.2、设计优化 2.2.1 设计类问题概述 序号 类型 问题描述 1 表 ZJ_KZH_DATE 、ZJ_CRM_S_ORDER_GATHER 等本 地表,设计了大量的V1,V2,需要开发人员核对需 求 2 索引 索引定义较混乱,常与其他表进行连接的表,在连接

相关文档
相关文档 最新文档