如何调整Oracle数据库服务器的性能

如何调整Oracle数据库服务器的性能,第1张

 Oracle数据服务器是整个系统的核心 它的性能高低直接影响整个系统的性能 为了调整Oracle数据库服务器的性能 主要从以下几个方面考虑

 

 ◆ 调整操作系统以适合Oracle数据库服务器运行 Oracle数据库服务器很大程度上依赖于运行服务器的操作系统 如果操作系统不能提供最好性能 那么无论如何调整 Oracle数据库服务器也无法发挥其应有的性能

 

  为Oracle数据库服务器规划系统资源

 

 据已有计算机可用资源 规划分配给Oracle服务器资源原则是 尽可能使Oracle服务器使用资源最大化 特别在Client/Server中尽量让服务器上所有资源都来运行Oracle服务

 

  调整计算机系统中的内存配置

 多数操作系统都用虚存来模拟计算机上更大的内存 它实际上是硬盘上的一定的磁盘空间 当实际的内存空间不能满足应用软件的要求时 操作系统就将用这部分的磁盘空间对内存中的信息进行页面替换 这将引起大量的磁盘I/O操作 使整个服务器的性能下降 为了避免过多地使用虚存 应加大计算机的内存

 

  为Oracle数据库服务器设置操作系统进程优先级

 

 不要在操作系统中调整Oracle进程的优先级 因为在Oracle数据库系统中 所有的后台和前台数据库服务器进程执行的是同等重要的工作 需要同等的优先级 所以在安装时 让所有的数据库服务器进程都使用缺省的优先级运行

 

 ◆ 调整内存分配

 

 Oracle数据库服务器保留 个基本的内存高速缓存 分别对应 种不同类型的数据 库高速缓存 字典高速缓存和缓冲区高速缓存 库高速缓存和字典高速缓存一起构成共享池 共享池再加上缓冲区高速缓存便构成了系统全程区(SGA) SGA是对数据库数据进行快速访问的一个系统全程区 若SGA本身需要频繁地进行释放 分配 则不能达到快速访问数据的目的 因此应把SGA放在主存中 不要放在虚拟内存中 内存的调整主要是指调整组成SGA的内存结构的大小来提高系统性能 由于Oracle数据库服务器的内存结构需求与应用密切相关 所以内存结构的调整应在磁盘I/O调整之前进行

 

  库缓冲区的调整

 

 库缓冲区中包含私用和共享SQL和PL/SQL区 通过比较库缓冲区的命中率决定它的大小 要调整库缓冲区 必须首先了解该库缓冲区的活动情况 库缓冲区的活动统计信息保留在动态性能表v$librarycache数据字典中 可通过查询该表来了解其活动情况 以决定如何调整 Select sum(pins) sum(reloads) from v$librarycache; Pins列给出SQL语句 PL/SQL块及被访问对象定义的总次数 Reloads列给出SQL 和PL/SQL块的隐式分析或对象定义重装载时在库程序缓冲区中发生的错误 如果sum(pins)/sum(reloads) ≈ 则库缓冲区的命中率合适 若sum(pins)/sum(reloads)> 则需调整初始化参数 shared_pool_size来重新调整分配给共享池的内存量

 

  数据字典缓冲区的调整

 

 数据字典缓冲区包含了有关数据库的结构 用户 实体信息 数据字典的命中率 对系统性能影响极大 数据字典缓冲区的使用情况记录在动态性能表v$librarycache中 可通过查询该表来了解其活动情况 以决定如何调整 Select sum(gets) sum(getmisses) from v$rowcache; Gets列是对相应项请求次数的统计 Getmisses 列是引起缓冲区出错的数据的请求次数 对于频繁访问的数据字典缓冲区 sum(getmisses)/sum(gets)< %~ % 若大于此百分数 则应考虑增加数据字典缓冲区的容量 即需调整初始化参数shared_pool_size来重新调整分配给共享池的内存量

 

  缓冲区高速缓存的调整

 

 用户进程所存取的所有数据都是经过缓冲区高速缓存来存取 所以该部分的命中率 对性能至关重要 缓冲区高速缓存的使用情况记录在动态性能表v$sysstat中 可通过查询该表来了解其活动情况 以决定如何调整

 

 Select name value from v$sysstat

 

 where name in ( dbblock gets consistent gets physical reads );

 

 dbblock gets和consistent gets的值是请求数据缓冲区中读的总次数 physical reads的值是请求数据时引起从盘中读文件的次数 从缓冲区高速缓存中读的可能性的高低称为缓冲区的命中率 计算公式

 

 Hit Ratio= (physical reds/(dbblock gets+consistent gets))如果Hit Ratio< %~ % 则应增大db_block_buffers的参数值 db_block_buffers可以调整分配给缓冲区高速缓存的内存量 即db_block_buffers可设置分配缓冲区高速缓存的数据块的个数 缓冲区高速缓存的总字节数=db_block_buffers的值db_block_size的值 db_block_size 的值表示数据块大小的字节数 可查询 v$parameter 表 select name value from v$parameter where name= db_block_size ; 在修改了上述数据库的初始化参数以后 必须先关闭数据库 在重新启动数据库后才能使新的设置起作用

 

 ◆ 调整磁盘 I/O

 

 磁盘的I/O速度对整个系统性能有重要影响 解决好磁盘I/O问题 可显著提高性能 影响磁盘I/O的性能的主要原因有磁盘竞争 I/O次数过多和数据块空间的分配管理

 

 为Oracle数据库服务器创建新文件时 不论是表空间所用的数据文件还是数据事务登录所用的日志文件 都应仔细考虑数据库服务器上的可用磁盘资源 如果服务器上有多个磁盘 则可将文件分散存储到各个可用磁盘上 减少对数据库的数据文件及事务日志文件的竞争 从而有效地改善服务器的性能 对于不同的应用系统都有各自的数据集 应当创见不同的表空间分别存储各自应用系统的数据 并且尽可能的把表空间对应的数据文件存放在不同的磁盘上 这种从物理上把每个应用系统的表空间分散存放的方法 可以排除两个应用系统竞争磁盘的可能性 数据文件 事务日志文件分别存放在不同的磁盘上 这样事务处理执行的磁盘访问不妨碍对相应的事物日志登记的磁盘访问 如果有多个磁盘可用 将两个事物日志成员放在不同的磁盘驱动器上 就可以消除日志文件可能产生的磁盘竞争 应把一个应用的表数据和索引数据分散存放不同表空间上 并且尽量把不同类型的表空间存放在不同磁盘上 这样就消除了表数据和索引数据的磁盘竞争

 

 ◆ 调整数据库服务器的回滚段

 

 回滚段是一个存储区域 数据库使用该存储区域存放曾经由一个事务更新或删除的行的原始数据值 如果用户要回滚一个事务所做的改变 那么数据库就从回滚段中读回改变前的数据并使该事务影响的行改变为它们的原状态 回滚段控制着数据库处理事务的能力 因而在数据库成功中起著关键性的作用 不管数据库的其它部分设计得多好 如果它设计得不合理 将会严重影响系统的性能 建立和调整回滚段的原则如下

 

  分离回滚段

 

 分离回滚段是指单独为回滚段创建一个以上的表空间 使回滚段与数据字典 用户数据 索引等分离开来 由于回滚段的写入与数据和索引的写入是并行进行的 因此将它分离出来可以减少I/O争用 如果回滚段与数据不分离 倘若要某个表空间脱机或撤消 那么在该表空间中的各个回滚段没有全部脱机之前 不能将这个表空间脱机或撤消 而一旦该表空间不可用 则该表空间中的所有回滚段也不能使用 这将浪费所有分配的磁盘空间 所以 独立回滚段可使数据库管理变得容易 回滚段的经常性收缩 使得表空间的自由块更容易形成碎片 分离回滚段可以减少数据库表空间的碎片产生

 

  创建不同大小的回滚段群

 

lishixinzhi/Article/program/Oracle/201311/18922

 假设数据库所在服务器IP地址为:

 数据库实例名为:ora

 用户名: umap

 密码:umap

 第一步:打开配置程序

 位于:程序 >Oracle OraHome >Configuration and Migration Tools >Net Configuration Assistant ;

 第二步:选择配置项:

 打开程序后 出现的界面中有四个选项 分别为( )监听程序配置 ( )命名方法配置 ( )本地NET服务名配置 ( )目录使用配置 这里我们选择第 个 点下一步

 第三步:根据需要选择操作内容 是添加还是对以前的配置进行修改或删除;

 第四步:根据您要连接的Oracle数据据库版本选择 这里我们选择Oracle i或更高版本数据库或服务;

 第五步:服务名 输入示例中的实例名;

 第六步:选择TCP;

 第七步:主机名:输入示例中的IP地址; 使用默认端口 ;

 第八步:使用您的登录帐户与密码进行连接测试

  ORA :TNS:监听程序当前无法识别连接描述符中请求的服务 的解决方法

 ORA :TNS:无法处理服务名

 解决方案

  服务是否打开

  监听是否打开

  C:\oracle\ora \neork\admin目录下tnsnames ora文件中是否有你建的库名和主机名

 比如

 AA =

 (DESCRIPTION =

 (ADDRESS_LIST =

 (ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = ))

 )

 (CONNECT_DATA =

 (SERVICE_NAME = AA)

 )

 )

 SQL SERVER连接oracle数据库几种方法 年 月 日星期五 : P M 方式

  查询oracle数据库中的表

 SELECT

 FROM OPENDATASOURCE(

  MSDAORA

  Data Source=GE ;UserID=DAIMIN;Password=DAIMIN

 ) DAIMIN JOBS

 举一反三 在查询分析器中输入

 SELECT

 FROM OPENDATASOURCE(

  MSDAORA

  Data Source=ORCL;User ID=SYSTEM;Password=manager

 ) HKDY S_HD_HKDY

  在sqlserver中创建与oracle数据库中的表同名的表

 select into JOBS from

 OPENDATASOURCE(

  MSDAORA

  Data Source=GE ;User ID=daimin;Password=daimin

 ) DAIMIN JOBS

 select from JOBS

  方式

  在master数据库中查看已经存在的链接服务器

 select from sysservers

 EXEC sp_addlinkedserver

 @server = GE

 @srvproduct = Oracle

 @provider = MSDAORA

 @datasrc = GE

 exec sp_addlinkedsrvlogin GE false sa daimin daimin

  要在企业管理器内指定登录帐号

 exec sp_dropserver GE

 select from GE DAIMIN JOBS

 delete from GE DAIMIN JOBS

  备注 引用ORACLE服务器上的表时 用户名称与表名一定要大写字母

 SELECT

 FROM OPENQUERY(GE SELECT FROMDAIMIN JOBS )

  方式

 SELECT a

 FROM OPENROWSET( MSDAORA

  GE ; DAIMIN ; DAIMIN

 DAIMIN JOBS) AS a

 ORDER BY a JOB_ID

  方式 ODBC

  ODBC方式比较好办

 SELECT A

 FROMOPENROWSET( MSDAORA GE ; DAIMIN ; DAIMIN GE 是数据源名

 DAIMIN JOBS) AS A

lishixinzhi/Article/program/Oracle/201311/17597

 几个简单的步骤大幅提高Oracle性能 我优化数据库的三板斧

 数据库优化的讨论可以说是一个永恒的主题 资深的Oracle优化人员通常会要求提出性能问题的人对数据库做一个statspack 贴出数据库配置等等 还有的人认为要抓出执行最慢的语句来进行优化 但实际情况是 提出疑问的人很可能根本不懂执行计划 更不要说statspack了 而我认为 数据库优化 应该首先从大的方面考虑 网络 服务器硬件配置 操作系统配置 Oracle服务器配置 数据结构组织 然后才是具体的调整 实际上网络 硬件等往往无法决定更换 应用程序一般也无法修改 因此应该着重从数据库配置 数据结构上来下手 首先让数据库有一个良好的配置 然后再考虑具体优化某些过慢的语句 我在给我的用户系统进行优化的过程中 总结了一些基本的 简单易行的办法来优化数据库 算是我的三板斧 呵呵 不过请注意 这些不一定普遍使用 甚至有的会有副作用 但是对OLTP系统 基于成本的数据库往往行之有效 不妨试试 (注 附件是Burleson写的用来报告数据库性能等信息的脚本 本文用到)

 一.设置合适的SGA

 常常有人抱怨服务器硬件很好 但是Oracle就是很慢 很可能是内存分配不合理造成的 ( )假设内存有 M 这通常是小型应用 建议Oracle的SGA大约 M 其中 共享池(SHARED_POOL_SIZE)可以设置 M到 M 根据实际的用户数 查询等来定 数据块缓冲区可以大致分配 M M i下需要设置DB_BLOCK_BUFFERS DB_BLOCK_BUFFERDB_BLOCK_SIZE等于数据块缓冲区大小 i 下的数据缓冲区可以用db_cache_size来直接分配

 ( )假设内存有 G Oracle 的SGA可以考虑分配 M 共享池分配 M到 M 数据缓冲区分配 M到 M

 ( )内存 G SGA可以考虑分配 G 共享池 M到 M 剩下的给数据块缓冲区

 ( )内存 G以上 共享池 M到 M就足够啦 再多也没有太大帮助 (Biti_rainy有专述)数据缓冲区是尽可能的大 但是一定要注意两个问题 一是要给操作系统和其他应用留够内存 二是对于 位的操作系统 Oracle的SGA有 G的限制 有的 位操作系统上可以突破这个限制 方法还请看Biti的大作吧

 二.分析表和索引 更改优化模式

 Oracle默认优化模式是CHOOSE 在这种情况下 如果表没有经过分析 经常导致查询使用全表扫描 而不使用索引 这通常导致磁盘I/O太多 而导致查询很慢 如果没有使用执行计划稳定性 则应该把表和索引都分析一下 这样可能直接会使查询速度大幅提升 分析表命令可以用ANALYZE TABLE 分析索引可以用ANALYZE INDEX命令 对于少于 万的表 可以考虑分析整个表 对于很大的表 可以按百分比来分析 但是百分比不能过低 否则生成的统计信息可能不准确 可以通过DBA_TABLES的LAST_ANALYZED列来查看表是否经过分析或分析时间 索引可以通过DBA_INDEXES的LAST_ANALYZED列

 下面通过例子来说明分析前后的速度对比 (表CASE_GA_AJZLZ大约有 万数据 有主键)首先在SQLPLUS中打开自动查询执行计划功能 (第一次要执行\RDBMS\ADMIN\utlxplan sql来创建PLAN_TABLE这个表)

 

 SQL> SET AUTOTRACE ON SQL>SET TIMING ON

 通过SET AUTOTRACE ON 来查看语句的执行计划 通过SET TIMING ON 来查看语句运行时间

 

 SQL> select count() from CASE_GA_AJZLZ; COUNT()    已用时间: : :  Execution Plan    SELECT STATEMENT Optimizer=CHOOSE  SORT (AGGREGATE)  TABLE ACCESS (FULL) OF CASE_GA_AJZLZ ……………………

 请注意上面分析中的TABLE ACCESS(FULL) 这说明该语句执行了全表扫描 而且查询使用了 秒 这时表还没有经过分析 下面我们来对该表进行分析

 

 SQL> yze table CASE_GA_AJZLZ pute statistics;

 表已分析 已用时间: : : 然后再来查询

 

 SQL> select count() from CASE_GA_AJZLZ; COUNT()    已用时间: : :  Execution Plan  SELECT STATEMENT Optimizer=FIRST_ROWS (Cost= Card= )  SORT (AGGREGATE)  INDEX (FAST FULL SCAN) OF PK_AJZLZ (UNIQUE) (Cost= Card= ) …………………………

 请注意 这次时间仅仅用了 秒!这要归功于INDEX(FAST FULL SCAN) 通过分析表 查询使用了PK_AJZLZ索引 磁盘I/O大幅减少 速度也大幅提升!下面的实用语句可以

 用来生成分析某个用户的所有表和索引 假设用户是GAXZUSR

 

 SQL> set pagesize SQL> spool d:\ yze_tables sql; SQL> select yze table ||owner|| ||table_name|| pute statistics; from dba_tables where owner= GAXZUSR ; SQL> spool off SQL> spool spool d:\ yze_indexes sql; SQL> select yze index ||owner|| ||index_name|| pute statistics; from dba_indexes where owner= GAXZUSR ; SQL> spool off SQL> @d:\ yze_tables sql SQL> @d:\ yze_indexes sql

 解释 上面的语句生成了两个sql文件 分别分析全部的GAXZUSR的表和索引 如果需要按照百分比来分析表 可以修改一下脚本 通过上面的步骤 我们就完成了对表和索引的分析 可以测试一下速度的改进啦 建议定期运行上面的语句 尤其是数据经过大量更新

 当然 也可以通过dbms_stats来分析表和索引 更方便一些 但是我仍然习惯上面的方法 因为成功与否会直接提示出来

 

 另外 我们可以将优化模式进行修改 optimizer_mode值可以是RULE CHOOSE FIRST_ROWS和ALL_ROWS 对于OLTP系统 可以改成FIRST_ROWS 来要求查询尽快返回结果 这样即使不用分析 在一般情况下也可以提高查询性能 但是表和索引经过分析后有助于找到最合适的执行计划

 三.设置cursor_sharing=FORCE 或SIMILAR

 这种方法是 i才开始有的 oracle 不支持 通过设置该参数 可以强制共享只有文字不同的语句解释计划 例如下面两条语句可以共享

 

 SQL> SELECT FROM MYTABLE WHERE NAME= tom SQL> SELECT FROM MYTABLE WHERE NAME= turner

 这个方法可以大幅降低缓冲区利用率低的问题 避免语句重新解释 通过这个功能 可以很大程度上解决硬解析带来的性能下降的问题 个人感觉可根据系统的实际情况 决定是否将该参数改成FORCE 该参数默认是exact 不过一定要注意 修改之前 必须先给ORACLE打补丁 否则改之后oracle会占用 %的CPU 无法使用 对于ORACLE i 可以设置成SIMILAR 这个设置综合了FORCE和EXACT的优点 不过请慎用这个功能 这个参数也可能带来很大的负面影响!

 四.将常用的小表 索引钉在数据缓存KEEP池中

 内存上数据读取速度远远比硬盘中读取要快 据称 内存中数据读的速度是硬盘的 倍!如果资源比较丰富 把常用的小的 而且经常进行全表扫描的表给钉内存中 当然是在好不过了 可以简单的通过ALTER TABLE tablename CACHE来实现 在ORACLE i之后可以使用ALTER TABLE table STORAGE(BUFFER_POOL KEEP) 一般来说 可以考虑把 数据块之内的表放在keep池中 当然要根据内存大小等因素来定 关于如何查出那些表或索引符合条件 可以使用本文提供的access sql和access_report sql 这两个脚本是著名的Oracle专家 Burleson写的 你也可以在读懂了情况下根据实际情况调整一下脚本 对于索引 可以通过ALTER INDEX indexname STORAGE(BUFFER_POOL KEEP)来钉在KEEP池中

 将表定在KEEP池中需要做一些准备工作 对于ORACLE i 需要设置DB_KEEP_CACHE_SIZE 对于 i 需要设置buffer_pool_keep 在 i中 还要修改db_block_lru_latches 该参数默认是 无法使用buffer_pool_keep 该参数应该比 CPU数量少 但是要大于 才能设置DB_KEEP_CACHE_BUFFER buffer_pool_keep从db_block_buffers中分配 因此也要小于db_block_buffers 设置好这些参数后 就可以把常用对象永久钉在内存里

 五.设置optimizer_max_permutations

 对于多表连接查询 如果采用基于成本优化(CBO) ORACLE会计算出很多种运行方案

 从中选择出最优方案 这个参数就是设置oracle究竟从多少种方案来选择最优 如果设置太大 那么计算最优方案过程也是时间比较长的 Oracle 和 i默认是 建议改成 对于 i 已经默认是 了

 六.调整排序参数

 ( ) SORT_AREA_SIZE:默认的用来排序的SORT_AREA_SIZE大小是 K 通常显得有点小 一般可以考虑设置成 M( ) 这个参数不能设置过大 因为每个连接都要分配同样的排序内存

lishixinzhi/Article/program/Oracle/201311/18879

如果不加内存的话,也是可以的,不过在安装Oracle的时候应该先只安装软件,不创建数据库。

Oracle软件安装完之后 使用dbca命令创建数据库,建库过程中在内存配置的时候,大概可以选择物理内存的44%分配给Oracle(我记得512M内存这是最小分配值了,大概需要226M)。不过你放心,数据库建好后如果没有大量访问的话,实际使用内存一般不会超过100M,这样你就可以顺利应用了。

如果你是安装oracle时候默认创建的数据库,oracle10g会默认占用70%物理内存,这样你就比较被动了。9i及以前的版本不会,只会默认占用160M内存。所以即使你加了内存,也会被oracle大量占用。所以一定要先装软件,然后再建库。

你说你学习编程用,我觉得这样是可以的。我们公司老板机抠门的很,不给配好机器,我们开发部的机器内存基本都是512m的,不也照样用吗,当然,如果你愿意升级内存的话,是更好的

在安装Oracle 11g 2的时候说环境不满足最低要求的原因是系统错误导致的。

具体解决方法步骤如下:

1、首先打开计算机,在计算机内选中从Oracle官网或者其他网站下载下来的Oracle数据库两个压缩文件,点击右键,选择解压文件。注意,此处需要将两个压缩文件解压到同一个文件夹中。

2、在弹出的解压路径和选项界面的目标路径框中输入解压的文件位置与文件名称。

3、解压完成后,双击运行setupexe,开始安装。

4、此时弹出INS-13001 环境不满足最低要求的提示框,此时可以选择是继续安装;也可以选择否结束安装,修改配置,防止再次弹出此提示。

5、在解压后的Oracle安装文件目录中,找到 stage\cvu\cvu_prereqxml 文件。

6、打开cvu_prereqxml文件,找到value=windows 7的OPERATING_SYSTEM段,复制整段,并修改Release = 62, value = windows 10;

如下:<OPERATING_SYSTEM RELEASE="62"><VERSION VALUE="3"/><ARCHITECTURE 

VALUE="64-bit"/><NAME VALUE="Windows 10"/><ENV_VAR_LIST><ENV_VAR 

NAME="PATH" MAX_LENGTH="1023" /> </ENV_VAR_LIST></OPERATING_SYSTEM>即可。

扩展资料

 Oracle采用的是并行服务器模式,而Sybase SQL Server采用的是虚拟服务器模式,它没有将一个查询分解成多个子查询,再在不同的CPU上同时执行这些子查询。我们可以说在对称多处理方面Oracle的性能优于Sybase的性能。

业务量往往在系统运行后不断提高,如果数据库数量达到GB以上时,我们在提高系统的性能方面可以从两方面入手,一种是提高单台服务器的性能,还有就是增加服务器数目。

基于此,如果我们是提高单台服务器的性能,选择Oracle 数据库较好,因为它们能在对称多CPU的系统上提供并行处理。

相反,由于Sybase的导航服务器是网上的所有用户都注册到导航服务器并通过导航服务提出数据访问请求,导航服务器则将用户的请求分解,然后自动导向由它所控制的多台SQL Server,从而在分散数据的基础上提供并行处理能力,我们可以选择它。

这些都是在其他条件和环境相同的情况下比较的,这样才有可比性。在数据的分布更新方面Oracle采用的是基于服务器的自动的2PC(两阶段提交),而Sybase采用的则是基于客户机DB-Library或CT-Library的可编程的2PC。

因此选择数据库方面,必须根据需要进行选择,比如,从事的社会保险软件的开发,考虑到数据量大,并发操作比较多,实时性要求高,后台基本采取的是ORACLE数据库。

Oracle服务器有Oracle数据库和Oracle实例组成。Oracle实例由系统全局区内存结构和用于管理数据库的后台进程组成。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 如何调整Oracle数据库服务器的性能

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情