如果你有一个苹果,我有一个苹果,我们交换以后还是一人一个苹果,但如果你有一种思想,我有一种思想,我们交换以后,每个人便拥有了两种思想。

发布新日志

  • 通过sqlnet.ora文件限制ip访问

    2008-09-06 11:28:14

    在Oracle数据库中,我们可以通过SQLNET.ora文件实现地址访问限制。
    在SQLNET.ora文件中设置以下参数可以实现IP访问限制:

    tcp.validnode_checking=yes
    tcp.invited_nodes=(ip1,ip2......)
    tcp.excluded_nodes=(ip1,ip2......)

    在未设置这些参数前,测试数据库可以正常访问:

    D:\>tnsping eygle
    TNS Ping Utility for 32-bit Windows: Version 10.2.0.3.0 - Production on 28-1月 -2008 14:52:52
    Copyright (c) 1997, 2006, Oracle. All rights reserved.

    已使用的参数文件,:
    C:\oracle\10.2.0\network\admin\sqlnet.ora

    已使用 TNSNAMES 适配器来解析别名
    Attempting to contact (DEscrīptION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.33.11)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = eygle)))
    OK (30 毫秒)

    当设置参数之后:

    [oracle@jumper admin]$ cat sqlnet.ora
    # SQLNET.ORA Network Configuration File: /opt/oracle/product/9.2.0/network/admin/sqlnet.ora
    # Generated by Oracle configuration tools.

    NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)

    tcp.validnode_checking=yes
    tcp.invited_nodes=(172.16.33.11,172.16.34.89)

    重新启动监听器使设置生效:

    [oracle@jumper admin]$ lsnrctl start

    LSNRCTL for Linux: Version 9.2.0.4.0 - Production on 28-JAN-2008 14:42:01
    Copyright (c) 1991, 2002, Oracle Corporation. All rights reserved.
    Starting /opt/oracle/product/9.2.0/bin/tnslsnr: please wait...

    TNSLSNR for Linux: Version 9.2.0.4.0 - Production
    System parameter file is /opt/oracle/product/9.2.0/network/admin/listener.ora
    Log messages written to /opt/oracle/product/9.2.0/network/log/listener.log
    Trace information written to /opt/oracle/product/9.2.0/network/trace/listener.trc
    Listening on: (DEscrīptION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.33.11)(PORT=1521)))

    Connecting to (DEscrīptION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.16.33.11)(PORT=1521)))
    STATUS of the LISTENER
    ------------------------
    Alias LISTENER
    Version TNSLSNR for Linux: Version 9.2.0.4.0 - Production
    Start Date 28-JAN-2008 14:42:01
    Uptime 0 days 0 hr. 0 min. 0 sec
    Trace Level support
    Security ON
    SNMP OFF
    Listener Parameter File /opt/oracle/product/9.2.0/network/admin/listener.ora
    Listener Log File /opt/oracle/product/9.2.0/network/log/listener.log
    Listener Trace File /opt/oracle/product/9.2.0/network/trace/listener.trc
    Listening Endpoints Summary...
    (DEscrīptION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.33.11)(PORT=1521)))
    Services Summary...
    Service "eygle" has 1 instance(s).
    Instance "eygle", status UNKNOWN, has 1 handler(s) for this service...
    Service "julia" has 1 instance(s).
    Instance "eygle", status UNKNOWN, has 1 handler(s) for this service...
    The command completed successfully

    我们再来看客户端的访问:

    D:\>tnsping eygle
    TNS Ping Utility for 32-bit Windows: Version 10.2.0.3.0 - Production on 28-1月 -2008 14:53:19
    Copyright (c) 1997, 2006, Oracle. All rights reserved.

    已使用的参数文件:
    C:\oracle\10.2.0\network\admin\sqlnet.ora

    已使用 TNSNAMES 适配器来解析别名
    Attempting to contact (DEscrīptION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.33.11)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = eygle)))
    TNS-12547: TNS: 丢失连接


    需要注意的是一定要将本地地址,或者Cluster群集其他节点的地址都加入到允许列表,否则监听器可能无法启动。
    修改参数之后,重启监听器设置即可生效。

    通过监听器的限制,通常属于轻量级,比在数据库内部通过触发器进行限制效率要高。

  • Oracle操作中常见的错误及解决方法

    2008-01-22 09:00:38

    1.ORA-01650:unable to extend rollback segment NAME by NUM intablespace NAME

    错误的产生原因:上述ORACLE错误为回滚段表空间不足引起的,这也是ORACLE数据管理员最常见的ORACLE错误信息。当用户在做一个非常庞大的数据操作导致现有回滚段的不足,使可分配用的回滚段表空间已满,无法再进行分配,就会出现上述的错误。

    解决方法:使用“ALTER TABLESPACE tablespace_name ADD DATAFILE filename SIZE size_of_file”命令向指定的数据增加表空间,根据具体的情况可以增加一个或多个表空间。当然这与还与你主机上的裸盘设备有关,如果你主机的裸盘设备已经没有多余的使用空间,建议你不要轻意的增加回滚段表空间的大小,可使用下列的语句先查询一下剩余的tablespace空间有多少:

    Select user_name,sql_text from V$open_cursor 
    where user_name=’<user_name>’;

    如果多余的空间比较多,就可以适当追加一个大的回滚段给表空间使用,从而避免上述的错误。你也可以用以下语句来检测一下rollback segment的竞争状况:

    Select class,count from V$waitstat where calss in(‘system undo header’,’
    system undo block’,’undo header’,’undo block’);

      和

    Select sum(value) from V$sysstat where name in 
    (‘db_block_gets’,’consistents gets’);

    如果任何一个class in count/sum(value)大于1%,就应该考虑增加rollback segment。

    ORA-01652:unable to extend temp segment by num in tablespace name

    错误产生的具体原因:ORACLE临时段表空间不足,因为ORACLE总是尽量分配连续空间,一但没有足够的可分配空间或者分配不连续就会出现上述的现象。

    解决方法:我们知道由于ORACLE将表空间作为逻辑结构-单元,而表空间的物理结构是数据文件,数据文件在磁盘上物理地创建,表空间的所有对象也存在于磁盘上,为了给表空间增加空间,就必须增加数据文件。先查看一下指定表空间的可用空间,使用视图SYS.DBA_FREE_SPACE,视图中每条记录代表可用空间的碎片大小:

    SQL>Select file_id,block_id,
    blocks,bytes from sys.dba_free_space 
    where tablespace_name=’<users>’;

    返回的信息可初步确定可用空间的最大块,看一下它是否小于错误信息中提到的尺寸,再查看一下缺省的表空间参数:

    SQL>SELECT INITIAL_EXTENT,NEXT_EXTENT,MIN_EXTENTS,
    PCT_INCREASE FROM SYS.DBA_TABLESPACES WHERE 
    TABLESPACE_NAME=name;

    通过下面的SQL命令修改临时段表空间的缺省存储值:

    SQL>ALTER TABLESPACE name DEFAULT STORAGE (INITIAL XXX NEXT YYY);

    适当增大缺省值的大小有可能解决出现的错误问题,也可以通过修改用户的临时表空间大小来解决这个问题:

    SQL>ALTER USER username TEMPORARY TABLESPACE new_tablespace_name;
  • Sql语句关外连接查询

    2007-11-01 13:12:47

    外连接
     [例]外连接实例
    create table students
       (
              st_id    varchar(20),
              name  varchar(10),
              age      int,
              tol_score  int
        );

        insert into students values('973231','wangbindu',22,501);
        insert into students values('973232','zhuzhijing',21,538);
        insert into students values('973233','gaojing',21,576);

     

      create table student_skill
       (
          st_id  varchar(20),
          skill    varchar(20)
       );


        insert into student_skill values('973231','篮球');
        insert into student_skill(st_id) values('973232');
        insert into student_skill values('973233','足球');

       select a.* , b.skill from students a,student_skill b where a.st_id=b.st_id
    order by a.st_id;


    select students.st_id , students.name , students.age , students.tol_score , student_skill.skill from
    students,student_skill where students.st_id=student_skill.st_id;

  • Sql语句关于子查询

    2007-11-01 09:53:39

    将子查询(as subquery)或in或exists当成where的一个条件的一部分,这样的查询称为子查询
      .where中可以包含一个select语句的子查询
      .where中可以包含in,exists语句
      .最多可以嵌套16层
      .层次过多会影响性能
      [例]简单子查询实例
       create table univ_subject
        (
           name            varchar(12) not null,
           per_id          int    not null,
           dept_name       varchar(20)            
          );


    insert into univ_subject  values('gaoqianjing',1001,'信息工程系');
    insert into univ_subject  values('wangbing',1002,'物理系');
    insert into univ_subject  values('liming',1003,'化学系');


     create table  colle_subject
      ( colle_name    varchar(20),
        per_id         int);

      insert into colle_subject values('电子研究所',1001);
      insert into colle_subject values('物理研究所',1005);

    查询两表中字段 per_id 内容相同的
    select name,per_id,dept_name from univ_subject where per_id in
    (select per_id from colle_subject);

  • Sql语句关于子查询

    2007-11-01 09:49:50

    将子查询(as subquery)或in或exists当成where的一个条件的一部分,这样的查询称为子查询
      .where中可以包含一个select语句的子查询
      .where中可以包含in,exists语句
      .最多可以嵌套16层
      .层次过多会影响性能
       [例]简单子查询实例
        create table univ_subject
        (
              name                 varchar(12) not null,
              per_id                int     not null,
             dept_name             varchar(20)             
        );


       insert into univ_subject  values('gaoqianjing',1001,'语文);
       insert into univ_subject  values('wangbing',1002,'物理');
       insert into univ_subject  values('liming',1003,'化学');
     
       create table  colle_subject
       (
              colle_name    varchar2(20),
              per_id              number 
        );


         insert into colle_subject values('理工',1001);
         insert into colle_subject values('文史',1005);
       
        select name,per_id,dept_name from univ_subject where per_id in 
         (select per_id from colle_subject);


     

  • 关系型数据库性能测试参考指标----DB2

    2007-07-02 11:30:12

    DB2

    注:以下指标取DB2的运行状况指示器所包含的各项指标。

    指标名称

    指标描述

    指标范围

    指标单位

    1.表空间存储器运行状况指示器

    自动调整大小

    表空间利用率 (ts.ts_util_auto_

    Resize %)

    该指标用来跟踪每个DMS表空间的存储器消耗情况,这些DMS表空间已经定义了最大大小,并且可以自动调整大小,达到最大大小时,则认为DMS表空间已满。

    该指标是用消耗的最大表空间存储器所占的百分比度量的。高百分比指示表空间接近已满程度。该指标的附加信息中包括的短期增长率和长期增长率可用来确定,当前增长率是短期畸变还是与长期增长一致。附加信息中对离空间已满所余时间的计算可以预测达到最大大小所余的时间。

    %

    表空间利用率

    (ts.ts_util %)

    如果在表空间上没有启用自动调整大小,则可用该指标来跟踪每个DMS表空间的存储器消耗情况;反之,DB2不会评估该指标。

     

    该指标以消耗空间的百分比来度量。高百分比指示未达到该指标的最优运行状况。该指标的附加信息中包括的短期增长率和长期增长率可用来确定,当前增长率是短期畸变还是与长期增长一致。附加信息中对离空间已满所余时间的计算可以预测达到最大大小所余的时间。

     

    %

    表空间容器利用率

    (ts.ts_op_status %)

    该指标用来跟踪未使用自动存储器的每个SMS表空间的存储器消耗情况。如果对其定义容器的任何文件系统上都没有更多空间,则认为SMS表空间已满。如果文件系统上没有可用空间可供扩展SMS容器,则表示关联表空间已满。

    该指标以消耗空间的百分比来度量。高百分比指示未达到该指标的最优运行状况。该指标的附加信息中包括的短期增长率和长期增长率可用来确定,当前增长率是短期畸变还是与长期增长一致。附加信息中对离空间已满所余时间的计算可以预测达到最大大小所余的时间。

     

    %

    2排序运行状况指示器

    专用排序内存利用率

    (db2.sort_privmem_

    Util %)

    该指标用来跟踪专用排序内存的利用率。

     

    如果该指标的值等于或超过100%,则说明已达到了排序堆阀值,没有足够的堆空间可用于执行排序。“阀值后排序数”快照监视元素可在调整该指标值时作为参考。该监视元素记录了超过排序堆阀值后请求堆的排序数。

    %

    共享排序内存利用率

    (db2.sort_shrmem_

    Util %)

    该指标用来跟踪共享排序内存的利用率。

     

    如果该指标的值等于或超过100%,则说明已达到了排序堆阀值,没有足够的堆空间可用于执行排序。

    建议使用自调整内存功能,以根据当前工作负载的需要自动分配排序内存资源。

    %

    溢出排序百分比

    (db.spilled_sorts %)

    该指标值是指用完排序堆后可能需要磁盘空间以供临时存储器使用的总排序数占已执行的排序总数的利率。

    该指标值应为0,因为溢出至磁盘的排序可能导致严重的性能下降。

    建议使用自调整内存功能,以根据当前工作负载的需要自动分配排序内存资源。

    %

    3日志记录运行状况指示器

    日志利用率

    (db.log_util %)

    该指标用来跟踪在数据库中使用的总活动日志空间量。

    该指标以消耗空间的百分比来度量。高百分比指示空间消耗接近已满程度。这时可调整一些与日志有关的数据库配置参数的值。这些参数的值显示在附加信息中。

     

    %

    日志文件系统利用率

    (db.log_fs_util %)

    该指标用来跟踪事务日志所在的文件系统的充满程度。如果文件系统上没有空间,则DB2可能无法创建新的日志文件。

    该指标以消耗空间的百分比来度量。高百分比指示文件系统中的可用空间量已接近于0。这时可调整一些与日志有关的数据库配置参数的值。这些参数的值显示在附加信息中。

    %

    4应用程序并发性运行状况指示器

    死锁率

    (db.deadlock_rate%)

    该指标用来跟踪死锁出现在数据库上的比率以及应用程序遇到争用问题的等级。

    该指标值应为0,该值越高,则争用等级就越高。

    %

    锁定列表利用率

    (db.locklist_util %)

    该指标用来跟踪要使用的锁定列表内存量。每个数据库有一个锁定列表,锁定列表包含由同时连接至数据库的所有应用程序挂起的锁定。这是对锁定列表内存设置的限制。一旦达到该限制,就会因为下列情况而使得性能下降:

    1)   锁定升级将行锁定转换为表锁定,从而降低了数据库中的共享对象的并行性;

    2)   因为应用程序等待有限数目的表锁定,所以应用程序间会出现更多死锁。因此将回滚事务。

    该指标以消耗内存的百分比来度量,出现高百分比表示状况不佳。

    建议使用自调整内存功能,以根据当前工作负载的需要自动分配排序内存资源。

    %

    等待锁定的应用程序的百分比

    (db.apps_waiting

    _locks %)

    该指标度量所有当前执行的等待锁定的应用程序所占的百分比。

    高百分比可能指示应用程序遇到并行性问题,这对性能有负面影响。

    %

    5程序包和目录高速缓存,以及工作空间运行状况指示器

    目录高速缓存命中率

    (db.catcache

    _hitratio %)

    该指标用于指示目录高速缓存对避免对磁盘上的目录的实际访问所起到的帮助作用。

    高命中率指示在避免实际磁盘I/O访问方面很成功。

    %

    程序包高速缓存

    命中率

    (db.pkgcache

    _hitratio %)

    该指标用于指示程序包高速缓存对避免从系统目录重新装入静态SQL的程序包和段以及避免重新编译动态SQL语句所起到的帮助作用。

    高命中率指示在避免从系统目录重新装入静态SQL的程序包和段以及避免重新编译动态SQL语句方面很成功。

    %

    共享工作空间

    命中率

    (db.shrworkspace

    _hitratio %)

    该指标用于指示共享SQL工作空间对避免初始化要执行的SQL语句的各段所起到的帮助作用。

     

    高命中率指示在避免初始化要执行的SQL语句的各段方面很成功。

    %

    6.内存运行状况指示器

    数据库堆利用率

    (db.db_heap_util %)

    该指标用来跟踪基于带有标识SQLM_HEAP_DATABASE的内存池的监视器堆内存的消耗。

    一旦此百分比达到最大值100%,查询和操作可能会因为没有堆可用而失败。

    %

  • 关系型数据库性能测试参考指标----Oracle

    2007-07-02 11:27:31

    Oracle

    注:以下指标取Oracle的性能分析工具Statspack所提供的性能分析指标。

    指标名称

    指标描述

    指标范围

    指标单位

    1.关于实例效率(Instance Efficiency Percentages)的性能指标

    缓冲区未等待率

    (Buffer Nowait %)

    指在缓冲区中获取Buffer的未等待比率。

    该指标的值应接近100%,如果该值较低,则可能要增大buffer cache

    %

    Redo缓冲区未等待率

    (Redo NoWait %)

    指在Redo缓冲区获取Buffer的未等待比率。

    该指标的值应接近100%,如果该值较低,则有2种可能的情况:

    1.online redo log没有足够的空间;

    2.log切换速度较慢。

    %

    缓冲区命中率

    (Buffer Hit %)

    指数据块在数据缓冲区中的命中率。

    该指标的值通常应在90%以上,否则,需要调整。如果持续小于90%,可能要加大db_cache_size。但有时,缓存命中率低并不意味着cache设置小了,可能是潜在的全表扫描降低了缓存命中率。

    %

    内存排序率

    (In-memory Sort %)

    指排序操作在内存中进行的比率。当查询需要排序的时候,数据库会话首先选择在内存中进行排序,当内存大小不足的时候,将使用临时表空间进行磁盘排序,但磁盘排序效率和内存排序效率相差好几个数量级。

    该指标的值应接近100%,如果指标的值较低,则表示出现了大量排序时的磁盘I/O操作,可考虑加大sort_area_size参数的值。

    %

    共享区命中率

    (Library Hit %)

    该指标主要代表sql在共享区的命中率。

    该指标的值通常应在95%以上,否则需要考虑加大共享池(修改shared_pool_size参数值),绑定变量,修改cursor_sharing等参数。

    %

    软解析的百分比

    (Soft Parse %)

    该指标是指Oraclesql的解析过程中,软解析所占的百分比。软解析(soft parse)是指当Oracle接到Client提交的Sql后会首先在共享池(Shared Pool)里面去查找是否有之前已经解析好的与刚接到的这一个Sql完全相同的Sql。当发现有相同的Sql就直接用之前解析好的结果,这就节约了解析时间以及解析时候消耗的CPU资源。

    该指标的值通常应在95%以上,如果低于80%,那么就可能sql基本没被重用,sql没有绑定变量,需要考虑绑定变量。

    %

    命中率

     (Latch Hit %)

    获得Latch的次数与请求Latch的次数的比率

     

    该指标的值应接近100%,如果低于99%,可以考虑采取一定的方法来降低对Latch的争用。

    %

    SQL语句执行与

    解析的比率

    (Execute to Parse %)

    SQL语句执行与解析的比率。SQL语句一次解析后执行的次数越多,该比率越高,说明SQL语句的重用性很好。

     

    该指标的值应尽可能到高,如果过低,可以考虑设置
    session_cached_cursors
    参数。

    %

    共享池内存使用率

    (Memory Usage %)

    该指标是指在采集点时刻,共享池(share pool)内存被使用的比例。

    这指标的值应保持在75%~90%,如果这个值太低,就浪费内存,如果太高,会使共享池外部的组件老化,如果SQL语句被再次执行,则就会发生硬分析。

    %

    2.关于等待事件(Wait events)的性能指标

    文件分散读取

    (db file scattered read (cs))

    该等待事件通常与全表扫描有关。因为全表扫描是被放入内存中进行的进行的,通常情况下它不可能被放入连续的缓冲区中,所以就散布在缓冲区的缓存中。

    如果这个等待事件比较显著,可能说明对于某些全表扫描的表,没有创建索引或没有创建合适的索引。尽管在特定条件下执行全表扫描可能比索引扫描更有效,但如果出现这种等待时,最好检查一下这些全表扫描是否必要。

    厘秒

    文件顺序读取

    (db file sequential read (cs))

    该等待事件通常与单个数据块相关的读取操作有关。

    如果这个等待事件比较显著,可能表示在多表连接中,表的连接顺序存在问题,或者可能不合适地使用了索引。对于大量事务处理、调整良好的系统,这一数值大多是很正常的,但在某些情况下,它可能暗示着系统中存在问题。应检查索引扫描,以保证每个扫描都是必要的,并检查多表连接的连接顺序。另外DB_CACHE_SIZE 也是这些等待出现频率的决定因素。

    厘秒

    缓冲区忙

    (buffer busy (cs))

    当一个会话想要访问缓存中的某个块,而这个块正在被其它会话使用时,将会产生该等待事件。这时候,其它会话可能正在从数据文件向缓存中的这个块写入信息,或正在对这个块进行修改。

    出现这个等待事件的频度不应大于1%如果这个等待事件比较显著,则需要根据等待事件发生在缓存中的哪一块(如字段头部、回退段头部块、回退段非头部块、数据块、索引块等),采取相应的优化方法。

     

    厘秒

     

    (enqueue (cs))

    enqueue 是一种保护共享资源的锁定机制。该锁定机制保护共享资源,如记录中的数据,以避免两个人在同一时间更新同一数据。enqueue 包括一个排队机制,即FIFO(先进先出)排队机制。注意:Oracle latch 机制不是FIFOEnqueue 等待通常指的是ST enqueueHW enqueueTX4 enqueue TM enqueue

    如果enqueue等待事件比较显著,则需要根据enqueue等待类型,采取相应的优化方法。

    厘秒

    闩释放

    (latch free (cs))

    该等待事件意味着进程正在等待其他进程已持有的latch

    latch是一种低级排队机制(它们被准确地称为相互排斥机制),用于保护系统全局区域(SGA)中共享内存结构。latch 就像是一种快速地被获取和释放的内存锁。latch 用于防止共享内存结构被多个用户同时访问。

    对于常见的Latch等待通常的解决方法:

    1Share pool latch:在OLTP应用中应该更多的使用绑定变量以减少该latch的等待。

    2Library cache latch:同样的需要通过优化sql语句使用绑定变量减少该latch的等待。

    厘秒

    日志文件同步

    (log file sync (cs))

    这个等待事件是指当一个会话完成一个事务(提交或者回滚数据)时,必须等待LGWR进程将会话的redo信息从日志缓冲区写到日志文件后,才能继续执行下去。

    这个等待事件的时间过长,可能是因为commit太频繁或者lgwr进程一次写日志的时间太长(可能是因为一次log io size太大),可调整 _log_io_size,结合log_buffer,使得 (_log_io_size*db_block_size)*n = log_buffer,这样可避免和增大log_buffer引起冲突,或者可以将日志文件存放在高速磁盘上

    厘秒

  • 关系型数据库性能测试参考指标----SQL Server

    2007-07-02 11:02:00

    SQL Server

    注:以下指标取自SQL Server自身提供的性能计数器。

    指标名称

    指标描述

    指标范围

    指标单位

    1SQL Server中访问方法(Access Methods)对象包含的性能计数器

    全表扫描/

    (Full Scans/sec)

    每秒全表扫描的数量。全表扫描可以是基本表扫描或全索引扫描。由于全表扫描需要耗费大量时间,因此全表扫描的频率过高的话,会影响性能。

    如果该指标的值比12高,应该分析设计的查询以确定是否确实需要全表扫描,以及SQL查询是否可以被优化。

    次数/

    2SQL Server中缓冲器管理器(Buffer Manager)对象包含的性能计数器

    缓冲区高速缓存命中率 (Buffer Cache

    Hit Ratio %

    指在缓冲区高速缓存中找到而不需要从磁盘中读取的页的百分比。该比率是缓存命中总次数与缓存查找总次数之比。经过很长时间后,该比率的变化很小。由于从缓存中读取数据比从磁盘中读取数据的开销小得多,一般希望该比率高一些。

    该指标的值最好为90% 或更高。通常可以通过增加 SQL Server 可用的内存数量来提高该指标的值。增加内存直到这指标的值持续高于90%,表示90% 以上的数据请求可以从数据缓冲区中获得所需数据。

    %

    读的页/

    (Page Reads/sec)

    指每秒发出的物理数据库页读取数。该指标主要考察数据库从磁盘读取数据的频率。因为物理I/O 会耗费大量时间,所以应尽可能地减少物理I/O 以提高性能。

    该指标的值应尽可能的小。可以通过使用更大的数据高速缓存、智能索引、更高效的查询或者改变数据库设计等方法,以降低该指标的值。

    个数/

    写的页/

    (Page Writes/sec)

    指每秒执行的物理数据库写的页数。该指标主要考察数据库向磁盘写入数据的频率。因为物理I/O 会耗费大量时间,所以应尽可能地减少物理I/O 以提高性能。

    该指标的值应尽可能的小。可以通过使用更大的数据高速缓存、智能索引、更高效的查询或者改变数据库设计等方法,以降低该指标的值。

    个数/

    惰性写/

    (Lazy Writes/sec)

    指每秒被缓冲区管理器的惰性编写器写入的缓冲区数。惰性编写器是一个系统进程,用于成批刷新脏的老化的缓冲区(包含更改的缓冲区,必须将这些更改写回磁盘,才能将缓冲区重用于其他页),并使它们可用于用户进程。

    该指标的值最好为0

    个数/

    3SQL Server中高速缓存管理器(Cache Manager)对象包含的性能计数器

    高速缓存命中率 (Cache Hit Ratio %

    指高速缓存命中次数和查找次数的比率。在SQL Server中,Cache包括Log CacheBuffer Cache以及Procedure Cache,该指标是指所有Cache的命中率,是一个总体的比率。

    该指标的值越高越好。如果该指标的值持续低于80%,就需要增加更多的内存。

    %

    4SQL Server中闩(Latches)对象包含的性能计数器

    平均闩等待

    时间(毫秒)

    (Average Latch

    Wait Time(ms))

    指一个SQL Server线程必须等待一个闩的平均时间。

    如果该指标的值很高,则系统可能正经历严重的资源竞争问题。

    毫秒

    闩等待/

    (Latch Waits/sec)

    指在一个闩上每秒的平均等待数量。

    如果该指标的值很高,则系统可能正经历严重的资源竞争问题。

    个数/

    5SQL Server中锁(Locks)对象包含的性能计数器

    死锁的数量/

    (Number of Deadlocks/sec)

    每秒导致死锁的锁请求数。

    锁加在SQL Server资源上(如在一个事务中进行的行读取或修改),以防止多个事务并发使用资源。应尽可能少使用锁以提高事务的并发性,从而改善性能。

    个数/

    平均等待时间(毫秒)

    (Average Wait

    Time(ms))

    线程等待某种类型的锁的平均等待时间。

    同上

    毫秒

    锁请求/

    (Lock Requests/sec)

    指每秒钟某种类型的锁请求的数量。

    同上

    个数/

  • Oracle优化

    2007-06-28 12:58:16

    数据库系统和操作系统一样,在计算机上安装成功后,还需要进一步配置和优化,从而使其具有更强大的功能和运行在最佳状态。如果在设计阶段因为各种因素没有进行较为合理的配置和计划,那么就需要在后期对数据库系统进行优化。

      数据库系统性能的优化,除了在设计阶段对其逻辑存储结构和物理存储结构设计进行优化,使之在满足需求条件下,时空开销性能最佳外,还可在运行阶段,采取一些优化措施,使系统性能最佳。本专题所讨论的性能优化主要指运行阶段的性能优化,即讨论如何使用Oracle所提供的优化手段来提高系统性能。大多数性能问题并不是一种孤立的症状,而是系统设计的结果,因此性能优化就集中在那些导致不可接受特征的同一的、固定的和潜在的问题上。优化是数据库设计中“计划”、“设计”、“监视”和“优化”四大步骤的最后一步。 除了用Oracle优化器来优化数据库的性能外,DBA还可通过优化Oracle的参数设置等手段来优化数据库的性能,对参数的细微优化便能影响系统整体性能。

      为了有目的优化系统性能,首先应明确优化目标,然后再根据目标优化各种初始参数的设置,以达到更好效果。可有如下几个优化目标:
      ◆ 应用程序设计的优化
      ◆ 指定类型SQL语句的优化
      ◆ 内存使用的优化
      ◆ 数据存储、物理存储和逻辑存储的优化
      ◆ 网络通信量的优化
      DBA可选定上述一个或多个目标来实施优化。性能优化主要是通过优化初始化参数来实现。本专题从以下几个方面来谈谈如何优化Oracle数据库,使其具有最佳性能。
      (1)优化初始参数
      (2)优化内存
      (3)优化I/O
      (4)优化资源争用
      (5)其它参数优化 可变参数的优化
      在对Oracle数据库进行优化时,需要用到许多的参数,其中有一部分参数对系统性能影响较大,这部分参数叫可变参数。可变参数按其作用可以分为两大类,一大类是起限制作用的,如OPEN_CURSORS;另一大类是影响系统性能的,如DB_BLOCK_BUFFERS。
      在进行数据库系统性能优化时,需要熟练掌握和了解一些可变参数。本文讨论了一些对系统性能有较大影响的参数。
      限制类可变参数
      (1)DML_LOCKS
      该参数表明多少个用户,可同时能修改多少张表。例如:有三个用户同时修改二张表,则要求表上的总数为6。若置为0,则组织队列不起作用,其性能会稍有提高。使用该参数时不能用DROP TABLE、CREATE INDEX或显式封锁。
      (2)LICENSE_MAX_SESSION
      该参数指出允许并发用户会话的最大数。若此参数为0,则不能实施并发。若并发的用户会话数已达到此极限,则只有具有RESTRICTED SESSION权限的用户才能连接到服务器。
      (3)LICENSE_MAX_USERS
      该参数指出在一个数据库上可建立的最大用户数。当达到最大值时,便不能再建新用户,可改变此值以放松限制。在LICENSE_MAX_SESSION或LICENSE_MAX_USER为0时,则并发会话或任何用户都不能用。若对不同的实例,此参数不同时,则以第一个登录的数据库实例的参数为准。
      (4)MAX_DUMP_FILE_SIZE
      该参数指定操作系统中写跟踪文件的块的最大值。可用此值来限制跟踪文件的空间。
      (5)OPEN_CURSORS
      该参数指明一个用户进程能同时打开光标的最大数,它能限制每个用户进程占用的内存空间量。
      (6)OPEN_LINKS
      该参数指定并发连接到远程数据库的最大用户进程数。若同时引用多个数据库,则应该增大该值。例如:同时交替访问A、B和C三个数据库时,若OPEN_LINKS设置为2,则需花费等待连接时间。此参数只用于分布事务。若该参数设置为0,则不允许进行分布事务处理。
      (7)PROCESS
      该参数指定同时连接到Oracle服务器上的最大用户进程数。该参数值包括6个后台进程和一个登录,因此,该参数值为20,则只能有13或14个并发用户连接到服务器。
      (8)ROW_LOCKING
      该参数指定行封锁方式。若设置为“ALWAYS”,则在修改表时只实施行封锁。若设置为“INTENT”时,则行封锁只适用于SELECT FOR UPDATE,而在修改时实施表封锁。
      影响系统性能类可变参数
      (1)CHECKPOINT_PROCESS
      该参数根据是否要求检查点而设置成TRUE或者FALSE。当所有缓冲区的信息写到磁盘时,检查点进程(CHPT)建立一个静态的点。在归档日志文件中做一个记号表示有一个检查点发生。检查点发生在归档日志转换的时候或当达到log_checkpoint_interval定义的块数的时候。当设置此参数为TRUE时,后台进程CHPT便可工作。在检查点期间内,若日志写进程(LGWR)的性能减低,则可用CHPT进程加以改善。
      (2)DB_BLOCK_CHECKPOINT_BATCH
      该参数的值设置得较大时,可加速检查点的完成。当指定的值比参数DB_BLOCK_CHECKPOINT_BATCH大时,其效果和指定最大值相同。
      (3)DB_BLOCK_BUFFERS
      该参数是在SGA中可作缓冲用的数据库块数。该参数决定SGA的大小,对数据库性能具有决定性因素。若取较大的值,则可减少I/O次数,但要求内存空间较大。每个缓冲区的大小由参数DB_BLOCK_SIZE决定。
      (4)DB_BLOCK_SIZE
      该参数表示Oracle数据库块的大小,以字节为单位,典型值为2048或4096。该值一旦设定则不能改变。它影响表及索引的FREELISTS参数的最大值。
      (5)DB_FILES
      该参数为数据库运行时可打开的数据文件最大数目。
      (6)DB_FILE_MULTIBLOCK_READ_COUNT
      该参数表示在顺序扫描时一次I/O操作可读的最大块数,该最大块数取决于操作系统,其值在4至16或者32是比较好。
      (7)D1SCRETE_TRANSACTION_ENABLED
      该参数实现一个更简单、更快的回滚机制,以改进某些事务类型的性能。 当设置为TRUE时,可改善某些类型的事务性能。
      (8)LOG_ARCHIVE_BUFFER_SIZE
      此参数的值依赖于操作系统,它与LOG_ARCHIVE_BUFFER 参数一起用于调整有归档日志的运行,使其运行速度尽量加快,但不能快到降低性能。仅当直接归档到磁带设备时才需要增加这些参数的值,重做日志缓冲区要等待归档日志缓冲区变得可用。
      (9) LOG_ARCHIVE_BUFFER
      该参数指定用于归档的日志时的缓冲区数。
      (10) LOG_BUFFER
      该参数指明分配给SGA中的日志缓冲区的字节数,该参数值较大时,可减少日志I/O的次数。对于繁忙的系统不宜采用大于或等于64K的值。缺省值—般为数据库块的4倍。
      (11)LOG_CHECKPOINT_TIMEOUT
      该参数指明两个检查点之间的时间间隔,若指定为0时,则说明不允许进行基于时间的检查点。
      (12)LOG_CHECKPOINT_INTERVAL
      该参数用来确定检查点进程的执行频率。这个数值设置成取检查点之前处理的重做缓冲区块的数量。
      (13)LOG_FILES
      该参数指定运行期间数据库可打开的日志文件数。若需要较大的SGA空间,而不需多个日志文件,则可减少该值。
      (14)LOG_SIMULTANEOUS_COPIES
      该参数是日志缓冲区副本闩锁的最大数,为同时写日志项所用。为提高性能,可设置此参数为两倍的CPU数,对单进程系统,该值多数设置为0,此时断开闩锁。
      (15)LOG_SMALL_ENTRY_MAX_SIZE
      该参数与LOG_SIMULTANEOUS_COPIES参数配合使用。若日志项大于此项,则在给缓冲区分配空间并获得日志复制闩锁之后,用户进程释放日志复制闩锁。
      (16)OPTIMIZRER_MODE
      若该参数的值为RULE,则ORACLE优化器选择基于规则的优化;若设置为COST,并且在数据字典中存在有统计信息,则优化器选择基于代价的优化方法进行优化。
      (17)SEQUENCE_CACHE_ENTRIES
      该参数指明在SGA中可进行高速缓存的序列数,用于直接存取。该高速缓存区是基于最近最少使用(LRU)的算法进行管理的。若此值设置得较高,则可达到较高的并发性。
      (18)SEQUENCE_CACHE_HASH_BUCKETS
      该参数用于加速查看高速缓冲区最近请求的最新序列的桶式地址数,每个桶式地址占8个字节。高速缓冲区以散列表排列,该参数应为质数。
      (19)SERIALIZEABLE
      此参数用于保证重复读的一致性。当它设置为TRUE时,查询可保证表级读一致,以防止在此查询提交之前的修改。
      (20)SHARED_POOL_SIZE
      该参数指定共享池的大小,其中包括共享光标及存储过程。在多用户系统中,较大的SHARED_POOL_SIZE值可改善SQL语句的执行性能,但较小的值可节省内存。
      (21)SMALL_TABLE_THRESHOLD
      该参数决定SGA中用于扫描的缓冲区的数目,若表的数目小于该值,则该表可整个地读入高速缓存区。若表大于该值,则立即重用该缓冲区。一般用缺省值可使性能最好。
      (22)SORT_AREA_TETAINED_SIZE
      这是会话内存的最大数量,用于内存排序。当从排序空间提出最后—行时,便释放该内存。若排序要较大的内存,则分配一临时段,排序便可在盘上进行。用于排序的最大总量可由SORT_AREA_SIZE指定,而不用此参数。可以分配同样大小的多个排序空间,不过一般对于复杂的查询才需要。
      (23) SORT_AREA_SIZE
       该参数用于指定进行外排序(磁盘)时所需PGA内存的最大数量,以字节为单位。当排序行写入磁盘时,该内存被释放。增大该参数的值,可改进排序效率。一般不调整该参数,除非排序量很大时才调整。
      (24) SORT_SPACEMP_SIZE
      该参数仅在排序量很大时才调整该参数。可用下式设置该参数,使排序能最佳地使用盘空间:
      [(total_sort_bytes)/(SORT_AREA_SIZE)]十64
      其中,total_sort_bytes为:
      (number_of_records)*[sum_of_aver_average_column_sizes+(12*number of(al)]
      (25)SQLTRACE
      该参数设置为TRUE时,便可跟踪,以获得改善性能的信息。因为跟踪会增加开销,所以一般仅在收集信息时才置为TRUE。在实际使用时,可用ALTER SESSION命令覆盖它。
      (26)TRANSACTION
      该参数设置并发事务的最大数。若此值较大,则需增加SGA空间和分配的回滚段数量。缺省值大于PROCESS时,可允许递归事务。

Open Toolbar