ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 正式上岗前的准备:怎么查看数据库参数配置信息

正式上岗前的准备:怎么查看数据库参数配置信息

原创 Linux操作系统 作者:dragon路 时间:2011-07-29 09:12:03 0 删除 编辑

做性能测试实际上是一个不短调优和测试的过程,而不是一次测试结束就完成了那么简单,中间分析调优的过程至关重要,接触oracle也有很长时间了,我们开发使用的数据库都是使用oracle的,也一直没有对oracle做总结,这里写这篇文章也算是自己学习和总结吧。下面就开始吧,不对之处还望指正,有些是摘自学习从书上拿来,有些查到的资料收集,也有一些自己的心的。

1、安装时注意:选择企业数据库中的一般用途

2、专用服务器共享服务器的区别:在专用连接中,连接所需要的资源全部在PGA中分配。该内存区为指定连接私有,其它进:程不能访问。 专用连接采用一对一的连接方式,能很快的响应用户的请求,但是,如果连接用户太多时,由于要对每一个连接分配资源,因此,连接数受硬件限制比较大。为了克服这种情况,Oracle 提出了共享连接的连接方法,即用一个服务器的进程响应多个用户连接,与专用连接不同有连接时才创建PGA不同,共享连接在实例一启动,就分配指定数量的服务器进程,所用户的连接,以排队的方式,由分配器指定给服务器进程,其它的进程排队等待。只要用户的请求一执行完,就会马上断开连接,分配器会把空闲的服务器进程分配给其它排除的进程。

长事务的共享连接会造成shared server进程的严重排队,造成性能的严重下降,长事务采用专用模式

在短事务多用户并发的情况下,多用Oracle的共享模式提高数据库性能,提高访问速度。web服务都是采用这样的服务模式来提高系统的并发性能,如果你的是j2ee或者.net的web服务都是需要采用这样的服务模式,具体配置过程你可以查手册。。。

3、配置成功验证方法:

查看共享配置成功的方式:

可在登陆sql下输入以下命令

Sql>show parameter dispat显示出含有dispat的所有涉及到的参数

Sql>show parameter share 显示出含有share的所有涉及到的参数

SELECT * FROM V$PARAMETER    查看Oracle所有的配置参数

select username,server from v$session查看所有的session以及它们的状态
select * from v$dispatcher;
查看当前共享服务的监听以及状态
select * from v$shared_server;
查看当前shareserver线程的状态

select name, (busy / (busy + idle))*100 "Dispatcher % busy Rate" from V$DISPATCHER

在命令行下输入

lsnrctl services 可查看所有监听服务的状态以及连接数量

正确的监听连接显示如下

  正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))

服务摘要..

服务 "PLSExtProc" 包含 1 个例程。

  例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...

    处理程序:

      "DEDICATED" 已建立:0 已被拒绝:0

         LOCAL SERVER

服务 "RMS01_XPT" 包含 1 个例程。

  例程 "rms01", 状态 READY, 包含此服务的 2 个处理程序...

    处理程序:

      "DEDICATED" 已建立:8 已拒绝:0 状态:ready

         LOCAL SERVER

      "D000" 已建立:59 已被拒绝:0 当前: 57 最大: 1002 状态: ready

         DISPATCHER

         (ADDRESS=(PROTOCOL=tcp)(HOST=gate2)(PORT=1685))

服务 "rms01" 包含 1 个例程。

  例程 "rms01", 状态 READY, 包含此服务的 2 个处理程序...

    处理程序:

      "DEDICATED" 已建立:8 已拒绝:0 状态:ready

         LOCAL SERVER

      "D000" 已建立:59 已被拒绝:0 当前: 57 最大: 1002 状态: ready

         DISPATCHER

         (ADDRESS=(PROTOCOL=tcp)(HOST=gate2)(PORT=1685))

命令执行成功

D000建立的连接说明的,当前共享模式下的连接已经配置成功。

4、对Oracle所使用内存SGA的配置:

SGA的内存配置建议为系统内存的55%;

配置完成需要重启oracle数据库

sql>shutdown;

sql>startup;

5、其他参数说明:

共享池(SHARED_POOL):用于缓存最近被执行的SQL语句和最近被使用的数据定义

缓冲区高速缓存(DB_CACHE):用于缓存从数据文件中检索出来的数据块。可以大大提高查询和更新数据的性能。使用LRU算法进行管理

大型池(LARGE_POOL)

只用于shared server环境。可以减轻共享池的负担,可以为备份、恢复等操作来使用,不使用LRU算法来管理.

Java (JAVA_POOL):为Java命令的语法分析提供服务,在安装和使用Java的情况下使用.

 

Program Global Area(PGA)

PGA是为每个连接到Oracle database的用户进程保留的内存。

Program Global Area(PGA)

PGA存储一个服务器进程或后台进程的数据和控制信息,并且只能由一个进程使用。它在进程创建时分配,在进程结束时被收回。

6、一般这些参数配置经验值:

设置SGA内存大小的经验公式:(作为参考)
      SGA = 55%
物理内存
      Shared pool = 45% SGA
      Buffer cache = 45% SGA
      Redo Log Cache = 10% SGA

7、SGA设置原则:

  • <!--[if !supportLists]--> Data Buffer cache一般可以尽可能的大   
  • Shared_pool 应该适度
  • log buffer 1MB 以内就可以了

假定oracle 32 bit ,服务器RAM大于2G ,注意你的PGA的情况,,则建议 shared_pool_size + data buffer +large_pool_size + java_pool_size < 1.6G

再具体化,如果512M RAM 建议 shared_pool_size = 50M, data buffer = 200M

如果1G RAM shared_pool_size = 100M , data buffer = 500M

如果2G RAM shared_pool_size = 150M ,data buffer = 1.2G

可以通过设置pre_page_sga=true,使得数据库启动的时候就把所有内存页装载,这样可能起到一定的作用。

alter system set timed_statistics = true

8、查看关于SGA的一些常用信息

下面的视图提供了关于SGA组件和他们的动态大小的信息:

视图

描述

V$SGA

显示关于SGA的摘要信息.

V$SGAINFO

显示关于SGA的大小信息,包括不同SGA组件的大小信息,内存颗粒大小,和自由内存空间

V$SGASTAT

显示SGA的详细信息.

V$SGA_DYNAMIC_COMPONENTS

显示SGA组件的信息.此视图摘要了从实例启动以来所有SGA大小调整操作信息.

V$SGA_DYNAMIC_FREE_MEMORY

显示为将来调整SGA大小可用的自由内存空间.

V$SGA_RESIZE_OPS Displays

关于最近400条碗橱大额SGA大小调整操作的信息.

V$SGA_CURRENT_RESIZE_OPS

显示当前进行中的关于SGA大小调整的操作信息.一个调整操作是SGA组件的动态增大或减小。

 

查询动态性能视图

SELECT SUM(value) FROM V$SGA
SELECT CURRENT_SIZE FROM V$SGA_DYNAMIC_FREE_MEMORY

9、文件中常用参数说明:

job_queue_processesoracle任务队列数量,不一定越大越好

Dispatchers:开启后Oracle可自动设置

pga_aggregate_target决定可以由所有服务器进程使用的内存的总量

open_cursors打开光标数

processes同时连接的进程数

db_block_size数据库块大小,Oracle默认块为2KB,太小了,因为如果我们有一个8KB的数据,则2KB块的数据库要读4次盘,才能读完,而8KB块的数据库只要1次就读完了,大大减少了I/O操作。数据库安装完成后,就不能再改变db_block_size的值了,只能重新建立数据库并且建库时,要选择手工安装数据库

db_file_multiblock_read_count

影响Oracle在执行全表扫描时一次读取的block的数量

Oracle最多每次IO能够读取128Block,由于block_size8k,也就是每次最多读取了1M数据. Oracle一次IO能读取多少block还和很多因素有关,比如存储是否连续,磁盘是否经过条带等方式划分,并且Oracle的单次IO读取不能跨越Extent边界等.某些平台还和操作系统的参数设置有关.

10、修改方法

修改文件后的,对该文件的加载步骤(使该文件生效的方法):

Sqlplus sys/sys as sysdba

SQL> shutdown abort;

SQL> create spfile from pfile='E:\oracle\product\10.2.0\admin\RMS\pfile\init.ora.2302007162934';

SQL> startup;

通过命令行修改参数的方法:

:

Sql>alter system set job_queue_processes=50

11、其它部分可以调优的地方

SQL语句的效率:

我们可以调整应用程序的SQL质量:

1.不要进行全表扫描(Full Table Scan):全表扫描导致大量的I/O

2.尽量建好和使用好索引:建索引也是有讲究的,在建索引时,也不是索引越多越好,当一个表的索引达到4个以上时,ORACLE的性能可能还是改善不了,因为OLTP系统每表超过5个索引即会降低性能,而且在一个sql 中, Oracle 从不能使用超过 5个索引;当我们用到GROUP BYORDER BY,ORACLE就会自动对数据进行排序,ORACLEINIT.ORA中决定了sort_area_size区的大小,当排序不能在我们给定的排序区完成时,ORACLE就会在磁盘中进行排序,也就是我们讲的临时表空间中排序, 过多的磁盘排序将会令 free buffer waits 的值变高,而这个区间并不只是用于排序的,对于开发人员我提出如下忠告:

1)select,update,delete 语句中的子查询应当有规律地查找少于20%的表行.如果一个语句查找的行数超过总行数的20%,它将不能通过使用索引获得性能上的提高.   

2)、索引可能产生碎片,因为记录从表中删除时,相应也从表的索引中删除.表释放的空间可以再用,而索引释放的空间却不能再用.频繁进行删除操作的被索引的表,应当阶段性地重建索引,以避免在索引中造成空间碎片,影响性能.在许可的条件下,也可以阶段性地truncate,truncate命令删除表中所有记录,也删除索引碎片.

3)、在使用索引时一定要按索引对应字段的顺序进行引用。

4)、用(+)比用NOT IN更有效率


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25736250/viewspace-703391/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2011-04-24

  • 博文量
    34
  • 访问量
    54194