精华内容
下载资源
问答
  • 配置管理员岗位职责

    千次阅读 2019-09-18 05:23:37
    配置管理员岗位职责 一、配置经理的基本技能与资格 资格: 能够重视配置管理工作; 能够按规范实施配置管理工作; 积极支持部门的配置管理方面的工作; 能够积极支持与帮助其他人员; 为部门的配置管理能力的提高...

    配置管理员岗位职责

    一、配置经理的基本技能与资格

    资格:

    • 能够重视配置管理工作;
    • 能够按规范实施配置管理工作;
    • 积极支持部门的配置管理方面的工作;
    • 能够积极支持与帮助其他人员;
    • 为部门的配置管理能力的提高贡献力量;
    • 熟悉公司配置流程以及其他相关的流程;
    • 为增进项目管理,对于项目内的困难和关键问题,能够及时反映到部门;

    ### 基本技能:

    • 能够独立规划项目的配置管理工作;
    • 熟练掌握配置管理的相关概念;
    • 能够了解配置的相关工具,熟练使用技术工程部配置所使用的工具;
    • 具有基本的与人沟通的技巧;
    • 能够了解项目管理过程中的主要环节;
    • 初步了解项目管理过程中的质量保证的各个方面;
    • 了解部分系统和应用工具,如数据库ORACLE,前台开发工具DEPHI等;

    ## 二、 配置经理的职责

     作为一名配置人员,配置经理的职责就是能够与质量人员、测试人员等共同保证项目的质量。如:作为质量保证的成员之一,能够为整个技术工程部规范化管理的推进作贡献,如宣传规范化管理的知识,陈述规范化管理的利弊等;能够在项目进行的整个生命过程中,不断的与项目经理、QA、SCCB及项目成员进行配置管理规范化的沟通,为项目配置管理的规范化作出努力.

    ### 具体表现为:

    • 项目进行初期或首次进入项目中时,能够首先与项目经理、QA、SCCB及项目成员就项目的未来配置管理工作进行沟通,取得项目经理、QA、SCCB及项目全体成员对配置工作的认可与支持;
    • 积极了解项目情况,项目各阶段的进展,为更好的进行配置管理作努力;
    • 熟练并充分的利用配置管理工具的各方面的功能,提高配置管理的效率;
    • 为项目控制好版本,保证项目各阶段所使用的版本正确;
    • 及时发现项目问题,把问题及时反馈给项目经理、QA或SCCB,并积极协助解决;
    • 与项目内其他组成员,如开发组、测试组等协调工作,并能够很好的沟通;
    • 能够在项目中不断总结、分析,为项目内配置管理工作的进一步优化作贡献;
    • 项目进行中或结束后,能够总结并编写配置管理过程中的案例;

    三、 配置经理的工作内容

    项目计划阶段:

    在项目计划阶段,是配置管理工作前期准备的重要阶段,配置经理的工作主要有以下几方面的内容:

    1、 制定配置管理计划

     对于项目工程部在项目立项前期指派配置管理人员的项目,在项目立项初期,配置经理要与项目经理协商,制定配置管理的计划,规划未来的配置管理工作。配置管理计划的约束条件:

    • 配置管理的规划必须以项目开展的工作为基础,参考工作说明书。
    • 配置管理计划的编写必须以公司的流程为模版,与工作说明书和质量保证计划相一致;
    • 配置管理计划能够指导未来的配置管理工作,配置管理工作必须以配置管理计划为基准;
    • 配置管理计划必须经过最终的评审通过,才能够成立;

    如配置管理计划不能满足未来配置管理工作的需要,可以再增加配置管理工作计划作为配置管理计划的辅助,指导未来的配置管理工作;

    2、 规范配置管理环境

    配置管理计划制定结束后,配置管理人员要依据计划实施配置管理的前期工作。首先必须规范配置管理的环境,实现项目组内的专机专用,与项目经理协商,开发用机、测试用机、配置用机的情况,并最终生成配置管理环境维护清单,便于后期对环境的维护;

    3、 建立配置库

    配置库作为项目组内成员今后工作的平台,前期的详细准备是非常重要的。配置库建立的准则:

    • 依据配置管理计划中的定义建立配置库;
    • 与项目经理协商配置库人员使用的权限规定与配置库工作区间的划分,保证个人工作区间的隔离;

    4、 与项目负责人讨论变更控制的实施

     与项目SCCB讨论项目中变更控制实施的措施,指定出相应的变更控制流程。在变更控制流程中应注意变更过程中责任到人,不同变更情况的处理方式,具体操作可参见《变更控制流程制定指导书》。

    5、 配置培训

     配置培训作为与项目成员沟通配置管理内容的一个主要渠道,配置经理应与项目经理协商在项目开始初期进行。培训内容包括:

    • 配置管理的基本概念;
    • 项目中配置管理工具的使用;
    • 项目中配置管理的相关流程;
    • 配置库的使用及规范等;

    6、 生成计划基线,并发布基线

     在项目的立项材料经过正式评审通过,宣布项目立项后,配置经理要整理项目的立项材料,正式生成计划基线,并标识基线,保证基线存放于基线库中。

     基线的发布通过配置状态报告来实现。

    项目执行阶段:

     项目执行阶段,配置工作真正深入到了项目中,工作主要表现为:

    1、 维护配置库

    • 配置库维护包括维护配置库结构、日常权限的设置、帐户的增加与删除、工作区维护、配置库备份等;
    • 维护时要注意:对配置库的备份要与配置机分开,以确保安全性;
    • 配置库中帐户的管理要注意定期维护,避免帐户不断增加,出现垃圾帐户的问题;
    • 工作区的维护要注意结构清晰、明了,工作区隔离;
    • 监督项目组成员使用配置库问题,避免工作脱离配置库平台和配置项长期被CHECK OUT的问题等;

    2、 进行版本控制

    版本控制是配置管理的另一项主要内容,包括文档版本的控制和代码版本的控制。版本控制中注意的问题:

    • 版本标识明确、清晰;
    • 在配置库中,有效利用标签;
    • 注意保证版本的历史在线和可以回溯;
    • 注意每一次的开发以基线版本为基础和基准;
    • 注意版本的受控性,保证测试的版本的受控;
    • 每一次新的基线版本的生成,要及时发布;

    3、 协助生成项目进行过程中的各种基线

    项目执行过程中生成各种基线,包括需求基线、设计基线、代码基线等,基线的正式生成要经过评审通过才有效。

    配置经理协助项目经理组织评审。在评审之前首先要进行物理审计,审计后填写物理审计报告,然后传递给QA进行过程审计。物理审计报告作为配置项存放在配置库中。

    评审通过后,正式生成基线,配置经理负责整理并标识基线,然后把基线存放在基线库中,通过配置状态报告来发布基线。

    在代码基线生成时,注意维护源代码清单。

    4、 与测试人员协作

    配置经理注意与测试人员的沟通,保证与测试组配置管理协接的无误。测试组与配置组沟通的两个主要问题是:测试配置项的管理问题和版本的传递问题。

    配置经理要与测试经理、项目经理沟通有关测试配置项的管理问题与版本的传递问题。测试配置项可以单独管理,也可以与其他配置项一起存放与一个配置库中,这要根据项目的大小和配置库的增长趋势来决定,建议大型项目在有条件的情况下单独存放,单独管理测试案例、测试数据等;

    版本的传递指开发组产生出代码,经配置组编译执行生成执行文件并进行版本标识后,传递给测试组进行测试的过程。在此过程中注意的问题是:配置组与开发、测试组的接口的唯一,保证测试版本的正确性。

    5、 与QA协作

    配置经理负责向QA及项目经理反映项目进行过程中的不规范问题,并与QA与项目经理沟通,解决问题。

    6、 发布配置状态报告

    配置经理在项目进行过程中,要及时发布配置状态报告。发布配置状态报告有两种方式:时间驱动和事件驱动。基线生成时、重要配置象产生时,都要发布配置状态报告;定期发布配置状态报告以向全体成员通报项目现阶段的进展情况,注意全体成员要包含QA。

    7、 优化配置管理活动

    在配置管理过程中,随项目的进展和工作的开展情况,配置经理要适时的调整配置管理的活动。如整理配置库、优化配置流程等。但是必须注意,任何变动和更改必须经过项目经理的同意;更改后要通过配置状态报告发布;变动和更改的配置项要有相应的变更说明。

    如配置工作需要调整时,需升级配置管理计划,必须确保工作与计划的一致性;

    8、 维护项目环境

    在项目进行过程中,注意维护项目的环境,包括配置环境、测试环境、开发环境等。环境的变更要体现在配置管理环境维护清单中。环境的变化要通过配置状态报告发布出去。

    9、 协助项目组完成变更管理

    配置组有责任协助项目组完成变更控制的管理,并维护变更管理过程记录。变更执行过程中出现的问题,可以向项目经理和QA甚至SCCB反映。变更执行结束,要发布配置状态报告,报告变更的情况

    10、 参加项目组的会议

    为使配置管理工作对项目切实可行和有意义,配置管理人员除主动积极了解项目情况外,要参加项目组的例行会议,了解项目的总体情况,以及项目的下一步工作规划,以便配置管理及时作出反馈

    11、 参加项目工程部的活动

    配置经理要积极参加项目工程部组织的各种配置活动,如配置经理述职等;

    项目结项:

    项目结项时,配置管理人员主要是协助项目经理整理结项材料,对项目配置管理工作进行总结、整理,编写配置管理案例、进行配置工作述职等。如项目配置项需要入产品库,则按产品库规范整理产品配置项。

    在编写案例时要注意总结项目配置管理工作进行过程中的得失以及经验教训。案例总结和述职的进行都要在项目工程部内进行。

    展开全文
  • ORACLE数据库管理员职责

    千次阅读 2013-03-01 11:21:40
    ORACLE数据库管理员职责 一.概述  ORACLE数据库管理员应按如下方式对ORACLE数据库系统做定期监控: (1).每天对ORACLE数据库的运行状态,日志文件,备份情况,数据库的空间使用情况,数据库的性能情况,系统...

    ORACLE数据库管理员的职责

    一.概述 

    ORACLE数据库管理员应按如下方式对ORACLE数据库系统做定期监控:

    (1).每天对ORACLE数据库的运行状态,日志文件,备份情况,数据库的空间使用情况,数据库的性能情况,系统资源的使用情况进行检查,发现并解决问题。

    (2).每周对数据库对象的空间扩展情况,数据的增长情况进行监控,对数据库做健康检查,对数据库的安全情况做检查,对数据库对象的状态做检查。

    (3).每月对表和索引等进行Analyze,检查表空间碎片,寻找数据库性能调整的机会,进行数据库性能调整,查看I/O瓶颈,检查数据增长速度,提出下一步空间管理计划。对ORACLE数据库状态进行一次全面检查。

    二.每天的工作

    1  确认所有的INSTANCE状态正常

    登陆到所有数据库或例程,检测ORACLE后台进程:

    $ps –ef | grep ora

    问题:

    2  检查文件系统的使用(剩余空间)

    如果文件系统的剩余空间小于20%,需删除不用的文件以释放空间。

    $df –k

    df –m

    df -h

    3  检查日志文件

    trace文件记录alert和trace文件中的错误。

    3.1 连接到每个需管理的系统

    3.2 使用’telnet’

    3.3 对每个数据库,cd 到bdump目录,通常是$ORACLE_BASE/<SID>/bdump

    3.4 使用Unix ‘tail’命令来查看alert_<SID>.log文件

    3.5 如果发现任何新的ORA- 错误,记录并解决,同时检查重复出现的ORA-错误,记录并仔细研究。

    grep ORA- ALERT_SID.LOG

    4  检查数据库当日备份的有效性

    对RMAN备份方式:

    检查第三方备份工具的备份日志以确定备份是否成功。

    对EXPORT备份方式:

    检查exp日志文件以确定备份是否成功

    对其他备份方式:

    检查相应的日志文件。(检查备份的磁带文档是否成功)

    5  检查数据文件的状态

    记录状态不是“online”的数据文件,并做恢复

    Select file_name from dba_data_files wherestatus='OFFLINE';

    6  检查在表空间中的剩余空间

    对每一个实例来说,检查在表空间中是否存在有剩余空间来满足当天的预期的需要。当数据库中已有的数据是稳定的,数据日增长的平均数也是可以计算出来,最小的剩余空间至少要能满足每天数据的增长。

    6.1 检查剩余空间

    SELECTtablespace_name,sum( blocks )as free_blk , trunc (sum( bytes )/

    (1024*1024))as free_m,max( bytes )/(1024)asbig_chunk_k,count(*)as num_chunks FROMdba_free_space GROUPBY tablespace_name

    /

    6.2 检查剩余空间百分率

    SELECTtablespace_name, max_m, count_blocks free_blk_cnt,sum_free_m,to_char(100*sum_free_m/sum_m,'99.99')||'%'AS pct_free

    FROM(SELECTtablespace_name,sum(bytes)/1024/1024AS sum_m FROMdba_data_files GROUPBY tablespace_name),

    (SELECTtablespace_name AS fs_ts_name,max(bytes)/1024/1024AS max_m,count(blocks)AS count_blocks,sum(bytes/1024/1024)AS sum_free_m FROMdba_free_space GROUPBY tablespace_name )

    WHERE tablespace_name =fs_ts_name

    /

    该语句执行效率很低。

    7  检查回滚段

    回滚段的状态一般是在线的,除了一些为复杂工作准备的专用段,它一般状态是离线的。

    7.1你可以用V$ROLLSTAT 来查询在线或是离线的回滚段的现在状态

    select usn,latch,Extents,writes,hwmsize,status  From v$rollstat

    /

    7.2对于所有回滚段的存储参数及名字, 可用DBA_ROLLBACK_SEGS 来查询。但是它不如V$ROLLSTAT 准确。

    select segment_name,owner,tablespace_name,segment_id,file_id,block_idstatus from dba_rollback_segs;

     

    识别过分的增长

    查看数据库中超出资源或是增长速度过大的段,这些段的存储参数需要调整。

    8.1收集日数据大小的信息,可以用 ‘ANALYZE5PCT.SQL’。如果你收集的是每晚的信息, 则可跳过这一步。

    BEGIN

    dbms_utility.analyze_schema ('&OWNER','ESTIMATE',NULL,5);

    END;

    /

    8.2检查当前的范围。

    SELECTe.owner, e.segment_type ,e.segment_name ,count(*)asnr_extents ,

    s.max_extents

    , to_char (sum( e.bytes )/(1024*1024),'999,999.90')as MB

    FROMdba_extents e , dba_segments s

    WHEREe.segment_name = s.segment_name

    GROUPBY e.owner,e.segment_type , e.segment_name ,s.max_extents

    HAVINGcount(*)> &THRESHOLD

    OR((s.max_extents -count(*))<&&THRESHOLD )

    ORDERBYcount(*)desc

    8.3查询当前表的大小信息。

    8.4 查询当前索引大小的信息。

    8.5 查询增长趋势。

    9  确定空间的范围

    如果范围空间对象的NEXT_EXTENT 比表空间所能提供的最大范围还要大,那么这将影响数据库的运行。如果我们找到了这个目标,可以用’ALTER TABLESPACE COALESCE’调查它的位置,或加另外的数据文件。运行下面脚本,如果都是正常的,将不返回任何行。

    SELECTa.table_name, a.next_extent,a.tablespace_name

    FROMall_tables a,

    (SELECT tablespace_name,max(bytes)as big_chunk

    FROMdba_free_space

    GROUPBY tablespace_name) f

    WHEREf.tablespace_name = a.tablespace_name

    AND a.next_extent >f.big_chunk

    /

    10 监控数据库性能

    使用STATSPACK/AWR收集统计数据,生成报告

    11 检查数据库性能

    记录数据库的cpu使用、内存使用、IO、buffer命中率等等使用vmstat , iostat,glance,top,sar等命令

    12 检查DBSNMP 是否在运行

    检查每个被管理机器的’DBSNMP’进程并将它们记录到日志中。在UNIX 中,在命令行中,键入ps –ef | grep dbsnmp,将回看到2 个DBSNMP 进程在运行。如果没有,重启DBSNMP。snmp是用来采集oracle数据库的相关信息。

    Oracle数据库系統如果採用典型安裝,除了創建前面介紹的幾個用戶外,另外還自動創建了一個叫做DBSNMP的用戶,該用戶負責咝蠴racle系統的 智能代理(Intelligent Agent),該用戶的缺省密碼也是“DBSNMP”。如果忘記修改該用戶的口令,任何人都可以通過該用戶存取数据库系統。現在我們來看一下該用戶具有哪 些權限和角色,然來分析一下該用戶對数据库系統可能造成的損失。

    这个服务在我们的系统里面有没有意义。

    13 将存档日志复制到备用数据库中

    如果有一个备用数据库,将适当的存档日志复制到备用数据库的期望位置,备用数据库中保存最近期的数据。

    14 日常出现问题的处理

       开发人员支持,系统的小问题。

    15 晚间的工作

    大部分的数据库产品将受益于每晚确定的检查进程的运行。收集VOLUMETRIC 数据,分析计划和收集数据,更准确的分析计算并保存结果。

    15.1如果你现在没有作这些的话,用下面的脚本来创建测定体积的表。

    CREATETABLEutl_vol_facts (

    table_name VARCHAR2(30),

    num_rows NUMBER,

    meas_dt DATE)

    TABLESPACEplatab

    STORAGE(

    INITIAL128k

    NEXT128k

    PCTINCREASE0

    MINEXTENTS1

    MAXEXTENTSunlimited

    )

    /

    15.2收集晚间数据大小的信息,用下面的脚本。

    BEGIN

    sys.dbms_utility.analyze_schema ('&OWNER','COMPUTE');

    END;

    /

    15.3收集统计结果,下面的脚本。

    insertintoutl_vol_facts

    selecttable_name

    , NVL ( num_rows,0)as num_rows

    , trunc (last_analyzed )as meas_dt

    fromall_tables -- or just user_tables

    where owner in('&OWNER');-- or a comma-separated list of owners

    /

    Commit;

    /

    15.4在空闲的时候检查数据,可能的话,每周或每个月进行,可以用MS EXCEL 和ODBC 的联接来检查数据和图表的增长

    16 经常查阅DBA 用户手册

    如果有可能的话,要广泛的阅读,包括DBA 手册,行业杂志,新闻组或是邮件列表。下面是供应商的网页

    http://www.oracle.com

    http://technet.oracle.com

    http://www.oracle.com/support

    http://www.oramag.com

    2. QuestSoftware

    http://www.quests.com

    3. SunMicrosystems

    http://www.sun.com

    三.每周的工作

    1  监控数据库对象的空间扩展情况

    根据本周每天的检查情况找到空间扩展很快的数据库对象,并采取相应的措施

    ----删除历史数据

    ----扩表空间

    altertablespace<name>adddatafile'<file>'size<size>

    --- 调整数据对象的存储参数

    next extent

    pct_increase

    2  监控数据量的增长情况

    根据本周每天的检查情况找到记录数量增长很快的数据库对象,并采取相应的措施

    ----删除历史数据

    ----扩表空间

    altertablespace<name>adddatafile'<file>'size<size>

    3  系统健康检查,检查以下内容:

    init<sid>.ora

    controlfile

    redo logfile

    archiving

    sort area size

    tablespace(system,temporary,tablespacefragment)

    datafiles(autoextend,location)

    object(numberofextent,nextextent,index)

    rollbacksegment

    logging&tracing(alert.log,max_dump_file_size,sqlnet)            

    4  数据库对象有效性检查

    4.1检查无效的数据库对象

    SELECTowner, object_name,object_type FROM dba_objects

    WHERE status='INVALID'

    /

    4.2 检查不起作用的约束

    SELECTowner,constraint_name, table_name,

    constraint_type, status

    FROMdba_constraints

    WHERE status ='DISABLED'AND constraint_type ='P'

    /

    4.3 检查没有主键的表

    SELECTtable_name FROM all_tables

    WHERE owner ='&OWNER'

    MINUS

    SELECTtable_name FROM all_constraints

    WHERE owner ='&&OWNER'

    ANDconstraint_type ='P'

    /

    4.4 检查索引主键不唯一

    SELECTindex_name, table_name,uniqueness

    FROMall_indexes

    WHEREindex_name like'&PKNAME%'

    AND owner ='&OWNER'AND uniqueness ='NONUNIQUE'

    SELECTc.constraint_name, i.tablespace_name,i.uniqueness

    FROMall_constraints c , all_indexes i

    WHERE c.owner = UPPER ('&OWNER')AND i.uniqueness ='NONUNIQUE'

    AND c.constraint_type ='P'ANDi.index_name = c.constraint_name

    /

    4.5 检查索引是否在索引表空间

    SELECT'alter index '|| index_name ||' rebuild '

    ,'tablespace INDEXES storage '

    ||' ( initial 256 K next 256 K pctincrease 0 ) ; '

    FROMall_indexes

    WHERE(tablespace_name !='INDEXES'

    ORnext_extent !=(256*1024))

    AND owner ='&OWNER'

    /

    4.6 检查生产环境与测试环境的数据类型一致性

    SELECT

    table_name, column_name,data_type,data_length, data_precision,data_scale, nullable

    FROMall_tab_columns -- first environment

    WHERE owner ='&OWNER'

    MINUS

    SELECT

    table_name, column_name,data_type, data_length,data_precision,data_scale,

    nullable

    FROMall_tab_columns@&my_db_link -- second environment

    WHERE owner ='&OWNER2'

    orderby table_name,column_name

    4.7 检查不同实例中对象的不同点

    SELECTobject_name, object_type

    FROMuser_objects

    MINUS

    SELECTobject_name, object_type

    FROM user_objects@&my_db_link

    4.8 检查无效的trigger

    SELECTowner,trigger_name, table_name, status

    FROMdba_triggers

    WHERE status ='DISABLED'

    /

    4.9 检查Next_Extent设置

    SELECTsegment_name, segment_type,ds.next_extent as Actual_Next

    ,dt.tablespace_name, dt.next_extent asDefault_Next

    FROMdba_tablespaces dt, dba_segments ds

    WHEREdt.tablespace_name = ds.tablespace_name

    ANDdt.next_extent !=ds.next_extent

    AND ds.owner = UPPER ('&OWNER')

    ORDERBY tablespace_name,segment_type, segment_name

    /

    4.10 检查已有的EXTENTS

    SELECTsegment_name, segment_type

    ,count(*)as nr_exts

    ,sum( DECODE ( dx.bytes,dt.next_extent,0,1))asnr_illsized_exts

    ,dt.tablespace_name, dt.next_extent asdflt_ext_size

    FROMdba_tablespaces dt, dba_extents dx

    WHEREdt.tablespace_name = dx.tablespace_name

    AND dx.owner ='&OWNER'

    GROUPBY segment_name,segment_type, dt.tablespace_name,dt.next_extent

    /

    5  查看是否有危害到安全策略的问题。

    6  查看SQL*NET日志并归档报错日志

    四  每月的工作

    1  分析表和索引

    如果使用CBO

      Analyze Tables/Indexes/Cluster

    analyzetable <name> estimate statistics sample 50 percent;

    表和索引是否定期进行分析?还是已经设置为会自动分析?

    2  查看对数据库会产生危害的增长速度

    从每周记录或报告中回顾段增长的变化以此来确定段增长带来危害。

    3  检查表空间碎片

    根据本月每周的检查分析数据库碎片情况,找到相应的解决方法。

    LMT的的表空间是否存在碎片?怎么整理。在本地曾经遇到一个问题,SYSAUX表空间的自由空间碎片索引值很低,在做一些字典访问的时候,速度很慢。重建了库之后,就很快了。

     

    自由空间碎片索引值:

    rem   FSFI   Value  Compute    

    rem   fsfi.sql    

    column   FSFI   format  999,99    

    select  tablespace_name,sqrt(max(blocks)/sum(blocks))*    

    (100/sqrt(sqrt(count(blocks))))  FSFI    

    from   dba_free_space    

    group   by   tablespace_name   order   by  1;    

    spool   fsfi.rep;    

    /    

    spool   off; 

    该值最大可能值为100,在建库的时候,大多数表空间应该是100,随着数据库的运行,该值会下降,下降至30以下的时候,表明碎片比较严重。

      alter   tablespace  temp   default   storage(pctincrease   1);        

      ----   这样   SMON  便会将自由范围自动合并。也可以手工合并自由范围   

      alter   tablespace  temp   coalesce;    

    段的碎片整理:

      exp   user/password   file=exp.dmp   compress=Y  grants=Y   indexes=Y    

        tables=(table1,table2);    

       ----   若输出成功,则从库中删除已输出的表,然后从输出转储文件中输入表:    

        imp   user/password   file=exp.dmp   commit=Y  buffer=64000   full=Y   

    4  数据库性能调整

    比较每天对数据库性能的监控报告,回顾以前的性能调整,比较目前的报告和以前的报告,确定有害的趋势,如有必要,进行性能调整。

    针对该项要求,是否有必要每周来做性能分析报告。

    5  预测数据库将来的性能

    比较ORACLE 和操作系统的CPU,内存,网络,及硬盘的利用率以此来确定在近期将会有的一些资源争夺的趋势,根据此趋势提出将来的解决方案。

    该问题应该从日常做起。

    6  调整和维护工作

    使修改在系统正常运行的前提下,满足避免系统资源的争夺的需要,这里面包括增加新资源或使预期的停工。

    调整和维护工作我们的数据库是否会定期做。

    7  提出下一步空间管理计划

    根据每周的监控以及数据库的预测报告,给出分析报告,提出空间管理的改进方法。

       这个应该是根据每天的记录来进行。都应该记录哪些。

    附录1 DBA需要掌握的技能

    1. OS : linux,solaris或其他unix起码要一种

    2. bash (不精通也要熟)  LINUX与UNIX SHELL编程指南.pdf      

    3. perl 包括:

                Perl_CD_BookShelf.chm

                learning perl

                 perl pragramming 

    4. java(掌握)包括jdbc thin,oci等4类不同的连接方式,性能设置,一些中间件的知识,了解一些就够了

    5. oracle performance tuning(范围很广)

                ocp performance book    

                 下tom的书《Wrox - Expert one-on-one Oracle》, 

                http://www.ebookcn.net/Soft/Soft_12042.htm

                http://zuse.esnig.cifom.ch/database/doc_oracle/Oracle920_Linux/

                server.920/a96533/toc.htm[/url]

                oracle sql hign performance tuning 2nd editon by guy  harrison       

    6. pl/sql

                 OReilly_oracle_Bookshelf 包括:

                 Oracle PL/SQL Programming, 2nd Edition by StevenFeuerstein

                 Oracle Built-in Packages by Steven Feuerstein,

    7. oracle network

                 ocp network book   

    8. os tuning

                 system performance tuning 2nd editon by gian-paolo        

    9. sql loader & exp/imp

                 有很多这样的资料

                 export one to one by Tom    

    10. oracle sql

                   http://zuse.esnig.cifom.ch/database/doc_oracle/Oracle920_Linux/

                   server.920/a96540/toc.htm

    11. oracle rac

                   http://zuse.esnig.cifom.ch/database/doc_oracle/Oracle920_Linux/

                   rac.920/a96597/toc.htm[/url]

                   dataguard

    12.存储:netapp;emc;nfs;san;nas;das;iscsi等...

                   data ontap version 6.4 nfs administrator by netapp  

    13. practice oracle 8i by jenathon

                   metalink bug and patch search

                   安全控制

    14.数据库安装升级,OS安装升级  

    15.数据库备份与恢复  

    16.数据库迁移

    附录2 ORACLE常用工具快速指南

    本指南快捷的给出ORACLE常用的几个组件的使用方法,如果不明白请看详细文档后使用。

    1  STATSPACK

    altersystem set job_queue_processes = 6 scope=both;

    altersystem set timed_statistics = true;

    sqlplus“/ as sysdba”

    createtablespace perfstat

    datafile 'd:\oracle\oradata\eygle\perfstat.dbf'

    size500M

    extentmanagement local;

    @$ORACLE_HOME\\rdbms\admin\spcreate

    Default_tablespace: perfstat

    temporary_tablespace: temp

    明文口令:perfstat

    如果出异常:@$ORACLE_HOME\\rdbms\admin\spdrop.sql

    executestatspack.snap

    PL/SQLprocedure successfully completed.

    ----间隔30分钟至1小时

    executestatspack.snap

    PL/SQLprocedure successfully completed.

    @$ORACLE_HOME\\rdbms\admin\spreport.sql

    输入快照号以及报告名称,可以出对应的报告。

     

    2  AWR

    Sqlplus “/ assysdba”

    ----统计方式修改

    execdbms_workload_repository.modify_snapshot_settings(2*24*60,10,50);

    @$ORACLE_HOME\\rdbms\admin\awrrpt.sql

    根据提示输入html或者其他格式

    输入快照号以及报告名称,可以出对应的报告,报告阅读和statspack差不多。

     

    3  SQL_TRACE及相关

    3.1  SQL_TRACE:

       alter systemset sql_trace=true;

    alter session set sql_trace=true;

    alter session set tracefile_identifier ="foxmile_test";

    select count(*) from dba_users;

    alter session set sql_trace=false;

     

    3.2  DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION:

    select sid,serial#,username from v$session where username is not null;

    alter session set tracefile_identifier ="foxmile_test";

    exec dbms_system.set_sql_trace_in_session(SID, serial#,true);

    exec dbms_system.set_sql_trace_in_session(SID, serial#,false);

     

    3.3  10046事件说明

    1- 启用标准的SQL_TRACE功能,等价于sql_trace

    4- Level 1 加上绑定值(bind values)

    8- Level 1 + 等待事件跟踪

    12- Level 1 + Level 4 + Level 8

    参数文件:

    event="10046trace name context forever,level 12"

    当前session设置:

    alter session set tracefile_identifier ="foxmile_test";

    alter session set events '10046 trace name context forever';

    alter session set events '10046 trace name context forever, level 8';

    alter session set events '10046 trace name context off';

    其他session设置:

    select sid,serial#,username from v$session where username is notnull;SID SERIAL# USERNAME

    启动:

    alter session set tracefile_identifier ="username";

    exec dbms_system.set_ev(sid,serial#,10046,8, username);

    exec dbms_system.set_ev(sid,serial#,10046,0, username);

    4  LOGMINER

    执行脚本:

    Sqlplus “/ as sysdba”

    @$ORACLE_HOME/rdbms/admin/dbmslm.sql

    @$ORACLE_HOME/rdbms/admin/dbmslmd.sql

    产生数据字典:

    alter system set utl_file_dir = 'C:\arc_zero'scope=spfile;

    shutdown immediate;

    startup;

    EXECUTE dbms_logmnr_d.build(dictionary_filename=> 'v10201dict.ora', dictionary_location =>'C:\arc_zero');

    ----添加及移除日志

    EXECUTEdbms_logmnr.add_logfile(LogFileName=>'D:\oracle\product\10.1.0\oradata\zero\REDO01.log',Options=>dbms_logmnr.new);

    EXECUTEdbms_logmnr.add_logfile(LogFileName=>'D:\oracle\product\10.1.0\oradata\zero\redo02.log',Options=>dbms_logmnr.addfile);

    EXECUTEdbms_logmnr.add_logfile(LogFileName=>'C:\arc_zero\00108_0657628042_001.ARC',Options=>dbms_logmnr.new);

    EXECUTEdbms_logmnr.add_logfile(LogFileName=>'C:\arc_zero\00109_0657628042_001.ARC',Options=>dbms_logmnr.addfile);

    EXECUTE dbms_logmnr.add_logfile(LogFileName=>'D:\oracle\product\10.1.0\oradata\zero\redo02.log',Options=>dbms_logmnr. REMOVEFILE);

    ----无限制分析日志

    EXECUTEdbms_logmnr.start_logmnr(DictFileName=>'C:\arc_zero\v10201dict.ora');

    ----限制时间分析日志

    EXECUTE dbms_logmnr.start_logmnr(DictFileName=>'C:\arc_zero\v10201dict.ora',

    StartTime => to_date('2001-9-1800:00:00','YYYY-MM-DD HH24:MI:SS'),EndTime => to_date(''2001-9-1823:59:59','YYYY-MM-DD HH24:MI:SS '));

    ----限制起止scn分析日志

    EXECUTE dbms_logmnr.start_logmnr(DictFileName=>'C:\arc_zero\v10201dict.ora', StartScn => 20, EndScn => 50);

    ----观察分析结果(v$logmnr_contents)

    SELECT sql_redo FROM v$logmnr_contents;

    SELECT sql_redo FROM v$logmnr_contents WHEREusername='DB_ZGXT' AND tablename='SB_DJJL';

    5  TKPROF

    tkprof zero_ora_856374.trc zero.txtexplain=system/manager aggregate=yes sys=no waits=yes sort=fchela

    sys=no:表示阻止所有以sys用户执行的sql被显示出来,默认为YES,这个参数设置为no可以阻止所有以sys用户执行的sql被显示出来,减少分析出来的文件的复杂度,便于查看

     

    aggregate=yes|no 若用户指定AGGREGATE=NO,TKPROF将不会对相同SQL文本的多个用户进行汇总

     

    waits=yes|no Record summary for any wait eventsfound in the trace file.

     

    print=integer List only the first 'integer' SQLstatements. 只列出输出文件中的第一个INTEGER的SQL语句,若忽略,则TKPROF将列出所有跟踪的SQL语句

     

    insert=filename List SQL statements and data insideINSERT statements. SQL脚本的一种,用于将跟踪文件的动机信息存储到数据库中

     

    record=filename Record non-recursive statementsfound in the trace file. 对于跟踪文件中的所用非递归SQL语句,TKPROF 将以指定的名称来创建某个SQL脚本。用于对跟踪文件中的用户时间进行重放

     

    sort=option Set of zero or more of the followingsort options: 在将被跟踪的SQL语句列表输出到跟踪文件之前,先将其按照指定排序选项的降序关系对其进行排序;若指定了多种排序选项,那么根据排序选项所指定值的和的降序关系对其进行排序;若忽略此参数,那么TKPROF将按照使用次序把语句列表到输出文件中,其中比较有用的一个排序选项是fchela,即按照elapsed timefetching来对分析的结果排序(记住要设置初始化参数time_statistics=true),生成的.prf文件将把最消耗时间的sql放在最前面显示。下面是所有的排序选项:

     

    prscnt number of times parse was called 语句解析的数目

    prscpu cpu time parsing 语句解析所占用的CPU时间

    prsela elapsed time parsing 语句解析所占用的时间(总是大于或等于CPU时间);

    prsdsk number of disk reads during parse 语句解析期间,从磁盘进行物理读取的数目

    prsqry number of buffers for consistent read duringparse 语句解析期间,一致模式块读取(CONSISTENTMODE BLOCK READ)的数目

    prscu number of buffers for current read duringparse 语句解析期间,当前模式读取(CURRENTMODE BLOCK READ)的数目

    prsmis number of misses in library cache during parse语句解析期间,库缓存失败的数目

    execnt number of execute was called 语句执行的数目

    execpu cpu time spent executing 语句执行所占用的CPU时间

    exeela elapsed time executing 语句执行所占用的时间(总是大于或等于CPU时间)

    exedsk number of disk reads during execute 语句执行期间,从磁盘进行物理读取的数目

    exeqry number of buffers for consistent read duringexecute 语句执行期间,一致模式块读取(CONSISTENTMODE BLOCK READ)的数目

    execu number of buffers for current read duringexecute 语句执行期间,当前模式读取(CURRENTMODE BLOCK READ)的数目

    exerow number of rows processed during execute 语句执行期间,所处理的语句行数

    exemis number of library cache misses duringexecute 语句执行期间,库缓存失败的数目

    fchcnt number of times fetch was called 取数据的数目

    fchcpu cpu time spent fetching 取数据所占用的CPU时间

    fchela elapsed time fetching 取数据所占用的时间(总是大于或等于CPU时间)

    fchdsk number of disk reads during fetch 取数据期间,从磁盘进行物理读取的数目

    fchqry number of buffers for consistent read duringfetch 取数据期间,一致模式块读取(CONSISTENTMODE BLOCK READ)的数目

    fchcu number of buffers for current read duringfetch 取数据期间,当前模式读取(CURRENTMODE BLOCK READ)的数目

    fchrow number of rows fetched 所获取的行数

    userid userid of user that parsed the cursor

     

    5  ORACLE的诊断事件(Event)

    5.1 格式

    EVENT="<事件名称><动作><跟踪项目><范围限定>"

    附录3 DBA必须掌握的几个ix系统的命令

    top

    top监控工具可以显示CPU占用率为前几位的进程,并提供CPU的实时活动情况

     

    top监控命令在FreeBSD上的使用

    top监控工具可以显示CPU占用率为前几位的进程,并提供CPU的实时活动情况

    语法:top [-s time] [-d count] [-q] [-h] [-n number] [-ffilename] [-o field][-U usename]

    -S 将系统进程信息也显示到屏幕上,默认情况下,top不显示系统进程的信息

    -b 使用”batch”方式运行top。在此种方式下,所有来自终端的输入都将被忽略,但交互键(比如C and )

    依然起使用。这是运行top输出到哑终端或输到非终端的默认运行方式

    -i 使用交互运行top程序,在此种方式下,命令会被进程立即被处理。不管命令是不是能被top所理解执行,

    屏幕都将立即更新。这是top的默认运行方式。

    -I 不显示空闲进程,在默认情况下,top连同空闲进程的信息一同输出。

    -t 不显示top进程自己

    -n 不以交互方式使用top命令,作用同”batch”方式。

    -s time 设置屏幕刷新的延时,单位为秒,默认值5秒

    -d count 设置屏幕刷新的次数,刷新显示完count次后退出

    -q 如果经过nice授权,使用-q可以使top运行的更快一些,这样,在系统反应缓慢的时候,可以会更快的找到存在的问题。

    此选项在FreeBSD下只有root可以使用

    -n number 设置每一屏幕显示的进程数目,number值超过进程最大数目,则设置无效

    -u 用显示User ID代替username,提高命令运行速度

    -v 显示程序版本号后,立即退出。如果要在top运行时查看版本号,输入”?”

    -o 以指定的字段排序显示进行信息。字段名必须为输入在屏幕的可见列的名字,而且必须是小写。

    比如”cpu”、”size”、”res”与”time”,但不同的操作系统间有许多的不同。注意不是每个UNIX操

    作系统都支持此选项。

     

    -U 只显示属于后面所跟用户名的进程的信息

    屏幕控制命令

    交换方式下,可以使用以下命令控制top

    ^L – 刷新屏幕

    q – 退出

    h or ? – 显示帮助

    d – 修改刷新显示的次数

    e – 显示最近”kill”或”renice”命令所产生的错误

    i – 显示/不显示处于空闲的进程

    I – 作用同 ‘i’

    k – kill 进程; 发送一个信号到某个进程列表

    n or # – 修改显示进程的数目

    o – 以特定的字段排序 (pri, size, res,cpu, time)

    r – renice 一个进程

    s – 修改输入的更新时间

    u – 只显示属于某个用户的进程 (+selects all users)

    顺序显示下面三个常规的信息

     

    一. 系统信息:

     

    last pid: 22228; load averages: 0.25, 0.97, 1.56 up44+03:25:56 21:39:36

    274 processes: 3 running, 259 sleeping, 12 zombie

    CPU states: 2.9% user, 0.0% nice, 4.2% system, 0.4%interrupt, 92.5% idle

    Mem: 483MActive, 120M Inact, 222M Wired, 25M Cache, 112MBuf, 153M Free

    Swap: 2048MTotal, 143M Used, 1905M Free, 6% Inuse

     

    首部的几行显示系统的几个信息,其中包括:

    + Load averages:1分钟、5分钟和15分钟内运行的负载平均数

    + system:系统名和当前日期.

    一般来说只要每个CPU的当前活动进程数不大于 3那么系统的性能就是良好的,如果每个CPU的任务数大于5,

    那么就表示这台机器的性能有严重问题

    + 最近一次更新时存在的进程总数,并分别列出run(运行)、sleep(睡眠)、idle(停止)和zomb(‘僵尸’)状态的进程数

    + CPU state:用户占用时间的百分比、系统占用CPU时间的百分比、被nice命令改变优先级的任务占用的CPU时间百分比、以及CPU空闲时间的百分比。

    (被nice命令改变优先级的任务仅指那些nice值为负的任务)。花费在被nice命令改变优先级的任务上的时间也将被计算在系统和用户时间内,因此

    整个时间加起来可能会超过百分之百

     

    二.内存信息

    Memory: 610008K (24424K) real, 995344K (30304K)virtual, 12588K free Page# 1/4

    Memory:关于内存使用情况的统计,包括实际(real)内存的活动值/总值,虚拟(virtual)内存的使用值/总值,剩余的内存。

     

    DESCRIPTION OF MEMORY

    Mem: 9220K Active, 1032K Inact, 3284K Wired, 1MBCache, 2M Buf, 1320K

    Free Swap: 91M Total, 79MFree, 13% Inuse, 80K In, 104 K Out

     

    K: Kilobyte(K)

     

    M: Megabyte(兆)

     

    %: 1/100(百分比)

     

    Active:

    活动页的数目

     

    Inact: 非活动页的数目

     

    Wired: 已经被写入页的数目, 包括缓存文件数据页码

     

    Cache: 被用于 VM-level 磁盘缓冲的页的数目

     

    Buf: 被用于 BIO-level 磁盘缓冲的页的数目

     

    Free: 空闲页

     

    Total: 总的可使用交换区

     

    Free: 总共空闲的交换区

     

    Inuse: 交换区的使用情况

     

    In: pages paged in from swap devices (最近的时间间隔)

     

    Out: pages paged out to swap devices (最近的时间间隔)

     

    三.进程信息

    CPU PID USERNAME PRI NI SIZE RES STATE TIME %WCPU %CPU COMMAND

    1 33 root 152 20 0K 0K run 153:43 1.18 1.18 vxfsd

    0 1751 root 154 20 2500K 868K sleep 2084:19 0.520.52 ARMServer

    0 1730 root 154 20 4500K 332K sleep 1664:55 0.440.44 acactmgr

    列出系统里每一个处理器的信息,当信息在一个屏幕内无法显示时,会被分成多个屏幕显示,可以前面提到l,k和t命令查看

    (1)CPU:处理器号(仅当多处理器系统时列出)

    (2)PID:进程号

    (3)USERNAME:用户名

    (4)PRI:任务的优先级

    (5)NICE:任务的nice值,一个具有较低值的进程在系统上将具有优先权。可以通过改变nice值提高某些进程速度,但是这实际上是一种交易,因为那些nice值被升高的进程此时将运行得很慢。

    (6)SIZE:任务的代码加上数据再加上栈空间的大小。

    (7)RES:任务使用的物理内存的总数量。

    (8)STATE:任务的状态

    (9)TIME:自任务开始时使用的总CPU时间,单位为秒,如153:43,对应是153秒43毫秒

    (10)%WCPU:进程的CPU利用率权重百分比

    (11)%CPU:进程的原始的CPU利用率百分比,自上一次屏幕刷新以来任务占用CPU 时间的份额

    (12)COMMAND:启动进程的命令名。如果名字太长而不能在一行显示时,它将被截短

     

    iostat 和vmstat

    CPU处理单元是系统中最快的组件。在某一时间对单个程序来说,相对很少保持 100% 的 CPU 占用率(也就是说,空闲 0%,等待 0%)超过几秒钟。甚至在高负载的多用户系统中,偶尔会出现一些 10 毫秒(ms)的时期,在其结束时所有线程处于等待状态。如果一个监视器显示在一段延长的时期内 CPU 占用率为 100%,很有可能是陷入了死循环。甚至如果该程序“仅仅”是占用较多资源,而不是崩溃了,也需要将它识别出来并进行处理。

     

    在这里,要使用的工具是 vmstat 命令,该命令可提供关于各种系统资源和各种与之相关的性能问题的简明信息。

    vmstat 命令报告了关于内核线程的统计信息,包括处于运行和等待队列中的、内存中的、页面调度中的、磁盘中的、中断、系统调用、上下文切换和 CPU 活动的内核线程。所报告的 CPU 活动是用户模式、系统模式、空闲时间和等待磁盘 I/O 的百分比细分类目。

    注:如果使用 vmstat 命令时不带任何选项,或者只带有间隔和任意的计数参数,例如 vmstat 2 10,那么第一行数字为自系统重新引导以来的平均值。

    作为一个 CPU 监视器,vmstat 命令比 iostat 命令优先级要高,因为 vmstat 命令是滚动的,使得它的每报告一行的输出更容易扫描,并且如果有很多磁盘连接到系统中,由此所引起的开销更少。

     

    下面的例子会帮助您识别一个程序失控时或过度占用 CPU 以至于不能在一个多用户环境中运行的情况。

    # vmstat 2

    kthr memory page faults cpu

    ----- ----------- ------------------------------------ -----------

    r b avm fre re pi po fr sr cy in sy cs us sy id wa

    1 0 22478 1677 0 0 0 0 0 0 188 1380 157 57 32 0 10

    1 0 22506 1609 0 0 0 0 0 0 214 1476 186 48 37 0 16

    0 0 22498 1582 0 0 0 0 0 0 248 1470 226 55 36 0 9

     

    2 0 22534 1465 0 0 0 0 0 0 238 903 239 77 23 0 0

    2 0 22534 1445 0 0 0 0 0 0 209 1142 205 72 28 0 0

    2 0 22534 1426 0 0 0 0 0 0 189 1220 212 74 26 0 0

    3 0 22534 1410 0 0 0 0 0 0 255 1704 268 70 30 0 0

    2 1 22557 1365 0 0 0 0 0 0 383 977 216 72 28 0 0

     

    2 0 22541 1356 0 0 0 0 0 0 237 1418 209 63 33 0 4

    1 0 22524 1350 0 0 0 0 0 0 241 1348 179 52 32 0 16

    1 0 22546 1293 0 0 0 0 0 0 217 1473 180 51 35 0 14

     

    这个输出结果显示了在一个繁忙的多用户系统中引入一个有死循环的程序所带来的效果。最开始的三个报告(摘要已被删除)表明系统稳定在用户模式 50—55%、系统模式 30—35% 和 I/O 等待 10—15%。当循环程序开始运行,所有的 CPU 周期被占用。因为循环程序不进行 I/O,所以它可以占有前面因为 I/O 等待而未用的所有周期。更糟糕的是这意味着,当一个有用进程放弃 CPU 的使用权时,这个进程总是准备占用 CPU。因为死循环程序的优先级与所有其它前台进程一样,所以当另一个进程变得可调度时它也没必要让出 CPU 的使用权。该程序运行大约 10 秒钟(五个报告),然后由 vmstat 命令报告的活动恢复到较正常的模式。

     

    CPU 统计信息在设备中断负载很高的系统上会有一定程度的失真。这种情况是因为该工具是对定时器中断采样。定时器是优先级最低的设备,所以它很容易被其它中断抢先。为了消除失真,当操作系统版本晚于 AIX 4.3.3 时,采用了一种不同的方法来对定时器进行采样。

    注:对对称多处理系统 us、sy、id 和 wa 几列只是对各处理器求平均值(sar 命令可以报告每个处理器的统计信息)。

    一个 I/O 等待和空闲时间只能从未决 I/O 的状态来区分。如果有一个未决磁盘 I/O,并且处理器不忙,那么这是一个 I/O 等待时间。AIX 4.3.3 和其后的系统中用一个增强的方法来计算花费在磁盘 I/O 上的 CPU 时间(wio 时间)所占的百分比。

     

    在最佳使用时,CPU 在 100% 的时间中都在工作。在单用户系统中更是这样,这里不需要共享 CPU。总的来说,如果 us + sy 时间低于 90%,则不认为该单用户系统 CPU 受限制。但是,如果在一个多用户系统中 us + sy时间超过 80%,其中的进程将要花时间在运行队列中等待。响应时间和吞吐量会受损害。

     

    要检查 CPU 是否是瓶颈,考虑 vmstat 报告中的四个 cpu 列和两个 kthr(内核线程)列,也应该查看 faults 列。

     

    cpu列 在该时间间隔内使用 CPU 时间的百分比细分。cpu 列如下:

    us参数 us 列显示了用户模式所消耗的 CPU 时间。一个 UNIX 进程可以在用户模式下执行,也可以在系统(内核)模式下执行。当在用户模式下执行时,进程在它自己的应用程序代码中之行,不需要内核资源来进行计算、管理内存或设置变量。

     

    sy参数

    sy 列详细显示了 CPU 在系统模式下执行一个线程所花时间的百分比。包括内核进程(kprocs)和其它需要访问内核资源的进程所消耗的 CPU 资源。如果一个进程需要内核资源,它必须执行一个系统调用,并因此被切换到系统模式从而可以使用该资源。例如,对一个文件的读或写操作需要内核资源来打开文件、寻找指定的位置和读写数据,除非使用内存映射文件。

     

    id参数

    id 列显示了没有未决本地磁盘 I/O 时 CPU 空闲或等待时间的百分比。如果没有线程可以执行(运行队列为空)系统调度一个叫做wait 的线程,也就是 idlekproc。在一个对称多处理系统中,每个处理器都有一个 wait 线程可调度。由 ps 命令(带有 -k 或 -g 0选项)将它确定为kproc 或 wait。如果报告中 ps 显示这个线程的总计时间高,这表明存在显著的时期,没有其它线程在这个 CPU 上准备运行或等待执行。系统因此大部分时间或任务空闲和等待新任务。

    如果没有未决 I/O,所有用于等待的时间归入空闲时间中。在4.3.2版或更早的操作系统中,访问远程磁盘(安装 NFS磁盘)被当作空闲时间(有少量 sy 时间来执行 NFS 请求),因为没有对本地磁盘的未决 I/O 请求。在 AIX 4.3.3 和以后的系统中,NFS 通过缓冲区高速缓存,在这些例程中的等待被放入 wa 中统计。

     

    wa参数

    wa 列详细显示了有未决本地磁盘 I/O 时 CPU 空闲的时间百分比(在 AIX 4.3.3和以后版本的系统中,对安装了 NFS 的磁盘也是这样)。如果当等待正在运行时至少有一个未完成的磁盘 I/O,该时间归入等待 I/O 的时间。除非该进程使用异步 I/O,否则对磁盘的 I/O 请求使调用线程被阻塞(或睡眠)直到请求被完成。一旦进程的 I/O 请求完成,该进程被放入运行队列中。如果 I/O 很快完成,该进程可以使用更多的 CPU 时间。

    wa 的值如果超过 25%,就表明磁盘子系统可能没有被正确平衡,或者这也可能是磁盘工作负荷很重的结果。

     

    Kthr列 每秒钟在采样间隔上对各种队列中的内核线程数求得的平均值。kthr 列如下:

     

    r参数

    可运行的内核线程平均数目,包括正在运行的线程和等待 CPU 的线程。如果这个数字大于 CPU 的数目,至少有一个线程要等待 CPU,等待 CPU 的线程越多,越有可能对性能产生影响。

     

    b参数

    每秒 VMM 等待队列中的内核线程平均数。包括正在等待文件系统I/O 的线程,或由于内存装入控制而被挂起的线程。

    如果进程由于内存装入控制而被挂起,在 vmstat 报告中的阻塞列(b)表明线程数目增加,而不是运行队列中线程数目增加。

     

    p参数

    对与 vmstat -I,是每秒等待原始设备 I/O 的线程数目。等待文件系统 I/O 的线程不包括在这里。

     

    faults列 关于进程控制的信息,如陷阱和中断率。faults 列如下:

     

    in参数

    在该时间间隔中观测到的每秒设备中断数。额外信息可见用 vmstat 命令评估磁盘性能。

     

    sy参数

    在该时间间隔中观测到的每秒系统调用次数。通过明确的系统调用,用户进程可以使用资源。这些调用命令内核为调用线程执行操作,并在内核和该进程之间交换数据。因为,工作负荷和应用程序变化很大,不同的调用执行不同的功能,所以不可能定义每秒钟有多少系统调用才算太多。但是通常来讲,在一个单处理器系统上当 sy 列增大到超过每秒钟 10000 个调用, 应进行进一步的调查(在一个对称多处理系统上,这个数字为每个处理器每秒钟 10000 个调用)。其中一个原因可能是“轮询”子例程,象 select() 子例程。对这列,建议进行一个基准评估,给出正常 sy 值的一个计数。

     

    cs参数

    在该时间间隔中观测到的每秒钟上下文切换次数。物理上的 CPU 资源被分为每个 10 毫秒的逻辑时间片。假设一个线程被调度运行,它将一直运行直到它的时间片用完、直到被抢先或直到它自己主动放弃 CPU 控制权。当另一个线程被赋予 CPU 控制权时,必须保存前一个线程的上下文或工作环境,并载入当前线程的上下文。操作系统有一个很有效的上下文切换过程,所以每次切换并不耗费资源。任何上下文切换的显著增加,如当 cs 比磁盘 I/O 和网络包速率高的多,都应进行进一步调查。

    要显示引导后的统计信息摘要,请输入:

    vmstat

    要显示 2 秒时间间隔的 5 个摘要,请输入:

    vmstat 2 5第一次摘要包含引导后的时间统计信息。

    要显示引导后包括逻辑磁盘 scdisk13 和scdisk14 的统计信息摘要,请输入:

    vmstat scdisk13 scdisk14

    要显示派生统计信息,请输入:

    vmstat  -f

    要显示各事件的计数,请输入:

    vmstat -s

    要显示 vmstat的每一输出栏旁边的时间戳记,请输入:

    vmstat -t

    要以另一套输出栏显示新的 I/O 定向视图,请输入:

    vmstat -I

    要显示所有可用的 VMM 统计信息,请输入:

    vmstat -vs

     vmstat 是用来实时查看内存使用情况,反映的情况比用top直观一些.

    如果直接使用,只能得到当前的情况,最好用个时间间隔来采集

    vmstat T 其中T用具体的时间标示,单位是 秒 例如:vmstat 5 表格每隔5秒采集一次.

    这样在刷新的时候就能比较系统的看到那个列不正常的

    procs:

    r-->;在运行队列中等待的进程数

    b-->;在等待io的进程数

    w-->;可以进入运行队列但被替换的进程

     

    memoy

    swap-->;现时可用的交换内存(k表示)

    free-->;空闲的内存(k表示)

     

    pages

    re--》回收的页面

    mf--》非严重错误的页面

    pi--》进入页面数(k表示)

    po--》出页面数(k表示)

    fr--》空余的页面数(k表示)

    de--》提前读入的页面中的未命中数

    sr--》通过时钟算法扫描的页面

     

    disk 显示每秒的磁盘操作。 s表示scsi盘,0表示盘号

     

    fault 显示每秒的中断数

    in--》设备中断

    sy--》系统中断

    cy--》cpu交换

     

    cpu 表示cpu的使用状态

    cs--》用户进程使用的时间

    sy--》系统进程使用的时间

    id--》cpu空闲的时间

     

     

    其中:

    如果 r经常大于 4 ,且id经常少于40,表示cpu的负荷很重。

    如果pi,po 长期不等于0,表示内存不足。

    如果disk 经常不等于0, 且在 b中的队列 大于3, 表示 io性能不好。

     

     

    Linux下vmstat输出释疑:

     

    Vmstat

    procs -----------memory---------- ---swap-------io---- --system-- ----cpu----

    r b swpd free buff cache si so bi bo in cs us sy idwa

    0 0 100152 2436 97200 289740 0 1 34 45 99 33 0 0 990

     

    procs

    r 列表示运行和等待cpu时间片的进程数,如果长期大于1,说明cpu不足,需要增加cpu。

    b 列表示在等待资源的进程数,比如正在等待I/O、或者内存交换等。

    cpu 表示cpu的使用状态

    us 列显示了用户方式下所花费 CPU 时间的百分比。us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期大于50%,需要考虑优化用户的程序。

    sy 列显示了内核进程所花费的cpu时间的百分比。这里us + sy的参考值为80%,如果us+sy大于 80%说明可能存在CPU不足。

    wa 列显示了IO等待所占用的CPU时间的百分比。这里wa的参考值为30%,如果wa超过30%,说明IO等待严重,这可能是磁盘大量随机访问造成的,也可能磁盘或者磁盘访问控制器的带宽瓶颈造成的(主要是块操作)。

    id 列显示了cpu处在空闲状态的时间百分比

    system 显示采集间隔内发生的中断数

    in 列表示在某一时间间隔中观测到的每秒设备中断数。

    cs列表示每秒产生的上下文切换次数,如当 cs 比磁盘 I/O 和网络信息包速率高得多,都应进行进一步调查。

    memory

    swpd 切换到内存交换区的内存数量(k表示)。如果swpd的值不为0,或者比较大,比如超过了100m,只要si、so的值长期为0,系统性能还是正常

    free 当前的空闲页面列表中内存数量(k表示)

    buff 作为buffer cache的内存数量,一般对块设备的读写才需要缓冲。

    cache: 作为page cache的内存数量,一般作为文件系统的cache,如果cache较大,说明用到cache的文件较多,如果此时IO中bi比较小,说明文件系统效率比较好。

    swap

    si 由内存进入内存交换区数量。

    so由内存交换区进入内存数量。

    IO

    bi 从块设备读入数据的总量(读磁盘)(每秒kb)。

    bo 块设备写入数据的总量(写磁盘)(每秒kb)

    这里我们设置的bi+bo参考值为1000,如果超过1000,而且wa值较大应该考虑均衡磁盘负载,可以结合iostat输出来分析。

     

     

    Solairs系统下vmstat输出释疑

     

    vmstat 5 5

    procs memory page disk faults cpu

    r b w swap free re mf pi po fr de sr s1 s1 -- -- insy cs us sy id

    0 0 0 704968 207640 0 1 2 0 0 0 0 0 0 0 0 302 6 310 0 100

    0 0 0 705048 206728 1 2 0 0 0 0 0 0 0 0 0 302 4 340 0 100

    0 0 0 705048 206728 0 0 0 0 0 0 0 0 0 0 0 302 3 350 0 100

    0 0 0 705048 206728 0 0 0 0 0 0 0 0 0 0 0 301 3 340 0 100

    0 0 0 705048 206728 0 0 0 0 0 0 0 0 0 0 0 302 6 350 0 100

    procs

    r 列表示在运行队列中等待的进程数。

    b 列表示在等待资源的进程数,比如正在等待I/O、或者内存交换等。

    w 列表示可以进入运行队列但被交换出来的进程

    cpu 表示cpu的使用状态

    us 列显示了用户方式下所花费 CPU 时间的百分比。一个 UNIX 进程可以在用户方式下执行,也可以在系统(内核)方式下执行。当在用户方式下时,进程在它自己的应用程序代码中执行,不需要内核资源来进行计算、管理内存或设置变量。

    sy 列详述了 CPU 在系统方式下执行一个进程所花时间的百分比。这包括内核进程(kprocs)和其它需要访问内核资源的进程所消耗的 CPU 资源。如果一个进程需要内核资源,它必须执行一个系统调用,并由此切换到系统方式从而使该资源可用。例如,对一个文件的读或写操作需要内核资源来打开文件、寻找特定的位置,以及读或写数据,除非使用内存映射文件。这里us + sy的参考值为80%,如果us+sy大于 80%说明可能存在CPU不足。

    id 列显示了没有未决本地磁盘 I/O 时 CPU 空闲或等待的时间百分比。

    faults 显示采集间隔内发生的中断数

    in 列表示在某一时间间隔中观测到的每秒设备中断数。iostat命令输出更有参考意义。

    sy 列表示在某一时间间隔中观测到的每秒系统调用次数。通过明确的系统调用,用户进程可以使用资源。这些调用指示内核执行调用线程的操作,并在内核和该进程之间交换数据。因为工作负载和应用程序变化很大,不同的调用执行不同的功能,所以不可能定义每秒钟有多少系统调用才算太多。这里设置参考值为10000,超过10000,用户需要注意。

    cs 列表示,如当 cs 比磁盘 I/O 和网络信息包速率高得多,都应进行进一步调查。

    memory

    swap 当前可用内存交换区容量(k表示)。

    free 当前的空闲页面列表中内存数量(k表示)

    page

    re 列表示回收的页面数。

    mf 列表示小级别错误计数。

    pi 列表示进入页面数 (k表示)。

    po 列表示出页面数(k表示)。

    fr 列表示空余的页面数(k表示)。

    de 列表示提前读入的页面中的未命中数。

    sr 列表示通过时钟算法扫描的页面计数

     

    solairs下iostat释疑

     

    iostat -xtc 5 2

    extended device statistics tty cpu

    device r/s w/s kr/s kw/s wait actv svc_t %w %b tintout us sy wt id

    sd1 0.3 0.0 3.4 0.1 0.0 0.0 13.2 0 0 0 0 0 0 0 100

    sd15 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0

    nfs1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0

    extended device statistics tty cpu

    device r/s w/s kr/s kw/s wait actv svc_t %w %b tintout us sy wt id

    sd1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 77 0 0 0 100

    sd15 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0

    nfs1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0

     

    tty和CPU使用率报告

    tin 显示了系统为所有 tty 读取的字符总数。

    tout 显示了系统为所有 tty 写入的字符总数。

    us 显示了在用户级应用程序在缺省的优先级别执行时的 CPU 使用率百分比。

    sy 显示了在用户级应用程序在降低优先级执行时的 CPU 使用率百分比。

    wt 显示了在系统级(内核)执行时生成的 CPU 使用率。

    id 显示了 CPU 空闲期间系统有未完成的磁盘 I/O 请求时的时间百分比。

    磁盘使用率报告

    device 被统计的硬盘设备名,包括nfs设备。

    r/s 表示每秒钟读的次数

    w/s 表示每秒钟写的次数

    kr/s 表示每秒钟读的K字节数

    kw/s 表示每秒钟写的K字节数

    wait 表示平均多少个传输等待被处理,相当于读写等待队列长度

    actv 表示平均多少个传输从读写等待队列中移出做处理

    svc_t 表示每次硬盘传输平均耗费的时间,以毫秒为单位,这里我们设置的参考值为30ms,超过说明硬盘负载太多

    %w 表示每次传输所消耗时间里面,等待所占的百分比

    %b 表示硬盘忙的时间所占百分比,这里我们设置参考值为5%,超过5%说明硬盘负载太多,最好采取以下步骤:

    1.)调整应用,令其使用磁盘i/o更加有效率,可以通过修改磁盘队列、使用应用服务器的cache

    2.)将文件系统分布到2个或多个磁盘上,并使用volume manager/disksuite的条带化特点

    3.) 增加系统参数值,如inodecache , ufs_ninode。

     

     

    AIX下vmstat释疑:

     

    # vmstat 5 20

    kthr   memory              page              faults       cpu

    ----- ----------- ------------------------------------ -----------

    r b avm    fre   re pi po  fr  sr   cy  in sy   cs   us sy id wa

    1 1 244528 1227  0  3  3  56   151  0  4041420 1415  4  2  88 6

    2 6 244538 1241  0  39 148 2424 3511 0  904 4660 7571 49 12 2 38

    5 3 244540 791   0  2  221 3937 6077 0 1183 6605 24619 44 34 1 21

    1 7 245326 1009  0  11 331 1071 1934 0  884 3788 13000 23 25 0 52

     

    分析如下:

    kthr

    kthr列表示每秒钟在采样间隔时间上对各种队列中的内核线程数求得的平均值

    r 列表示可运行的内核线程平均数,包括正在运行的线程和正在等待CPU的线程。如果这个数字大于 CPU 的数目,至少有一个线程要等待 CPU,等待 CPU 的线程越多,越有可能对性能产生影响。

    b 列表示每秒 VMM 等待队列中的内核线程平均数。这包括正在等待文件系统 I/O 的线程,或由于内存装入控制而暂挂的线程。这里参考值为2,大于2表示被阻塞列线程数目太多。

    [b] !阻塞线程数目太多

    CPU

    us 列显示了用户方式下所花费 CPU 时间的百分比。一个 UNIX 进程可以在用户方式下执行,也可以在系统(内核)方式下执行。当在用户方式下时,进程在它自己的应用程序代码中执行,不需要内核资源来进行计算、管理内存或设置变量。

    sy 列详述了 CPU 在系统方式下执行一个进程所花时间的百分比。这包括内核进程(kprocs)和其它需要访问内核资源的进程所消耗的 CPU 资源。如果一个进程需要内核资源,它必须执行一个系统调用,并由此切换到系统方式从而使该资源可用。例如,对一个文件的读或写操作需要内核资源来打开文件、寻找特定的位置,以及读或写数据,除非使用内存映射文件。这里us + sy的参考值为80%,如果us+sy大于 80%说明可能存在CPU不足。

    id 列显示了没有未决本地磁盘 I/O 时 CPU 空闲或等待的时间百分比。

    wa 列详细显示了暂挂本地磁盘 I/O 和 NFS 加载的磁盘的 CPU 空闲百分比。这里参考值为25%,大于25% 可能表示磁盘子系统可能没有被正确平衡,或者这也可能是磁盘密集工作负载的结果。

    [us]+[sy] !IO不平衡

    [wa] 正常

    fault

    in 列表示在某一时间间隔中观测到的每秒设备中断数。iostat命令输出更有参考意义。

    sy 列表示在某一时间间隔中观测到的每秒系统调用次数。通过明确的系统调用,用户进程可以使用资源。这些调用指示内核执行调用线程的操作,并在内核和该进程之间交换数据。因为工作负载和应用程序变化很大,不同的调用执行不同的功能,所以不可能定义每秒钟有多少系统调用才算太多。这里设置参考值为10000,超过10000,用户需要注意。

    cs 列表示,如当 cs 比磁盘 I/O 和网络信息包速率高得多,都应进行进一步调查。

    [sy] 正常

    memory

    avm 列表示在收集 vmstat 样本时存在的活动虚拟内存页面数(4k为单位)。理想情况下, avm 应该比总 RAM 数小。如果不是,可能会出现一些虚拟内存页面调度量。有多少页面调度发生取决于两个值之间的差值。记住,虚拟内存的概念是提供给我们寻址大于实内存容量的能力(一些在 RAM 内存中,而另一些在调页空间中)。但是如果虚拟内存远大于实内存,可能造成过度的页面调度,从而导致延时。如果 avm 小于 RAM,那么当 RAM 中填满文件页时就会引起调页空间的页面调度。这种情况下,调整 minperm、maxperm 和 maxclient的值可以减少调页空间的页面调度量。

    fre 列显示出空闲内存页面的平均数量(4k为单位)。VMM 在空闲列表上保存的最少页面数由 minfree 参数决定。这里的参考值为maxfree的缺省值720,小于720说明存在内存系统颠簸。

    [fre] 正常

    [avm] avm的值约为:958MB

    page

    pi 列详细描述了从调页空间调入的页数。调页空间是驻留在磁盘上的虚拟内存的一部分。当内存过量使用时,它用作溢出。调页空间由用于存储从实内存中窃取到的工作组页面的逻辑卷组成。当进程访问一个窃取页时,产生了一个缺页故障,这一页必须从调页空间读入内存。这里设置pi的参考值为5,大于5说明内存不足。

    po 列显示了调出到调页空间的页面数(速率)。无论什么时候窃取工作存储器的一页,如果它仍未驻留在调页空间中或已被修改,那它会被写入调页空间。如果不被再次访问,它会留在页面调度设备中直到进程终止或放弃空间。如果包含在出故障页面中的后续地址引用导致缺页故障,那么这些页面将会由系统个别调进。当一个进程正常终止,任何分配给该进程的调页空间将被释放。

    fr 列表示在一定时间间隔内根据页面替换算法每秒所释放的页数。当VMM 页面替换例程扫描页面帧表(Page Frame Table,PFT)时,它使用一些条件选取要窃取的页面以插入到可用内存帧的空闲列表中。

    sr 列表示在一定时间间隔内根据页面替换算法每秒所检查的页面数。页面替换算法在可以窃取足够的页面以满足页面替换线程的需要之前可能不得不扫描许多页面帧。

    cy 列表示每秒页面替换代码扫描了 PFT 多少次。因为插入空闲列表可以不需要完全扫描 PFT,并且因为所有的 vmstat 字段报告为整数,这一字段通常为 0。

    这里设置fr:sr的参考值为3,超过说明内存不足。

    [pi] !存在内存不足

    [fr:sr] 正常

    AIX命令iostat释疑

    # iostat hdisk1 hdisk2 5 5

     

    tty: tin tout avg-cpu: % user % sys % idle % iowait

    0.0 0.3 0.2 0.4 99.4 0.1

     

    Disks: % tm_act Kbps tps Kb_read Kb_wrtn

    hdisk2 0.1 1.0 0.2 45090 51075

    hdisk1 0.0 0.0 0.0 0 0

     

    tty: tin tout avg-cpu: % user % sys % idle % iowait

    0.0 70.6 45 54 99.4 0.0

     

    Disks: % tm_act Kbps tps Kb_read Kb_wrtn

    hdisk2 0.0 0.0 0.0 0 0

    hdisk1 0.0 0.0 0.0 0 0

     

    tty: tin tout avg-cpu: % user % sys % idle % iowait

    0.0 70.6 0.0 0.4 99.6 0.0

     

    Disks: % tm_act Kbps tps Kb_read Kb_wrtn

    hdisk2 0.0 0.0 0.0 0 0

    hdisk1 0.0 0.0 0.0 0 0

    分析结果

    tty和CPU使用率报告

    tin 显示了系统为所有 tty 读取的字符总数。

    tout 显示了系统为所有 tty 写入的字符总数。

    % user 显示了在用户级(应用程序)执行时生成的CPU 使用率百分比。

    % sys 显示了在系统级(内核)执行时生成的CPU 使用率百分比。

    % idle 显示了在 CPU 空闲并且系统没有未完成的磁盘 I/O 请求时的时间百分比。

    % iowait 显示了 CPU 空闲期间系统有未完成的磁盘 I/O 请求时的时间百分比。

    [user][+][sys] !CPU能力不足

    [wait] 正常

    磁盘使用率报告

    % tm_act 表示物理磁盘处于活动状态的时间百分比(驱动器的带宽使用率)。

    Kbps 表示以 KB 每秒为单位的传输(读或写)到驱动器的数据量。

    tps 表示每秒钟输出到物理磁盘的传输次数。一次传输就是一个对物理磁盘的 I/O 请求。多个逻辑请求可被并为对磁盘的一个单一 I/O 请求。传输具有不确定的大小。

    Kb_read 读取的 KB 总数。

    Kb_wrtn 写入的 KB 总数。

    磁盘负载均衡评估 正常

    带宽使用评估 带宽值为:0Kbps

     

    Hp-UNIX 命令vmstat释疑

     

    # vmstat 5 5

    procs memory page faults cpu

    r b w avm free re at pi po fr de sr in sy cs us syid

    2 0 0 52260 24324 9 4 0 0 0 0 1 109 427 81 2 1 97

    2 0 0 52260 24285 0 0 0 0 0 0 0 110 207 90 0 0 99

    1 0 0 56211 24285 0 0 0 0 0 0 0 106 192 80 0 0 100

    1 0 0 56211 24285 0 0 0 0 0 0 0 107 152 76 0 0 100

    2 0 0 56552 24285 0 0 0 0 0 0 0 106 154 72 0 0 100

     

    分析结果

    procs

    r 列表示在运行队列中等待的进程数。

    b 列表示在等待资源的进程数,比如正在等待I/O、或者内存交换等。

    w 列表示可以进入运行队列但被交换出来的进程 。

    [b] 正常

    cpu 表示cpu的使用状态

    us 列显示了用户方式下所花费 CPU 时间的百分比。一个 UNIX 进程可以在用户方式下执行,也可以在系统(内核)方式下执行。当在用户方式下时,进程在它自己的应用程序代码中执行,不需要内核资源来进行计算、管理内存或设置变量。

    sy 列详述了 CPU 在系统方式下执行一个进程所花时间的百分比。这包括内核进程(kprocs)和其它需要访问内核资源的进程所消耗的 CPU 资源。如果一个进程需要内核资源,它必须执行一个系统调用,并由此切换到系统方式从而使该资源可用。例如,对一个文件的读或写操作需要内核资源来打开文件、寻找特定的位置,以及读或写数据,除非使用内存映射文件。这里us + sy的参考值为80%,如果us+sy大于 80%说明可能存在CPU不足。

    id 列显示了没有未决本地磁盘 I/O 时 CPU 空闲或等待的时间百分比。

    [us]+[sy] 正常

    fault 显示采集间隔内发生的中断数

    in 列表示在某一时间间隔中观测到的每秒设备中断数。iostat命令输出更有参考意义。

    sy 列表示在某一时间间隔中观测到的每秒系统调用次数。通过明确的系统调用,用户进程可以使用资源。这些调用指示内核执行调用线程的操作,并在内核和该进程之间交换数据。因为工作负载和应用程序变化很大,不同的调用执行不同的功能,所以不可能定义每秒钟有多少系统调用才算太多。这里设置参考值为10000,超过10000,用户需要注意。

    cs 列表示,如当 cs 比磁盘 I/O 和网络信息包速率高得多,都应进行进一步调查。

    [sy] 正常

    memory

    avm 当前激活的虚拟内存数量(k表示)。

    free 当前的空闲页面列表中内存数量(k表示)

    [free] 正常

    page

    re 列表示回收的页面数。

    at 列表示地址翻译错误计数。

    pi 列表示进入页面数 (k表示)。

    po 列表示出页面数(k表示)。

    fr 列表示空余的页面数(k表示)。

    de 列表示提前读入的页面中的未命中数。

    sr 列表示通过时钟算法扫描的页面计数

    [po] 正常

    [fr:sr] 正常

     

     

    Hp-unix下iostat释疑

     

     

    # iostat 5 5

     

    device bps sps msps

     

    c0t6d0 0 0.0 1.0

     

    c0t6d0 2 1.0 1.0

     

    c0t6d0 2 0.8 1.0

     

    c0t6d0 4 2.0 1.0

     

    c0t6d0 2 1.0 1.0

    分析结果

    缓冲区性能分析

    device: iostat统计的设备名称。

    bps: 每秒该设备传输的K字节数。

    sps: 每秒检索该设备次数。

    msps: 平均每次检索所花费的时间,单位毫秒。

    [bps] 正常

     

     

    sar

    sar 命令行的常用格式:

    sar [options] [-A] [-o file] t [n]

     

    在命令行中,n 和t 两个参数组合起来定义采样间隔和次数,t为采样间隔,是必须有

    的参数,n为采样次数,是可选的,默认值是1,-o file表示将命令结果以二进制格式

    存放在文件中,file 在此处不是关键字,是文件名。options为命令行选项,sar命令

    的选项很多,下面只列出常用选项:

          -A:所有报告的总和。

             -u:CPU利用率

             -v:进程、I节点、文件和锁表状态。

             -d:硬盘使用报告。

             -r:没有使用的内存页面和硬盘块。

             -g:串口I/O的情况。

    -b:缓冲区使用情况。

    -a:文件读写情况。

    -c:系统调用情况。

    -R:进程的活动情况。

    -y:终端设备活动情况。

    -w:系统交换活动。

     

    下面将举例说明。

     

    例一:使用命令行 sar -u t n

     

    例如,每60秒采样一次,连续采样5次,观察CPU 的使用情况,并将采样结果以二进制

    形式存入当前目录下的文件zhou中,需键入如下命令:

     

    # sar -u -o zhou 60 5

     

    屏幕显示:

     

      SCO_SV   scosysv 3.2v5.0.5 i80386   10/01/2001

         14:43:50   %usr   %sys  %wio    %idle(-u)

         14:44:50   0     1    4      94

         14:45:50   0     2    4      93

         14:46:50   0     2    2      96

         14:47:50   0     2    5      93

         14:48:50   0     2    2      96

         Average    0     2    4      94

    在显示内容包括:

      %usr:CPU处在用户模式下的时间百分比。

       %sys:CPU处在系统模式下的时间百分比。

       %wio:CPU等待输入输出完成时间的百分比。

       %idle:CPU空闲时间百分比。

    在所有的显示中,我们应主要注意%wio和%idle,%wio的值过高,表示硬盘存在I/O瓶颈,

    %idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,

    此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表

    明系统中最需要解决的资源是CPU。

    如果要查看二进制文件zhou中的内容,则需键入如下sar命令:

        # sar -u -f zhou

    可见,sar命令即可以实时采样,又可以对以往的采样结果进行查询。

     

    例二:使用命行sar -v t n

     

    例如,每30秒采样一次,连续采样5次,观察核心表的状态,需键入如下命令:

     

    # sar -v 30 5

     

    屏幕显示:

           SCO_SV scosysv 3.2v5.0.5i80386 10/01/2001

           10:33:23 proc-sz ov inod-sz ov file-sz ovlock-sz   (-v)

    10:33:53 305/ 321  0 1337/2764  0 1561/1706 0 40/ 128

    10:34:23 308/ 321  0 1340/2764  0 1587/1706 0 37/ 128

    10:34:53 305/ 321  0 1332/2764  0 1565/1706 0 36/ 128

    10:35:23 308/ 321  0 1338/2764  0 1592/1706 0 37/ 128

    10:35:53 308/ 321  0 1335/2764  0 1591/1706 0 37/ 128

     

    显示内容包括:

     

    proc-sz:目前核心中正在使用或分配的进程表的表项数,由核心参数MAX-PROC控制。

     

      inod-sz:目前核心中正在使用或分配的i节点表的表项数,由核心参数

    MAX-INODE控制。

     

      file-sz: 目前核心中正在使用或分配的文件表的表项数,由核心参数MAX-FILE控

    制。

     

      ov:溢出出现的次数。

     

      Lock-sz:目前核心中正在使用或分配的记录加锁的表项数,由核心参数MAX-FLCKRE

    控制。

     

    显示格式为

     

    实际使用表项/可以使用的表项数

     

    显示内容表示,核心使用完全正常,三个表没有出现溢出现象,核心参数不需调整,如

    果出现溢出时,要调整相应的核心参数,将对应的表项数加大。

     

    例三:使用命行sar -d t n

    例如,每30秒采样一次,连续采样5次,报告设备使用情况,需键入如下命令:

    # sar -d 30 5

    屏幕显示:

          SCO_SV scosysv 3.2v5.0.5i80386 10/01/2001

    11:06:43 device %busy   avque   r+w/s  blks/s  avwait avserv (-d)

    11:07:13 wd-0   1.47   2.75   4.67   14.73   5.50 3.14

    11:07:43 wd-0   0.43   18.77   3.07   8.66   25.11 1.41

    11:08:13 wd-0   0.77   2.78   2.77   7.26   4.94 2.77

    11:08:43 wd-0   1.10   11.18   4.10   11.26   27.32 2.68

    11:09:13 wd-0   1.97   21.78   5.86   34.06   69.66 3.35

    Average wd-0   1.15   12.11   4.09   15.19   31.12 2.80

     

    显示内容包括:

    device: sar命令正在监视的块设备的名字。

       %busy: 设备忙时,传送请求所占时间的百分比。

       avque: 队列站满时,未完成请求数量的平均值。

       r+w/s: 每秒传送到设备或从设备传出的数据量。

       blks/s: 每秒传送的块数,每块512字节。

       avwait: 队列占满时传送请求等待队列空闲的平均时间。

       avserv: 完成传送请求所需平均时间(毫秒)。

     

    在显示的内容中,wd-0是硬盘的名字,%busy的值比较小,说明用于处理传送请求的有

    效时间太少,文件系统效率不高,一般来讲,%busy值高些,avque值低些,文件系统

    的效率比较高,如果%busy和avque值相对比较高,说明硬盘传输速度太慢,需调整。

    例四:使用命行sar -b t n

    例如,每30秒采样一次,连续采样5次,报告缓冲区的使用情况,需键入如下命令:

    # sar -b 30 5

     

    屏幕显示:

      SCO_SV scosysv 3.2v5.0.5i80386 10/01/2001

    14:54:59 bread/s lread/s %rcache bwrit/s lwrit/s%wcache pread/s pwrit/s (-b)

    14:55:29 0  147  100  5  21  78   0   0

    14:55:59 0  186  100  5  25  79   0   0

    14:56:29 4  232   98  8  58  86   0   0

    14:56:59 0  125  100  5  23  76   0   0

    14:57:29 0   89  100  4  12  66   0   0

    Average  1  156   99  5  28  80   0   0

     

    显示内容包括:

    bread/s: 每秒从硬盘读入系统缓冲区buffer的物理块数。

    lread/s: 平均每秒从系统buffer读出的逻辑块数。

    %rcache: 在buffer cache中进行逻辑读的百分比。

    bwrit/s: 平均每秒从系统buffer向磁盘所写的物理块数。

    lwrit/s: 平均每秒写到系统buffer逻辑块数。

    %wcache: 在buffer cache中进行逻辑读的百分比。

    pread/s: 平均每秒请求物理读的次数。

    pwrit/s: 平均每秒请求物理写的次数。

     

    在显示的内容中,最重要的是%cache和%wcache两列,它们的值体现着buffer的使用效

    率,%rcache的值小于90或者%wcache的值低于65,应适当增加系统buffer的数量,buffer

    数量由核心参数NBUF控制,使%rcache达到90左右,%wcache达到80左右。但buffer参数

    值的多少影响I/O效率,增加buffer,应在较大内存的情况下,否则系统效率反而得不到

    提高。

    例五:使用命行sar -g t n

    例如,每30秒采样一次,连续采样5次,报告串口I/O的操作情况,需键入如下命令:

    # sar -g 30 5

     

    屏幕显示:

    SCO_SV scosysv 3.2v5.0.5i80386  11/22/2001

    17:07:03  ovsiohw/s  ovsiodma/s  ovclist/s (-g)

    17:07:33   0.00   0.00   0.00

    17:08:03   0.00   0.00   0.00

    17:08:33   0.00   0.00   0.00

    17:09:03   0.00   0.00   0.00

    17:09:33   0.00   0.00   0.00

    Average    0.00   0.00   0.00

     

    显示内容包括:

    ovsiohw/s:每秒在串口I/O硬件出现的溢出。

    ovsiodma/s:每秒在串口I/O的直接输入输出通道高速缓存出现的溢出。

    ovclist/s :每秒字符队列出现的溢出。

    在显示的内容中,每一列的值都是零,表明在采样时间内,系统中没有发生串口I/O溢

    出现象。

     

    sar命令的用法很多,有时判断一个问题,需要几个sar命令结合起来使用,比如,怀疑

    CPU存在瓶颈,可用sar -u 和sar -q来看,怀疑I/O存在瓶颈,可用sar -b、sar -u和

    sar-d来看

     

    Sar

    -A 所有的报告总和

    -a 文件读,写报告

    -B 报告附加的buffer cache使用情况

    -b buffer cache使用情况

    -c 系统调用使用报告

    -d 硬盘使用报告

    -g 有关串口I/O情况

    -h 关于buffer使用统计数字

    -m IPC消息和信号灯活动

    -n 命名cache

    -p 调页活动

    -q 运行队列和交换队列的平均长度

    -R 报告进程的活动

    -r 没有使用的内存页面和硬盘块

    -u CPU利用率

    -v 进程,i节点,文件和锁表状态

    -w 系统交换活动

    -y TTY设备活动

     

    -a 报告文件读,写报告

    sar –a 5 5

    SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/07/2002

    11:45:40 iget/s namei/s dirbk/s (-a)

    11:45:45 6 2 2

    11:45:50 91 20 28

    11:45:55 159 20 18

    11:46:00 157 21 19

    11:46:05 177 30 35

    Average 118 18 20

     

    iget/s 每秒由i节点项定位的文件数量

    namei/s 每秒文件系统路径查询的数量

    dirbk/s 每秒所读目录块的数量

    *这些值越大,表明核心花在存取用户文件上的时间越多,它反映着一些程序和应用文件系统产生的负荷。一般地,如果iget/s与namei/s的比值大于5,并且namei/s的值大于30,则说明文件系统是低效的。这时需要检查文件系统的自由空间,看看是否自由空间过少。

     

    -b 报告缓冲区(buffer cache)的使用情况

    sar -b 2 3

    SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/07/2002

    13:51:28 bread/s lread/s %rcache bwrit/s lwrit/s%wcache pread/s pwrit/s (-b)

    13:51:30 382 1380 72 131 273 52 0 0

    13:51:32 378 516 27 6 22 72 0 0

    13:51:34 172 323 47 39 57 32 0 0

    Average 310 739 58 58 117 50 0 0

     

    bread/s 平均每秒从硬盘(或其它块设备)读入系统buffer的物理块数

    lread/s 平均每秒从系统buffer读出的逻辑块数

    %rcache 在buffer cache中进行逻辑读的百分比(即100% - bread/lreads)

    bwrit/s 平均每秒从系统buffer向磁盘(或其它块设备)所写的物理块数

    lwrit/s 平均每秒写到系统buffer的逻辑块数

    %wcache 在buffer cache中进行逻辑写的百分比(即100% - bwrit/lwrit).

    pread/sgu 平均每秒请求进行物理读的次数

    pwrit/s 平均每秒请求进行物理写的次数

     

    *所显示的内容反映了目前与系统buffer有关的读,写活。在所报告的数字中,最重要的是%rcache和%wcache(统称为cache命中率)两列,它们具体体现着系统buffer的效率。衡量cache效率的标准是它的命中率值的大小。

    *如果%rcache的值小于90或者%wcache的值低于65,可能就需要增加系统buffer的数量。如果在系统的应用中,系统的I/O活动十分频繁,并且在内存容量配置比较大时,可以增加buffer cache,使%rcache达到95左右,%wcache达到80左右。

    *系统buffer cache中,buffer的数量由核心参数NBUF控制。它是一个要调的参数。系统中buffer数量的多少是影响系统I/O效率的瓶颈。要增加系统buffer数量,则要求应该有较大的内存配置。否则一味增加buffer数量,势必减少用户进程在内存中的运行空间,这同样会导致系统效率下降。

     

    -c 报告系统调用使用情况

    sar -c 2 3

    SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/07/2002

    17:02:42 scall/s sread/s swrit/s fork/s exec/srchar/s wchar/s (-c)

    17:02:44 2262 169 141 0.00 0.00 131250 22159

    17:02:46 1416 61 38 0.00 0.00 437279 6464

    17:02:48 1825 43 25 0.00 0.00 109397 42331

    Average 1834 91 68 0.00 0.00 225975 23651

     

    scall/s 每秒使用系统调用的总数。一般地,当4~6个用户在系统上工作时,每秒大约30个左右。

    sread/s 每秒进行读操作的系统调用数量。

    swrit/s 每秒进行写操作的系统调用数量。

    fork/s 每秒fork系统调用次数。当4~6个用户在系统上工作时,每秒大约0.5秒左右。

    exec/s 每秒exec系统调用次数。

    rchar/s 每秒由读操作的系统调用传送的字符(以字节为单位)。

    wchar/s 每秒由写操作的系统调用传送的字符(以字节为单位)。

    *如果scall/s持续地大于300,则表明正在系统中运行的可能是效率很低的应用程序。在比较

    典型的情况下,进行读操作的系统调用加上进行写操作的系统调用之和,约是scall的一半左右。

     

    -d 报告硬盘使用情况

    sar -d 2 3

    SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/07/2002

    17:27:49 device %busy avque r+w/s blks/s avwaitavserv (-d)

    17:27:51 ida-0 6.93 1.00 13.86259.41 0.00 5.00

    ida-1 0.99 1.00 17.33 290.100.00 0.57

    17:27:53 ida-0 75.50 1.0054.00 157.00 0.00 13.98

    ida-1 9.50 1.00 12.00 75.000.00 7.92

    17:27:55 ida-0 7.46 1.00 46.77213.93 0.00 1.60

    ida-1 17.41 1.00 57.71 494.530.00 3.02

    Average ida-0 29.85 1.00 38.14210.28 0.00 7.83

    ida-1 9.29 1.00 29.02 286.900.00 3.20

     

    device 这是sar命令正在监视的块设备的名字。

    %busy 设备忙时,运行传送请求所占用的时间。这个值以百分比表示。

    avque 在指定的时间周期内,没有完成的请求数量的平均值。仅在队列被占满时取这个值。

    r+w/s 每秒传送到设备或者从设备传送出的数据量。

    blks/s 每秒传送的块数。每块512个字节。

    avwait 传送请求等待队列空闲的平均时间(以毫秒为单位)。仅在队列被占满时取这个值。

    avserv 完成传送请求所需平均时间(以毫秒为单位)

    *ida-0和ida-1是硬盘的设备名字。在显示的内容中,如果%busy的值比较小,说明用于处理

    传送请求的有效时间太少,文件系统的效率不高。要使文件系统的效率得到优化,应使%busy的数值相对高一些,而avque的值应该低一些。

     

    -g 报告有关串口I/O情况

    sar -g 3 3

    SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/13/2002

    11:10:09 ovsiohw/s ovsiodma/s ovclist/s (-g)

    11:10:12 0.00 0.00 0.00

    11:10:15 0.00 0.00 0.00

    11:10:18 0.00 0.00 0.00

    Average 0.00 0.00 0.00

    ovsiohw/s 每秒在串囗I/O硬件出现的溢出。

    ovsiodma/s 每秒在串囗I/O的直接输入,输出信道高速缓存出现的溢出。

    ovclist/s 每秒字符队列出现的溢出。

     

    -m 报告进程间的通信活动(IPC消息和信号灯活动)情况

    sar -m 4 3

    SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/13/2002

    13:24:28 msg/s sema/s (-m)

    13:24:32 2.24 9.95

    13:24:36 2.24 21.70

    13:24:40 2.00 36.66

    Average 2.16 22.76

     

    msg/s 每秒消息操作的次数(包括发送消息的接收信息)。

    sema/s 每秒信号灯操作次数。

    *信号灯和消息作为进程间通信的工具,如果在系统中运行的应用过程中没有使用它们,那么由sar命令报告的msg 和sema的值都将等于0.00。如果使用了这些工具,并且其中或者msg/s大于100,或者sema/s大于100,则表明这样的应用程序效率比较低。原因是在这样的应用程序中,大量的时间花费在进程之间的沟通上,而对保证进程本身有效的运行时间必然产生不良的影响。

     

    -n 报告命名缓冲区活动情况

    sar -n 4 3

    SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/13/2002

    13:37:31 c_hitscmisses (hit %) (-n)

    13:37:35 1246 71 (94%)

    13:37:39 1853 81 (95%)

    13:37:43 969 56 (94%)

    Average 1356 69 (95%)

     

    c_hits cache命中的数量。

    cmisses cache未命中的数量。

    (hit %) 命中数量/(命中数理+未命中数量)。

    *不难理解,(hit %)值越大越好,如果它低于90%,则应该调整相应的核心参数。

     

    -p 报告分页活动

    sar -p 5 3

    SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/13/2002

    13:45:26 vflt/s pflt/s pgfil/s rclm/s (-p)

    13:45:31 36.25 50.20 0.00 0.00

    13:45:36 32.14 58.48 0.00 0.00

    13:45:41 79.80 58.40 0.00 0.00

    Average 49.37 55.69 0.00 0.00

     

    vflt/s 每秒进行页面故障地址转换的数量(由于有效的页面当前不在内存中)。

    pflt/s 每秒来自由于保护错误出现的页面故障数量(由于对页面的非法存,取引起的页面故障)。

    pgfil/s 每秒通过”页—入”满足vflt/s的数量。

    rclm/s 每秒由系统恢复的有效页面的数量。有效页面被增加到自由页面队列上。

    *如果vflt/s的值高于100,可能预示着对于页面系统来说,应用程序的效率不高,也可能分页参数需要调整,或者内存配置不太合适。

     

    -q 报告进程队列(运行队列和交换队列的平均长度)情况

    sar -q 2 3

    SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/13/2002

    14:25:50 runq-sz %runoccswpq-sz %swpocc (-q)

    14:25:52 4.0 50

    14:25:54 9.0 100

    14:25:56 9.0 100

    Average 7.3 100

    runq-sz 准备运行的进程运行队列。

    %runocc 运行队列被占用的时间(百分比)

    swpq-sz 要被换出的进程交换队列。

    %swpocc 交换队列被占用的时间(百分比)。

    *如果%runocc大于90,并且runq-sz的值大于2,则表明CPU的负载较重。其直接后果,可能使系统的响应速度降低。如果%swpocc大于20,表明交换活动频繁,将严重导致系统效率下降。解决的办法是加大内存或减少缓存区数量,从而减少交换及页—入,页—出活动。

     

    -r 报告内存及交换区使用情况(没有使用的内存页面和硬盘块)

    sar -r 2 3

    SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/14/2002

    10:14:19 freemem freeswp availrmem availsmem (-r)

    10:14:22 279729 6673824 93160 1106876

    10:14:24 279663 6673824 93160 1106876

    10:14:26 279661 6673824 93160 1106873

    Average 279684 6673824 93160 1106875

     

    freemem 用户进程可以使用的内存页面数,4KB为一个页面。

    freeswp 用于进程交换可以使用的硬盘盘块,512B为一个盘块。

     

    -u CPU利用率

    sar -u 2 3

    SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/14/2002

    10:27:23 %usr %sys %wio %idle (-u)

    10:27:25 2 3 8 88

    10:27:27 3 3 5 89

    10:27:29 0 0 0 100

    Average 2 2 4 92

    %usr cpu处在用户模式下时间(百分比)

    %sys cpu处在系统模式下时间(百分比)

    %wio cpu等待输入,输出完成(时间百分比)

    %idle cpu空闲时间(百分比)

    *在显示的内容中,%usr和 %sys这两个值一般情况下对系统无特别影响,%wio的值不能太高,如果%wio的值过高,则CPU花在等待输入,输出上的时间太多,这意味着硬盘存在I/O瓶颈。如果%idle的值比较高,但系统响应并不快,那么这有可能是CPU花时间等待分配内存引起的。%idle的值可以较深入帮助人们了解系统的性能,在这种情况上,%idle的值处于40~100之间,一旦它持续低于30,则表明进程竟争的主要资源不是内存而是CPU。

    *在有大量用户运行的系统中,为了减少CPU的压力,应该使用智能多串卡,而不是非智能多串卡。智能多串卡可以承担CPU的某些负担。

    *此外,如果系统中有大型的作业运行,应该把它们合理调度,错开高峰,当系统相对空闲时再运行。

     

    -v 报告系统表的内容(进程,i节点,文件和锁表状态)

    sar -v 2 3

    SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/14/2002

    10:56:46 proc-sz ov inod-sz ov file-sz ov lock-sz(-v)

    10:56:48 449/ 500 0 994/4147 0 1313/2048 0 5/ 128

    10:56:50 450/ 500 0 994/4147 0 1314/2048 0 5/ 128

    10:56:52 450/ 500 0 994/4147 0 1314/2048 0 5/ 128

    proc-sz 目前在核心中正在使用或分配的进程表的表项数

    inod-sz 目前在核心中正在使用或分配的i节点表的表项数

    file-sz 目前在核心中正在使用或分配的文件表的表项数

    ov 溢出出现的次数

    lock-sz 目前在核心中正在使用或分配的记录加锁的表项数

    *除ov外,均涉及到unix的核心参数,它们分别受核心参数NPROC,NIMODE,NFILE和FLOCKREC的控制。

    *显示格式为:

    实际使用表项/整个表可以使用的表项数

    比如,proc-sz一列所显示的四个数字中,分母的100是系统中整个进程表的长度(可建立100个表项),分子上的24,26和25分别是采样的那一段时间所使用的进程表项。inod-sz,file-sz和lock-sz三列数字的意义也相同。

    三列ov的值分别对应进程表,i节点表和文件表,表明目前这三个表都没有出现溢出现象,当出现溢出时,需要调整相应的核心参数,将对应表加大。

     

    -w 系统交换活动

    sar -w 2 3

    SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/14/2002

    11:22:05 swpin/s bswin/s swpot/s bswots pswch/s(-w)

    11:22:07 0.00 0.0 0.00 0.0 330

    11:22:09 0.00 0.0 0.00 0.0 892

    11:22:11 0.00 0.0 0.00 0.0 1053

    Average 0.00 0.0 0.00 0.0 757

     

    swpin/s 每秒从硬盘交换区传送进入内存的次数。

    bswin/s 每秒为换入而传送的块数。

    swpot/s 每秒从内存传送到硬盘交换区的次数。

    bswots 每秒为换出而传送的块数。

    pswch/s 每秒进程交换的数量。

    *swpin/s,bswin/s,swpot/s和bswots描述的是与硬盘交换区相关的交换活动。交换关系到系统的效率。交换区在硬盘上对硬盘的读,写操作比内存读,写慢得多,因此,为了提高系统效率就应该设法减少交换。通常的作法就是加大内存,使交换区中进行的交换活动为零,或接近为零。如果swpot/s的值大于1,预示可能需要增加内存或减少缓冲区(减少缓冲区能够释放一部分自由内存空间)。

     

    -y 报告终端的I/O活动(TTY设备活动)情况

    sar -y 2 3

    SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/14/2002

    11:38:03 rawch/s canch/s outch/s rcvin/s xmtin/smdmin/s (-y)

    11:38:05 5 0 951 0 1 0

    11:38:07 10 0 996 0 0 0

    11:38:09 4 0 2264 0 0 0

    Average 6 0 1404 0 1 0

     

    rawch/s 每秒输入的字符数(原始队列)

    canch/s 每秒由正则队列(canonicalqueue)处理的输入字符数。进行正则处理过程中,可以识别出一些有特殊意义的字符。比如,(中断字符),(退出符),(退格键)等。因此,canch/s中的计数不包括这些有特殊意义的字符。

    outch/s 每秒输出的字符数。

    rcvin/s 每秒接收的硬件中断次数。

    xmtin/s 每秒发出的硬件中断次数。

    mdmin/s 每秒modem中断次数。

    *应该特别说明,sar命令可以对任意终端活动进行统计,所谓任意终端,是指任意tty设备。它们可以是串行终端,主控台,伪终端等等。

    *在这几个量中,modem中断次数mdmin/s应该接近0。其它没有特殊要求,但如果每发送一个字符,中断的数量就动态地增加,这表明终端线出了差错,可能是接触不好。

    附录4 DBA日常维护的SQL

    1 查询有enqueue等待的事件

    SELECT   b.SID,b.serial#, b.username,machine, a.event, a.wait_time,

    CHR (BITAND (a.p1,-16777216)/16777215)

             || CHR(BITAND (a.p1,16711680)/65535) "Enqueue Type"

    FROMv$session_wait a, v$session b  WHERE a.event NOTLIKE'SQL*N%'

         ANDa.event NOTLIKE'rdbms%'

         ANDa.SID = b.SID

         ANDb.SID >8

         ANDa.event ='enqueue'

    ORDERBYusername;

    /

    2 如何确定哪个表空间读写频繁?

    selectname,phyrds,phywrts,readtim,writetim

             fromv$filestat a,v$dbfile b

             wherea.file# = b.file#

             orderbyreadtim desc

    /

    3 Library CachePin/Lock Pile Up

    SELECT s.sid , kglpnmod "Mode" , kglpnreq"req", SPID "OS_Process" From

    v$session_wait w,x$kglpn p, v$session s ,v$processo

    WHEREp.kglpnuse=s.saddr

    ANDkglpnhdl=w.p1raw

    andw.event like'%librarycache pin%'

    ands.paddr=o.addr

    /

    4 全表扫描的表

    col namefor a30

    selectname,valuefrom v$sysstat

    wherenamein('table scans(shorttables)','tablescans(long tables)');

    5 查询SQL语句执行时,硬语法分析的次数

    selectname,value

    fromv$sysstat

    wherenamelike'parse count%';

    6 该项显示buffer cache大小是否合适

    公式:1-((physicalreads-physical reads direct-physical reads direct (lob)) / session logicalreads)
    执行:

    select1-((a.value-b.value-c.value)/d.value)

      fromv$sysstat a,v$sysstat b,v$sysstatc,v$sysstat d

      wherea.name='physical reads'and

            b.name='physical reads direct'and

            c.name='physical reads direct (lob)'and

            d.name='session logical Reads';

    /

    7 该项显示buffer命中率

    公式:1-(physicalreads/ (db block gets+consistent gets))
    执行:

    Select1-(Sum(Decode(Name,'physical reads',Value,0))/

           (Sum(Decode(Name,'db block gets',Value,0))+

           Sum(Decode(Name,'consistent gets',Value,0))))"Buffer Hit Ratio"

      From V$sysstat;

    8  Soft parse ratio:

    这项将显示系统是否有太多硬解析。该值将会与原始统计数据对比以确保精确。例如,软解析率仅为0.2则表示硬解析率太高。不过,如果总解析量(parsecount total)偏低,这项值可以被忽略。

    公式:1- ( parse count (hard) / parse count (total) )
    执行:

     

    select1-(a.value/b.value)

      fromv$sysstat a,v$sysstat b

      Where a.name='parsecount (hard)'andb.name='parse count (total)';

    9  In-memory sort ratio:

    该项显示内存中完成的排序所占比例。最理想状态下,在OLTP系统中,大部分排序不仅小并且能够完全在内存里完成排序。

    公式:sorts (memory) / ( sorts (memory) + sorts (disk) )

    执行:

    select a.value/(b.value+c.value)  from v$sysstat a,v$sysstatb,v$sysstat c

      wherea.name='sorts (memory)'and

        b.name='sorts(memory)'andc.name='sorts (disk)';

     

    10 Parse to execute ratio:

    在生产环境,最理想状态是一条sql语句一次解析多数运行。

    公式:1 - (parse count/execute count)

    执行:

    select1-(a.value/b.value)

      fromv$sysstat a,v$sysstat b

      where a.name='parsecount (total)'andb.name='execute count';

     

    11 Parse CPU to total CPU ratio:

    该项显示总的CPU花费在执行及解析上的比率。如果这项比率较低,说明系统执行了太多的解析。

    公式:1 - (parse time cpu / CPU used by this session)

    执行:

    select1-(a.value/b.value)  from v$sysstat a,v$sysstatb

      wherea.name='parse time cpu'and

            b.name='CPU used by this session';

    12 Parse time CPU to parse time elapsed:

    通常,该项显示锁竞争比率。这项比率计算是否时间花费在解析分配给CPU进行周期运算(即生产工作)。解析时间花费不在CPU周期运算通常表示由于锁竞争导致了时间花费

    公式:parse time cpu / parse time elapsed

    执行:

    select a.value/b.value

      fromv$sysstat a,v$sysstat b

      wherea.name='parse time cpu'and b.name='parse time elapsed';

     

    13从V$SYSSTAT获取负载间档(Load Profile)数据

     负载间档是监控系统吞吐量和负载变化的重要部分,该部分提供如下每秒和每个事务的统计信息:logons cumulative, parse count (total), parsecount (hard), executes, physical reads, physical writes, block changes, andredo size.被格式化的数据可检查’rates’是否过高,或用于对比其它基线数据设置为识别system profile在期间如何变化。例如,计算每个事务中blockchanges可用如下公式:

    db block changes / ( user commits + userrollbacks )
    执行:

    select a.value/(b.value+c.value)

      fromv$sysstat a,v$sysstat b,v$sysstatc

      wherea.name='db block changes'and

            b.name='user commits'and c.name='user rollbacks';

    Blocks changed foreach read:

    这项显示出block changes在blockreads中的比例。它将指出是否系统主要用于只读访问或是主要进行诸多数据操作(如:inserts/updates/deletes)

    公式:db block changes / session logical reads

    执行:select a.value/b.value  fromv$sysstat a,v$sysstat b  where a.name=‘db block changes’ and

            b.name=‘session logical reads’ ;

    14 Rows for each sort:

    公式:sorts (rows) / ( sorts (memory) +sorts (disk) )

    执行:

    Select a.Value /(b.Value + c.Value)

      FromV$sysstat a, V$sysstat b,V$sysstat c

     Wherea.Name ='sorts(Rows)'

       Andb.Name ='sorts(Memory)'

       And c.Name ='sorts(Disk) ';

     

    15 表的约束条件

    Select Constraint_Name,

          Constraint_Type,

          Search_Condition,

          r_Constraint_Name

      FromUser_Constraints

     WhereTable_Name = Upper(‘ &Table_Name’);

    Select c.Constraint_Name, c.Constraint_Type,Cc.Column_Name

      FromUser_Constraints c, User_Cons_Columns Cc

     Wherec.Owner = Upper(‘ &Table_Owner’)

       Andc.Table_Name = Upper(‘ &Table_Name’)

       Andc.Owner = Cc.Owner

       Andc.Constraint_Name = Cc.Constraint_Name

     OrderByCc.Position;

    16 表空间的名称及大小

    select t.tablespace_name, round(sum(bytes/(1024*1024)),0)ts_size

        fromdba_tablespaces t, dba_data_files d

        wheret.tablespace_name = d.tablespace_name

        groupbyt.tablespace_name;

     

    17 看回滚段名称及大小

        select segment_name, tablespace_name,r.status,

        (initial_extent/1024)InitialExtent,(next_extent/1024)NextExtent,

       max_extents, v.curext CurExtent

        Fromdba_rollback_segs r, v$rollstat v

        Wherer.segment_id = v.usn(+)

        orderbysegment_name ;

     

    18 表空间的使用情况
       selectsum(bytes)/(1024*1024)asfree_space,tablespace_name

        from dba_free_space

        groupbytablespace_name;

     

       SELECT A.TABLESPACE_NAME,A.BYTESTOTAL,B.BYTES USED,C.BYTES FREE,

        (B.BYTES*100)/A.BYTES"% USED",(C.BYTES*100)/A.BYTES"% FREE"

        FROMSYS.SM$TS_AVAIL A,SYS.SM$TS_USED B,SYS.SM$TS_FREEC

        WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAMEAND A.TABLESPACE_NAME=C.TABLESPACE_NAME;

    19 移动一个表的多个分区时的脚本

    BEGIN

       FOR x IN(SELECT partition_name

                  FROM user_tab_partitions

                 WHERE table_name =‘BIG_TABLE2′)

       LOOP

          EXECUTEIMMEDIATE    ‘altertablebig_table2 movepartition

                            ||x.partition_name;

       ENDLOOP;

    END;

    /

     

    20 看LOCK

    SELECT/*+ ORDERED USE_HASH(H,R) */

       H.SIDHOLD_SID,

       R.SIDWAIT_SID,

       decode(H.type,'MR','Media Recovery',

               'RT','RedoThread',

               'UN','UserName',

               'TX','Transaction',

               'TM','DML',

               'UL','PL/SQLUser Lock',

               'DX','DistributedXaction',

               'CF','ControlFile',

               'IS','Instance State',

               'FS','FileSet',

               'IR','InstanceRecovery',

               'ST','DiskSpace Transaction',

               'TS','TempSegment',

               'IV','LibraryCache Invalidation',

               'LS','LogStart or Switch',

               'RW','RowWait',

               'SQ','SequenceNumber',

               'TE','ExtendTable',

               'TT','TempTable',H.type)Type,

       decode(H.lmode,0,'None',1,'Null',2,'Row-S (SS)',   3,'Row-X(SX)',

               4,'Share',        5,'S/Row-X(SSX)',

               6,'Exclusive',    to_char(H.lmode))hold,

       decode(r.request,         0,'None',

               1,'Null',         2,'Row-S(SS)',

               3,'Row-X(SX)',   4,'Share',

               5,'S/Row-X(SSX)',6,'Exclusive',to_char(R.request))request,R.ID1,R.ID2,R.CTIME

    FROMV$LOCK H,V$LOCK R

    WHEREH.BLOCK =1AND R.BLOCK=0

    andH.TYPE <>'MR'AND R.TYPE <>'MR'

       ANDH.ID1 = R.ID1 AND H.ID2 =R.ID2

     

     

    21 查看ORACLE运行的OS平台

        Setserveroutput on

    begin

        dbms_output.put_line(dbms_utility.port_string);  

    end;

    /

    Linuxi386/Linux-2.0.34-8.1.0

    PL/SQL 过程已成功完成。

     

     

    22 看空间详细使用情况

    CREATE OR REPLACEPROCEDURE show_space (

      p_segname     IN   VARCHAR2,

      p_owner       IN   VARCHAR2 DEFAULT USER,

      p_type        IN   VARCHAR2DEFAULT 'TABLE',

      p_partition   IN   VARCHAR2 DEFAULT NULL)

    AS  l_total_blocks         NUMBER;

      l_total_bytes          NUMBER;

      l_unused_blocks        NUMBER;

      l_unused_bytes         NUMBER;

      l_lastusedextfileid    NUMBER;

      l_lastusedextblockid   NUMBER;

      l_last_used_block      NUMBER;

      PROCEDURE p (p_label IN VARCHAR2, p_num IN NUMBER)

       IS

       BEGIN

         DBMS_OUTPUT.put_line (RPAD (p_label, 40, '.') || p_num);

       END;

    BEGIN

      DBMS_SPACE.unused_space

                            (segment_owner                 => p_owner,

                             segment_name                  => p_segname,

                              segment_type                  => p_type,

                              partition_name                => p_partition,

                             total_blocks                  => l_total_blocks,

                             total_bytes                   => l_total_bytes,

                             unused_blocks                 => l_unused_blocks,

                             unused_bytes                  => l_unused_bytes,

                             last_used_extent_file_id      => l_lastusedextfileid,

                             last_used_extent_block_id     => l_lastusedextblocki

     last_used_block               =>l_last_used_block

                            );

       p('Total Blocks', l_total_blocks);

       p('Total Bytes', l_total_bytes);

       p('Unused Blocks', l_unused_blocks);

       p('Unused Bytes', l_unused_bytes);

       p('Last Used Ext FileId', l_lastusedextfileid);

       p('Last Used Ext BlockId', l_lastusedextblockid);

       p('Last Used Block', l_last_used_block);

    END;

    /

    23 缓冲区的相关SQL

    SELECT tch, file#, dbablk,

           CASE

              WHEN obj=4294967295

                 THEN'rbs/compat segment'

              ELSE(SELECT    MAX(   '('

                                   ||object_type

                                   ||') '

                                   ||owner

                                   ||'.'

                                   ||object_name

                                  )

                           ||DECODE (COUNT(*),1,'',' maybe!')

                     FROM dba_objects

                    WHERE data_object_id =x.obj)

           ENDwhat

      FROM(SELECT   tch,file#, dbablk, obj

                FROMx$bh           WHEREstate <>0

            ORDERBY tchDESC) x WHEREROWNUM<=5;

     

    24 获取生成的根据文件名

    select c.value ||'/'||d.instance_name ||'_ora_'||a.spid ||'.trc'tracefrom v$process a,v$sessionb,v$parameter c,v$instanced

    wherea.addr=b.paddr

    andb.audsid=userenv('sessionid')

    andc.name='user_dump_dest'

    /

    在v$session_longops视图中,sofar字段表示已经扫描的块数,totalwork表示总得需要扫描的块数,所以我们即可以对正在运行的长查询进行监控,比如在索引创建时,查看索引创建的进度,也可以查看系统中以往的长查询。。。

    col opname format a32

    col target_desc format a32

    col perwork format a12

    setlines 131

    select sid,OPNAME,TARGET_DESC,sofar,TOTALWORK,trunc(sofar/totalwork*100,2)||'%'as perwork from v$session_longops wheresofar!=totalwork;

     

    setlines 121

    setpages 999

    col opname format a29

    col target format a29

    col target_desc format a12

    col perwork format a12

    col remain format 99

    col start_time format a21

    col sofar format 99999999

    col totalwork format 99999999

    col sql_text format a101

    col bufgets format 99999999

     

    select opname,target,to_char(start_time,'yy-mm-dd:hh24:mi:ss')start_time,elapsed_seconds elapsed,executionsexecs,buffer_gets/decode(executions,0,1,executions)bufgets,module,sql_text

    fromv$session_longops sl,v$sqlarea sa

    wheresl.sql_hash_value = sa.hash_value andupper(substr(module,1,4))<>'RMAN'and substr(opname,1,4)<>'RMAN'

    andmodule<>'SQL*Plus'and sl.start_time>trunc(sysdate)

    orderby start_time;

    25 监控实例的等待

    Select Event,

           Sum(Decode(Wait_Time,0,0,1)) "Prev",

           Sum(Decode(Wait_Time,0,1,0)) "Curr",

           Count(*) "Tot"

      FromV$session_Wait

     GroupByEvent

     OrderBy4;

    26 回滚段的争用情况   

    selectname,waits, gets, waits/gets "Ratio"     from v$rollstat a,v$rollname b     wherea.usn = b.usn;

    27 监控表空间的 I/O 比例

    select df.tablespace_name name,df.file_name "file",f.phyrdspyr,   f.phyblkrd pbr,f.phywrts pyw,f.phyblkwrt pbw    fromv$filestat f, dba_data_files df    where f.file# =df.file_id    orderbydf.tablespace_name;

    28 监控文件系统的 I/O 比例

    Select Substr(a.File#,1,2)"#",

           Substr(a.Name,1,30)"Name",

          a.Status,

          a.Bytes,

          b.Phyrds,

          b.Phywrts

      FromV$datafile a, V$filestat b

     Wherea.File# = b.File#;

     

    29 在某个用户下找所有的索引 

    Select User_Indexes.Table_Name,

          User_Indexes.Index_Name,

          Uniqueness,

          Column_Name

      FromUser_Ind_Columns, User_Indexes

     WhereUser_Ind_Columns.Index_Name = User_Indexes.Index_Name

       AndUser_Ind_Columns.Table_Name = User_Indexes.Table_Name

     OrderByUser_Indexes.Table_Type,

              User_Indexes.Table_Name,

             User_Indexes.Index_Name,

             Column_Position;

     

     

    30 监控 SGA 的命中率 

    Select a.Value + b.Value "logical_reads",

          c.Value "phys_reads",

           Round(100*((a.Value + b.Value)-c.Value)/(a.Value + b.Value))"BUFFER HIT RATIO"

      FromV$sysstat a, V$sysstat b,V$sysstat c

     Wherea.Statistic# =38

       Andb.Statistic# =39

       And c.Statistic# =40;

    31 监控 SGA 中字典缓冲区的命中率   

    Select Parameter,

           Gets,

          Getmisses,

          Getmisses /(Gets + Getmisses)*100 "missratio",

           (1-(Sum(Getmisses)/(Sum(Gets)+Sum(Getmisses))))*100"Hit ratio"

      FromV$rowcache

     WhereGets + Getmisses <>0

     GroupBy Parameter, Gets,Getmisses;

    32 监控 SGA 中共享缓存区的命中率,应该小于1%

    SelectSum(Pins)"Total Pins",

           Sum(Reloads) "Total Reloads",

           Sum(Reloads)/Sum(Pins)*100 Libcache

      FromV$librarycache;

    SelectSum(Pinhits- Reloads)/Sum(Pins) "hit radio",

           Sum(Reloads)/Sum(Pins) "reload percent"

      FromV$librarycache;

     

     

    33 显示所有数据库对象的类别和大小   

    SelectCount(Name)Num_Instances,

           Type,

           Sum(Source_Size)Source_Size,

           Sum(Parsed_Size)Parsed_Size,

           Sum(Code_Size) Code_Size,

           Sum(Error_Size) Error_Size,

           Sum(Source_Size)+Sum(Parsed_Size)+Sum(Code_Size)+

           Sum(Error_Size) Size_Required

      FromDba_Object_Size

     GroupByType

     OrderBy2;

     

     

    34 监控 SGA 中重做日志缓存区的命中率,应该小于1%   

    SelectName,

           Gets,

           Misses,

          Immediate_Gets,

          Immediate_Misses,

           Decode(Gets,0,0,Misses / Gets *100) Ratio1,

           Decode(Immediate_Gets+ Immediate_Misses,

                 0,

                 0,

                 Immediate_Misses /(Immediate_Gets +Immediate_Misses)*100)Ratio2

      FromV$latch

     WhereNameIn('redoallocation','redocopy');

     

    35 监控内存和硬盘的排序比率

    最好使它小于 .10,增加 sort_area_size 

    SelectName,Value

      FromV$sysstat

     WhereNameIn('sorts (memory)','sorts (disk)');

     

    36 监控当前数据库谁在运行什么SQL语句

    Select Osuser, Username, Sql_Text

      FromV$session a, V$sqltext b

     Wherea.Sql_Address = b.Address

     OrderByAddress, Piece;

     

    37 监控字典缓冲区 

    Select(Sum(Pins - Reloads))/Sum(Pins) "LIB CACHE" FromV$librarycache;

    Select(Sum(Gets - Getmisses -Usage-Fixed))/Sum(Gets)"ROW CACHE"

      FromV$rowcache;

    SelectSum(Pins)"EXECUTIONS",Sum(Reloads)"CACHE MISSES WHILE EXECUTING"

      From V$librarycache;   

    后者除以前者,此比率小于1%,接近0%为好。   

    SELECTSUM(GETS)"DICTIONARY GETS",SUM(GETMISSES) "DICTIONARY CACHE GETMISSES"    FROMV$ROWCACHE;

     

     

    38 找ORACLE字符集 

    select*from sys.props$ wherename='NLS_CHARACTERSET';

    39 监控 MTS 

    select busy/(busy+idle) "shared servers busy" fromv$dispatcher;     

    此值大于0.5时,参数需加大   

    selectsum(wait)/sum(totalq)"dispatcher waits" from v$queue wheretype='dispatcher';   

    selectcount(*)fromv$dispatcher;   

    select servers_highwater from v$mts;

     

    servers_highwater接近mts_max_servers时,参数需加大

    40 碎片程度   

    select tablespace_name,count(tablespace_name)fromdba_free_space groupby tablespace_name    havingcount(tablespace_name)>10;   

    altertablespacenamecoalesce;   

    altertablenamedeallocateunused;   

    createorreplaceview ts_blocks_v as    select tablespace_name,block_id,bytes,blocks,'freespace' segment_name fromdba_free_space  

     unionall    select tablespace_name,block_id,bytes,blocks,segment_namefrom dba_extents;   

     

     select*from ts_blocks_v;  

      select tablespace_name,sum(bytes),max(bytes),count(block_id)fromdba_free_space     groupbytablespace_name; 

    查看碎片程度高的表   

    Select Segment_Name Table_Name,Count(*)Extents

      FromDba_Segments

     WhereOwner NotIn('SYS','SYSTEM')

     GroupBySegment_Name

    HavingCount(*)=(SelectMax(Count(*))

                        From Dba_Segments

                        GroupBySegment_Name);

     

    41 表、索引的存储情况检查 

    Select Segment_Name,Sum(Bytes),Count(*) Ext_Quan

      FromDba_Extents

     WhereTablespace_Name ='&tablespace_name'

       AndSegment_Type ='TABLE'

     GroupByTablespace_Name, Segment_Name;

    Select Segment_Name,Count(*)

      FromDba_Extents

     WhereSegment_Type ='INDEX'

       AndOwner ='&owner'

     GroupBySegment_Name;

    42 找使用CPU多的用户

    session    12是cpu used bythis session   

    Select a.Sid,

           Spid,

           Status,

           Substr(a.Program,1,40)Prog,

          a.Terminal,

           Osuser,

           Value/60/100Value

      FromV$session a, V$process b,V$sesstat c

     Wherec.Statistic# =12

       Andc.Sid = a.Sid

       Anda.Paddr = b.Addr

     OrderByValueDesc;

    43 寻找CPU使用过量的session ,找出高CPU利用率的SQL:

    SELECT/*+ ORDERED */

    sql_text

    FROMv$sqltext a

    WHERE(a.hash_value,a.address)IN

    (SELECT decode(sql_hash_value,0, prev_hash_value,sql_hash_value), decode(sql_hash_value,0, prev_sql_addr,sql_address)

    FROM v$sessionb

    WHEREb.paddr =(SELECT addr

    FROMv$process c

    WHEREc.spid ='&pid'))

    ORDERBYpiece ASC;

     

    附录5 DBA监控数据库的SHELL脚本

    1.前言

    这篇文章介绍了DBA每天在监控Oracle数据库方面的职责,讲述了如何通过shell脚本来完成这些重复的监控工作。本文首先回顾了一些DBA常用的Unix命令,以及解释了如何通过UnixCron来定时执行DBA脚本。同时文章还介绍了8个重要的脚本来监控Oracle数据库:

       检查实例的可用性 

       检查监听器的可用性

       检查alert日志文件中的错误信息 

       在存放log文件的地方满以前清空旧的log文件

       分析table和index以获得更好的性能

       检查表空间的使用情况

       找出无效的对象

       监控用户和事务

    2.DBA需要的Unix基本知识

    基本的UNIX命令

    以下是一些常用的Unix命令:

       ps--显示进程

       grep--搜索文件中的某种文本模式

       mailx--读取或者发送mail

       cat--连接文件或者显示它们

       cut--选择显示的列

       awk--模式匹配语言

       df--显示剩余的磁盘空间

      以下是DBA如何使用这些命令的一些例子:

    显示服务器上的可用实例:

    $ ps -ef | grep smon

    oracle 21832 1 0 Feb 24 ? 19:05 ora_smon_oradb1

    oracle 898 1 0 Feb 15 ? 0:00 ora_smon_oradb2

    dliu 25199 19038 0 10:48:57 pts/6 0:00 grep smon

    oracle 27798 1 0 05:43:54 ? 0:00 ora_smon_oradb3

    oracle 28781 1 0 Mar 03 ? 0:01 ora_smon_oradb4、

     

    显示服务器上的可用监听器:

    $ ps -ef | grep listener | grep -v grep

    (译者注:grep命令应该加上-i参数,即grep -i listener,该参数的作用是忽略大小写,因为有些时候listener是大写的,这时就会看不到结果)

    oracle 23879 1 0 Feb 24 ? 33:36 /8.1.7/bin/tnslsnrlistener_db1 -inherit

    oracle 27939 1 0 05:44:02 ? 0:00 /8.1.7/bin/tnslsnrlistener_db2 -inherit

    oracle 23536 1 0 Feb 12 ? 4:19 /8.1.7/bin/tnslsnrlistener_db3 -inherit

    oracle 28891 1 0 Mar 03 ? 0:01 /8.1.7/bin/tnslsnrlistener_db4 -inherit

     

    查看Oracle存档目录的文件系统使用情况:

    $ df -k | grep oraarch

    /dev/vx/dsk/proddg/oraarch 71123968 475487265850768 7% /u09/oraarch

      统计alter.log文件中的行数:

    $ cat alert.log | wc -l

    2984

    列出alert.log文件中的全部Oracle错误信息:

    $ grep ORA- alert.log

    ORA-00600: internal error code, arguments:[kcrrrfswda.1], [], [], [], [], []

    ORA-00600: internal error code, arguments: [1881],[25860496], [25857716], []

     

    3. CRONTAB基本

      一个crontab文件中包含有六个字段:

      分钟 0-59

      小时 0-23

      月中的第几天 1-31

      月份 1 -12

      星期几 0 -6, with 0 = Sunday

      Unix命令或者Shell脚本

      要编辑一个crontab文件,输入:

      Crontab-e

      要查看一个crontab文件,输入:

    Crontab -l

    0 4 * * 5 /dba/admin/analyze_table.ksh

    30 3 * * 3,6 /dba/admin/hotbackup.ksh /dev/null2>&1

      在上面的例子中,第一行显示了一个分析表的脚本在每个星期5的4:00am运行。第二行显示了一个执行热备份的脚本在每个周三和周六的3:00a.m.运行。

    监控数据库的常用Shell脚本

      以下提供的8个shell脚本覆盖了DBA每日监控工作的90%,你可能还需要修改UNIX的环境变量。

    4. 检查Oracle实例的可用性

    oratab文件中列出了服务器上的所有数据库

    $ cat /var/opt/oracle/oratab

    ###################################################################

    ## /var/opt/oracle/oratab ##

    ###################################################################

    oradb1:/u01/app/oracle/product/8.1.7:Y

    oradb2:/u01/app/oracle/product/8.1.7:Y

    oradb3:/u01/app/oracle/product/8.1.7:N

    oradb4:/u01/app/oracle/product/8.1.7:Y

      以下的脚本检查oratab文件中列出的所有数据库,并且找出该数据库的状态(启动还是关闭)

    ###################################################################

    ## ckinstance.ksh #####################################################################

    ORATAB=/var/opt/oracle/oratab

    echo "`date` "

    echo "Oracle Database(s) Status `hostname`:\n"

     

    db=`egrep -i ":Y|:N" $ORATAB | cut-d":" -f1 | grep -v "\#" | grep -v "\*"`

    pslist="`ps -ef | grep pmon`"

    for i in $db ; do

    echo "$pslist" | grep"ora_pmon_$i" > /dev/null 2>$1

    if (( $? )); then

    echo "Oracle Instance - $i: Down"

    else

    echo "Oracle Instance - $i: Up"

    fi

    done

      使用以下的命令来确认该脚本是可以执行的:

    $ chmod 744 ckinstance.ksh

    $ ls -l ckinstance.ksh

    -rwxr--r-- 1 oracle dba 657 Mar 5 22:59ckinstance.ksh*

      以下是实例可用性的报表:

    $ ckinstance.ksh

    Mon Mar 4 10:44:12 PST 2002

    Oracle Database(s) Status for DBHOST server:

    Oracle Instance - oradb1: Up

    Oracle Instance - oradb2: Up

    Oracle Instance - oradb3: Down

    Oracle Instance - oradb4: Up 

     

    5. 检查Oracle监听器的可用性

     

      以下有一个类似的脚本检查Oracle监听器。如果监听器停了,该脚本将会重新启动监听器:

     

    #######################################################################

    ## cklsnr.sh ##

    #######################################################################

    #!/bin/ksh

    DBALIST="primary.dba@company.com,another.dba@company.com";exportDBALIST

    cd /var/opt/oracle

    rm -f lsnr.exist

    ps -ef | grep mylsnr | grep -v grep > lsnr.exist

    if [ -s lsnr.exist ]

    then

    echo

    else

    echo "Alert" | mailx -s "Listener'mylsnr' on `hostname` is down" $DBALIST

    TNS_ADMIN=/var/opt/oracle; export TNS_ADMIN

    ORACLE_SID=db1; export ORACLE_SID

    ORAENV_ASK=NO; export ORAENV_ASK

    PATH=$PATH:/bin:/usr/local/bin; export PATH

    . oraenv

    LD_LIBRARY_PATH=${ORACLE_HOME}/lib;exportLD_LIBRARY_PATH

    lsnrctl start mylsnr

    fi

     

     

    6. 检查Alert日志(ORA-XXXXX)

     

      每个脚本所使用的一些环境变量可以放到一个profile中:

     

    #######################################################################

    ## oracle.profile ##

    #######################################################################

    EDITOR=vi;export EDITORORACLE_BASE=/u01/app/oracle; export

    ORACLE_BASE ORACLE_HOME=$ORACLE_BASE/product/8.1.7;export

    ORACLE_HOME LD_LIBRARY_PATH=$ORACLE_HOME/lib;export

    LD_LIBRARY_PATH TNS_ADMIN=/var/opt/oracle;export

    TNS_ADMIN NLS_LANG=american; export

    NLS_LANG NLS_DATE_FORMAT='Mon DD YYYYHH24:MI:SS'; export

    NLS_DATE_FORMATORATAB=/var/opt/oracle/oratab;export

    ORATABPATH=$PATH:$ORACLE_HOME:$ORACLE_HOME/bin:/usr/ccs/bin:/bin:/usr/bin:/usr/sbin:/

    sbin:/usr/openwin/bin:/opt/bin:.; export

    PATHDBALIST="primary.dba@company.com,another.dba@company.com";export

    DBALIST 

     

    以下的脚本首先调用oracle.profile来设置全部的环境变量。如果发现任何的Oracle错误,该脚本还会给DBA发送一个警告的email。

     

    ####################################################################

    ## ckalertlog.sh ##

    ####################################################################

    #!/bin/ksh

    .. /etc/oracle.profile

    for SID in `cat $ORACLE_HOME/sidlist`

    do

    cd $ORACLE_BASE/admin/$SID/bdump

    if [ -f alert_${SID}.log ]

    then

    mv alert_${SID}.log alert_work.log

    touch alert_${SID}.log

    cat alert_work.log >> alert_${SID}.hist

    grep ORA- alert_work.log > alert.err

    fi

    if [ `cat alert.err|wc -l` -gt 0 ]

    then

    mailx -s "${SID} ORACLE ALERT ERRORS"$DBALIST < alert.err

    fi

    rm -f alert.err

    rm -f alert_work.log

    done

     

    7. 清除旧的归档文件

      以下的脚本将会在log文件达到90%容量的时候清空旧的归档文件:

    $ df -k | grep arch

    Filesystem kbytes used avail capacity Mounted on

    /dev/vx/dsk/proddg/archive 71123968 3021024840594232 43% /u08/archive

     

    #######################################################################

    ## clean_arch.ksh ##

    #######################################################################

    #!/bin/ksh

    df -k | grep arch > dfk.result

    archive_filesystem=`awk -F" " '{ print $6}' dfk.result`

    archive_capacity=`awk -F" " '{ print $5}' dfk.result`

     

    if [[ $archive_capacity > 90% ]]

    then

    echo "Filesystem ${archive_filesystem} is${archive_capacity} filled"

    # try one of the following option depend on yourneed

    find $archive_filesystem -type f -mtime +2 -exec rm-r {} \;

    tar

    rman

    fi

     

    8. 分析表和索引(以得到更好的性能)

      以下我将展示如果传送参数到一个脚本中:

    ####################################################################

    ## analyze_table.sh ##

    ####################################################################

    #!/bin/ksh

    # input parameter: 1: password # 2: SID

    if (($#<1)) then echo "Please enter'oracle' user password as the first parameter !" exit 0

    fi

    if (($#<2)) then echo "Please enterinstance name as the second parameter!" exit 0

    fi

     

      要传入参数以执行该脚本,输入:

     

    $ analyze_table.sh manager oradb1 

     

      脚本的第一部分产生了一个analyze.sql文件,里面包含了分析表用的语句。脚本的第二部分分析全部的表:

     

    #####################################################################

    ## analyze_table.sh ##

    #####################################################################

    sqlplus -s < oracle/$1@$2

    set heading off

    set feed off

    set pagesize 200

    set linesize 100

    spool analyze_table.sql

    select 'ANALYZE TABLE ' || owner || '.' ||segment_name ||

    ' ESTIMATE STATISTICS SAMPLE 10 PERCENT;'

    from dba_segments

    where segment_type = 'TABLE'

    and owner not in ('SYS', 'SYSTEM');

    spool off

    exit

    !

    sqlplus -s < oracle/$1@$2

    @./analyze_table.sql

    exit

     

      以下是analyze.sql的一个例子:

     

    $ cat analyze.sql

    ANALYZE TABLE HIRWIN.JANUSAGE_SUMMARY ESTIMATESTATISTICS SAMPLE 10 PERCENT;

    ANALYZE TABLE HIRWIN.JANUSER_PROFILE ESTIMATESTATISTICS SAMPLE 10 PERCENT;

    ANALYZE TABLE APPSSYS.HIST_SYSTEM_ACTIVITY ESTIMATESTATISTICS SAMPLE 10 PERCENT;

    ANALYZE TABLE HTOMEH.QUEST_IM_VERSION ESTIMATESTATISTICS SAMPLE 10 PERCENT;

    ANALYZE TABLE JSTENZEL.HIST_SYS_ACT_0615 ESTIMATESTATISTICS SAMPLE 10 PERCENT;

    ANALYZE TABLE JSTENZEL.HISTORY_SYSTEM_0614 ESTIMATESTATISTICS SAMPLE 10 PERCENT;

    ANALYZE TABLE JSTENZEL.CALC_SUMMARY3 ESTIMATESTATISTICS SAMPLE 10 PERCENT;

    ANALYZE TABLE IMON.QUEST_IM_LOCK_TREE ESTIMATESTATISTICS SAMPLE 10 PERCENT;

    ANALYZE TABLE APPSSYS.HIST_USAGE_SUMMARY ESTIMATESTATISTICS SAMPLE 10 PERCENT;

    ANALYZE TABLE PATROL.P$LOCKCONFLICTTX ESTIMATESTATISTICS SAMPLE 10 PERCENT;

     

     

    9. 检查表空间的使用

      以下的脚本检测表空间的使用。如果表空间只剩下10%,它将会发送一个警告email。

     

    #####################################################################

    ## ck_tbsp.sh ##

    #####################################################################

    #!/bin/ksh

    sqlplus -s < oracle/$1@$2

    set feed off

    set linesize 100

    set pagesize 200

    spool tablespace.alert

    SELECT F.TABLESPACE_NAME,

    TO_CHAR ((T.TOTAL_SPACE - F.FREE_SPACE),'999,999')"USED (MB)",

    TO_CHAR (F.FREE_SPACE, '999,999') "FREE(MB)",

    TO_CHAR (T.TOTAL_SPACE, '999,999') "TOTAL(MB)",

    TO_CHAR ((ROUND((F.FREE_SPACE/T.TOTAL_SPACE)*100)),'999')||' %' PER_FREE

    FROM (

    SELECT TABLESPACE_NAME,

    ROUND (SUM (BLOCKS*(SELECT VALUE/1024

    FROM V\$PARAMETER

    WHERE NAME = 'db_block_size')/1024)

    ) FREE_SPACE

    FROM DBA_FREE_SPACE

    GROUP BY TABLESPACE_NAME

    ) F,

    (

    SELECT TABLESPACE_NAME,

    ROUND (SUM (BYTES/1048576)) TOTAL_SPACE

    FROM DBA_DATA_FILES

    GROUP BY TABLESPACE_NAME

    ) T

    WHERE F.TABLESPACE_NAME = T.TABLESPACE_NAME

    AND (ROUND ((F.FREE_SPACE/T.TOTAL_SPACE)*100)) <10;

    spool off

    exit

    !

    if [ `cat tablespace.alert|wc -l` -gt 0 ]

    then

    cat tablespace.alert -l tablespace.alert >tablespace.tmp

    mailx -s "TABLESPACE ALERT for ${2}"$DBALIST < tablespace.tmp

    fi

     

     

      警告email输出的例子如下:

     

    TABLESPACE_NAME USED (MB) FREE (MB) TOTAL (MB)PER_FREE

    ------------------- --------- ------------------------------ ------------------

    SYSTEM 2,047 203 2,250 9 %

    STBS01 302 25 327 8 %

    STBS02 241 11 252 4 %

    STBS03 233 19 252 8 %

     

    10. 查找出无效的数据库对象

     

      以下查找出无效的数据库对象:

     

    ####################################################################### invalid_object_alert.sh ########################################################################!/bin/ksh . /etc/oracle.profile

    sqlplus -s < oracle/$1@$2

    set feed off

    set heading off column object_name format a30

    spool invalid_object.alert

    SELECT OWNER, OBJECT_NAME, OBJECT_TYPE, STATUS FROMDBA_OBJECTS WHERE STATUS = 'INVALID' ORDER BY OWNER, OBJECT_TYPE, OBJECT_NAME;

    spool off

    exit ! if [ `cat invalid_object.alert|wc -l` -gt 0] then

    mailx -s "INVALID OBJECTS for ${2}"$DBALIST < invalid_object.alert

    fi$ cat invalid_object.alert

    OWNER OBJECT_NAME OBJECT_TYPE STATUS

    ----------------------------------------------------------------------

    HTOMEH DBMS_SHARED_POOL PACKAGE BODY INVALID

    HTOMEH X_$KCBFWAIT VIEW INVALID

    IMON IW_MON PACKAGE INVALID

    IMON IW_MON PACKAGE BODY INVALID

    IMON IW_ARCHIVED_LOG VIEW INVALID

    IMON IW_FILESTAT VIEW INVALID

    IMON IW_SQL_FULL_TEXT VIEW INVALID

    IMON IW_SYSTEM_EVENT1 VIEW INVALID

    IMON IW_SYSTEM_EVENT_CAT VIEW INVALIDLBAILEYCHECK_TABLESPACE_USAGE PROCEDURE INVALID

    PATROL P$AUTO_EXTEND_TBSP VIEW INVALID

    SYS DBMS_CRYPTO_TOOLKIT PACKAGE INVALID

    SYS DBMS_CRYPTO_TOOLKIT PACKAGE BODY INVALID

    SYS UPGRADE_SYSTEM_TYPES_TO_816 PROCEDURE INVALID

    SYS AQ$_DEQUEUE_HISTORY_T TYPE INVALID

    SYS HS_CLASS_CAPS VIEW INVALID SYS HS_CLASS_DD VIEWINVALID

     

    11. 监视用户和事务(死锁等)

     

      以下的脚本在死锁发生的时候发送一个警告e-mail:

     

    ###################################################################

    ## deadlock_alert.sh ##

    ###################################################################

    #!/bin/ksh

    .. /etc/oracle.profile

    sqlplus -s < oracle/$1@$2

    set feed off

    set heading off

    spool deadlock.alert

    SELECT SID, DECODE(BLOCK, 0, 'NO', 'YES' ) BLOCKER,

    DECODE(REQUEST, 0, 'NO','YES' ) WAITER

    FROM V$LOCK

    WHERE REQUEST > 0 OR BLOCK > 0

    ORDER BY block DESC;

    spool off

    exit

    !

    if [ `cat deadlock.alert|wc -l` -gt 0 ]

    then

    mailx -s "DEADLOCK ALERT for ${2}"$DBALIST < deadlock.alert

    fi

    12. 结论

    0,20,40 7-17 * * 1-5 /dba/scripts/ckinstance.sh> /dev/null 2>&1

    0,20,40 7-17 * * 1-5 /dba/scripts/cklsnr.sh >/dev/null 2>&1

    0,20,40 7-17 * * 1-5 /dba/scripts/ckalertlog.sh> /dev/null 2>&1

    30 * * * 0-6 /dba/scripts/clean_arch.sh >/dev/null 2>&1

    * 5 * * 1,3 /dba/scripts/analyze_table.sh >/dev/null 2>&1

    * 5 * * 0-6 /dba/scripts/ck_tbsp.sh > /dev/null2>&1

    * 5 * * 0-6 /dba/scripts/invalid_object_alert.sh> /dev/null 2>&1

    0,20,40 7-17 * * 1-5 /dba/scripts/deadlock_alert.sh> /dev/null 2>&1

     

      通过以上的脚本,可大大减轻你的工作。你可以使用这些是来做更重要的工作,例如性能调整。

    展开全文
  • 数据库管理员DBA什么是DBA 数据库管理员,英文是Database Administrator,简称DBA。这个职位对不同的人意味着不同的意义。一个小的软件开发工作室和一个分工高度明细的大公司相比,DBA的职责来得更加宽泛一些。一个...

    数据库管理员DBA什么是DBA

      数据库管理员,英文是Database Administrator,简称DBA。这个职位对不同的人意味着不同的意义。一个小的软件开发工作室和一个分工高度明细的大公司相比,DBA的职责来得更加宽泛一些。一个公司,不管它是自己开发应用软件,还是购买第三方的应用软件,只要涉及到数据库(有多少不涉及数据库的应用软件呢?数据库是商业的灵魂和大脑啊),就需要确定是否雇佣一个或几个DBA。知道DBA这个职位有哪些要求,对于企业内部这个职位的定义或者对于那些未来的DBA将是至关重要的。

    DBA的一些职责:

    安装和升级数据库服务器(如Oracle、Microsoft SQL server),以及应用程序工具。
    数据库设计系统存储方案,并制定未来的存储需求计划。
    一旦开发人员设计了一个应用,就需要DBA来创建数据库存储结构(tablespaces)。
    一旦开发人员设计了一个应用,就需要DBA来创建数据库对象(tables,views,indexes)。
    根据开发人员的反馈信息,必要的时候,修改数据库的结构。
    登记数据库的用户,维护数据库的安全性。
    保证数据库的使用符合知识产权相关法规。
    控制和监控用户对数据库的存取访问。
    监控和优化数据库的性能。
    制定数据库备份计划,灾难出现时对数据库信息进行恢复
    维护适当介质上的存档或者备份数据
    备份和恢复数据库
    联系数据库系统的生产厂商,跟踪技术信息。


    DBA的个性特点

      很多时候管理人员都忽视了DBA的个性特点,他们只关注DBA的技术能力。实际上,上面谈到的每个职责都意味着:DBA需要跟各种人员打交道,这些人员可能是销售商、用户、开发人员或者管理人员。这说明:DBA必须具有下面的个性特点:

    自信心
    好奇心
    坚韧的意志力
    老练
    自我驱动
    注意细节

    为什么这些个性特点很重要呢?

      我就有几个缺乏自信心的部下,他们反复问我一些事无巨细的问题,他们没有信心哪怕做最小的决定。他们也缺乏工作的主动性。这对于初级DBA来说可能问题不太大,但对于那些高级DBA来说,如果他们缺乏自信心,他们又可以依赖谁帮他们决策呢?在DBA的面试中,即使你不能回答某个技术问题,你也要表现出足够的自信心。最致命的不是不知道问题的答案,而是不知道从哪儿得到答案。

      几乎所有的数据库系统都在不停地更新。但并不是所有的更新都有技术文档。对于好的DBA来说,好奇心是必需的。没有好奇心和求知欲的DBA总是等待有人告诉他们答案。而一个求知欲强的DBA将安装最新版本的数据库系统,并立即开始搜寻那些哪怕是细微的功能和性能上的差异和增强,从而改进自己的工作。应试时一个必然问及的问题是:你手头有哪些参考资料?你如何使用它们?毫无疑问,如果你只回答了数据库的文档,或者你甚至没有读过他们,你的"股票市值"将大大下降。好奇心会驱使DBA们理解数据字典(Data Dictionary)、管理工具(Tools)或者其他支持包(Packages)。

      DBA常常会碰到棘手的问题。寻找答案是一个需要坚韧意志力、可以经受摔打的个性特点。我常常在一些讨论组或者论坛上看到DBA们提出的问题,这些问题往往是提问者自己可以解决的,如果他们具有坚韧的个性特点,并努力寻求问题的答案。

      自我驱动对每个人都是很重要的,对DBA尤其如此。DBA要能想办法使问题出现,而不是等待问题的出现。自驱力强的DBA常常设法取得或者自己写一些必要的脚本(Script)来监控包括数据表大小(Table Size)、表空间使用(Tablespace Usage)等项目,这些项目如果被忽视,他们将遇到麻烦。应试的时候DBA们常常被问及在PL/SQL、SQL或者SQL*PLUS方面的经验,这些问题将把你从从来没有编写过自己需要的脚本的那些DBA们区分开。

      不用说和用户,就是和程序员和管理人员打交道,也需要你足够老练。一个一点不会处事的DBA不会为你做什么好事,只会在你的部门点燃敌对情绪的烈火。老练是这样一种能力,你劝告某个人到地府去,哈哈,最后这个人怀着渴望的心情去了。很多时候,开发者、管理者、用户,他们会提出毫无道理的需求,DBA们需要老练地引导、修正它们的要求,说服他们。在应试时,你的应对就很能说明你是否老练。
    最后说说注意细节,这种性格倾向非常重要。注意细节的DBA们衣着整洁,有自己的日程安排,在应试前对应聘的单位做过调查。注意细节的DBA们深入了解数据库的内核,并能理解视图、表之间的关系。

    DBA的等级

      DBA的等级并不是很严格的。按照对数据库的掌握情况,我简单地分成三个等级:初级Primary、中级Intermediate和高级Senior。

      初级DBA又称为DBBS,是英文Database Baby Sitter的缩写。初级DBA常常是兼职的,他们往往同时是程序员或者兼任其他的工作。初级DBA往往把个人简历写得很棒,参与了很多和数据库有关的项目或工作。但是,这些项目或者工作往往是:第三方软件供应商已经安装并配置了数据库,他们只做一些监控的工作。他们能处理一些简单的问题,但大多数时候他们向应用软件供应商求救。初级DBA更喜欢图形化的数据库管理或者监控工具,他们喜欢Access这样的桌面数据库简单易用,并把这些小型数据库的经验简单地应用到大型数据库相关的工作中。

      初级DBA是最好区分的。而中级DBA和高级DBA就不太好区分。他们的差别在于经验的不同和个性特点、能力方面的差异。中级DBA比较多,他们可以胜任高级DBA的大部分工作,包括:

    数据库安装
    数据库配置和管理
    权限设置和安全管理
    监控和性能调节
    备份和恢复
    解决一般的问题

      中级DBA往往从业一年左右,熟悉某种操作系统环境下的数据库。因为对中级DBA来讲,Windows NT和Unix是有很大差别的。中级DBA对SQL比较熟悉,他们自己购买了几本数据库方面的书籍,并深入钻研。中级DBA往往同时兼任数据库程序员,他们的工作对性能、稳定性、安全性的追求基本上不是很高,往往配合高级DBA做一些例行工作。

      高级DBA在国内是非常少的。他们购买了太多的数据库方面的英文资料,也许是托朋友从Amazon买的。相对于他们的报酬来讲,买书的钱是很少的一个比例。高级DBA一般都熟悉很多种操作平台下的几种大型数据库。他们知道各种不同数据库在不同环境下的优势和劣势,并能在数据库平台和数据库环境的选择方面做出决策。他们一般通晓系统架构和数据库设计,并能对数据库进行各种级别的优化。高级DBA一般都配有助手,他们更偏向做决策和计划。高级DBA往往在银行业、保险业、在线交易等对稳定性、安全性、性能都要求比较高的关键业务处理领域大显身手。

      很多时候,是否取得数据库专家认证证书并不是很重要。我知道很多数据库厂商的培训只要你去了都会获得证书。有很多的公司提供商业化的培训,他们的服务质量也有好有劣。所以证书并不是特别地有意义。

    几种流行的数据库系统

    最"容易"的数据库系统-Microsoft SQL Server

      如果你打算做一个DBA,建议你选择那些现在比较流行的数据库系统。这意味着你将有更多的就业机会、交流和培训机会,而且,流行自有流行的理由,你可以因此省心很多。当然,就业竞争压力也比较大。一般的入门者选择Microsoft SQL Server,这是非常适合中小型企业的数据库系统,熟悉Access的读者很容易就能初步使用Microsoft SQL Server,成为一个DBBS。 J
    Microsoft SQL Server 7.0的报价,5用户版1399美金,增加用户时,127美金每用户。

    最"难"的数据库-无冕之王Oracle

      如果你有机会接触到Oracle,那可是个好机会。Oracle是目前最看好的数据库厂商,由于其强大的功能和可配置、可管理能力,Oracle DBA的薪资一般比其他数据库管理员的薪资要高。而且,Oracle在大中型企业的关键应用也更加普遍了。Oracle可以运行在Windows NT、Sun Solaris、Linux等平台下。很多情况下要求你不仅仅熟悉NT,还要你熟悉Unix;而且Oracle不太友善的界面和成箱的Oracle产品资料可能也是一个障碍。
    Oracle 8i标准版的报价,如果运行在Windows NT,附带JServer和interMedia,支持5个并发用户,报价是3925美金每CPU。增加并发用户时,785美金每用户。增加附加的命名用户时,392.5美金每用户。

    数据库系统的贵族-IBM UDB/DB2

      作为30年数据库研究的成果,IBM DB2确实称得上"数据库系统的贵族"。不管是小型商业系统,还是大的银行系统,用DB2都是可以高枕无忧的。最近推出的新版DB2 6.1, 管理和调节工具更加卓越和便于使用。DB2 可以运行在Intel架构上,也可以运行在IBM的S/390大型计算机上。如果你所在的行业对IBM的机器特别地称道,建议你学习IBM DB2。

    DB2有两种版本:工作组版和企业版。工作组版999美元每服务器,外加249美元每个并发用户。而企业版是12500美元每个CPU,不限并发用户数量。

    以Java为中心的数据库-Sybase Adaptive Server Enterprise(ASE) 12.0

      即将发布的Sybase ASE 12.0,直接面向Java 程序员。这种以Java为中心的数据库系统,为那些准备在Java 平台下构建企业应用的企业来说,将是最好的选择。但是ASE称不上一个数据库领域的领先者,尽管相对于它以前的版本已经改进很多,并支持多个CPU和更多的并发,还有很多的新的特性。但Sybase的风光似乎已经不再。

    值得期盼的Informix Centaur

      有时候"第一"只是意味着你的对手需要等待更长的时间去赶上你。这正是1997年创立的Informix所面临的。Informix公司是率先将多媒体特性加入到关系数据库系统的大型数据库厂商之一。但是如今,IBM、Oracle、Sybase都已经跨越了这个概念。所以,Informix不得不寻求新的支撑来使自己区别于其他数据库厂商。这就是Informix Centaur的目标。Informix Centaur结合了Informix Dynamic Server 7.3的对象-关系数据库和Informix Universal Data Option 9.1,意在获得更好的适应性和多媒体支持。详情如何,我们拭目以待!

    DBA的薪资

    有很多因素影响到你作为DBA的薪资:

    你的经验和能力所决定的DBA等级
    你所熟悉的数据库系统
    你的个性特点和潜力

    展开全文
  • 想要从事云计算方面的工作,但不知道从哪里...云管理员 企业需要一个人来配置云部署并执行管理和监控任务。那个人就是云管理员。通过培训和认证获得的坚实的知识基础,可以为您在云计算领域的职业做好准备——但要确...

    想要从事云计算方面的工作,但不知道从哪里开始吗?第一步是看一些流行的云的角色,并了解雇主对他们的期望。然后,了解您的简历上需要什么,如何获取相关经验以及如何回答雇主在面试中提出的一些难题。

    这里概述了云计算的一些常见职业以及他们所需的技能:

    云管理员

    企业需要一个人来配置云部署并执行管理和监控任务。那个人就是云管理员。通过培训和认证获得的坚实的知识基础,可以为您在云计算领域的职业做好准备——但要确保您的技能是的。

    管理员的大部分工作是云基础设施管理,所以雇主将询问您的云管理体验,以及您熟悉的工具和平台。了解核心的云平台,监控工具和配置管理系统,如Ansible和Zenoss。面试官希望您能够展示如何使用这些工具来解决问题并提高用户体验,因此需要提供真实的案例。

    企业继续拥抱公有和混合云模型。准备好探讨将工作负载合并到公共云以及这样做的好处。

    云架构师

    云架构师要考虑到大局:他们监督云计算策略,包括采用计划,应用设计和管理。由于云技术不断变化,云架构师必须了解当前趋势,以保证环境能够有效运行。

    企业希望他们的架构师能够设计永不过时的系统。从长远考虑企业在三年或三年以上的云战略。你设计的路线越好,企业为未来做的准备就越好。

    跨平台应用可移植性是企业面临的一个大问题,所以在面试中可能会出现关于容器体验的问题。云架构师需要了解容器的功能以及它们如何适应云策略。

    此外,诸如OpenStack等开源平台是想要自定义云的公司的热门选择。查看供应商以及供应商中立的认证,努力实现云计算的这一职业生涯。

    云安全管理员

    安全性始终是企业的首要关注点,云安全管理员的作用是保持云部署的安全。准备迎接挑战性的面试。正式的培训和认证,如信息系统安全专家认证,是简历的重要方面。虽然坚实的教育基础很重要,但雇主希望听到您在现实世界中如何使用这些技能。

    从事云计算安全性工作涉及到很多方面。您必须证明您能够设计,执行和维护各种云基础架构的云安全策略。云系统面临的威胁和风险日益改变,所以管理员必须不断监控环境。跟踪云安全趋势并掌握不同的工具和流程,如加密,访问控制和多重身份验证。

    管理人员必须具备良好的沟通能力,为组织内的员工制定政策,并且了解管控和合规性标准(如PCI DSS)。

    云应用开发人员

    企业开发和部署软件的方式随着云计算的发展而不断变化。由于这些变化,企业对云应用开发人员的要求也越来越多;他们希望开发人员也能够承担通常是架构师,工程师,分析师和技术人员等角色所承担的任务。不过,候选人还需要具有编程方面的教育背景——请务必查看潜在的雇主使用哪些语言,并将其添加到您的任务仓库中。

    获得主流云平台(如Amazon Web Services,Google和Azure)的实际开发经验。随着多云开始出现,熟悉各种平台以及它们之间的互操作性将为您带来好处。

    雇主需要确保您是适合他们企业的较佳选择,所以他们会询问您的开发过程。您使用的管理和开发工具越多,面试官就越可以评估您是否能够转换到他们的工具集上。

    强调自动化的重要性,特别是在处理DevOps,持续集成和持续交付时。敏捷模型在企业中很受欢迎,因此这些模型的经验以及不同部门和角色之间的合作能力是一个很大的优势。

    展开全文
  • 3. Microsoft SQL Server 数据库管理员的角色和任务Microsoft Windows 2000 平台SQL Sever DBA 的基本 / 选择工作项目 DBA 的小技术本章总结Microsoft SQL Sever 数据库管理员(DBA)并没有一套制式化的任务模式,各...
  • 数据库管理员

    千次阅读 2011-10-26 22:17:20
    数据库管理员(Database Administrator,简称DBA),是一个负责管理和维护数据库服务器的人。数据库管理员负责全面管理和控制数据库系统。这个职位对不同的人意味着不同的意义。 编辑本段简介  一个小的软件开发...
  • 数据库管理员-DBA简单介绍

    千次阅读 2012-08-23 10:18:08
    数据库管理员,英文是Database Administrator,简称DBA。这个职位对不同的人意味着不同的意义。一个小的软件开发工作室和一个分工高度明细的大公司相比,DBA的职责来得更加宽泛一些。一个公司,不管它是自己开发应用...
  • 软件配置管理岗位职责说明

    千次阅读 2010-08-22 09:33:00
    软件配置管理岗位职责说明一、配置经理的基本技能与资格 资格: 能够重视配置管理工作; 能够按规范实施配置管理工作; 积极支持部门的配置管理方面的工作; 能够积极支持与帮助其他人员; 为部门的配置管理...
  • 管理员的三权分立

    千次阅读 2019-03-14 10:30:24
    三员的理解:系统管理员,安全保密管理员,安全审计员 三员之三权:废除超级管理员;三员是三角色并非三人;安全保密管理员与审计员必须非同一个人。 BMB20-2007 提出的系统管理员、安全保密管理员和安全审计员是 3...
  • 网络管理员职责,就是保证所维护管理的网络每日24小时、每周7天、一年365天正常运转。网络正常运转的时候人们往往并不注意你的劳动成果和你的重要作用,网络一旦出现故障,你常常成为关注焦点,众矢之的。因此,...
  • 网管的任务与职责漫谈

    千次阅读 2005-06-06 02:35:00
    网管员的任务与职责漫谈 2004-11-24 09:30:05 作者:eNet学院 冷寒生摘编 来源:enet 【简 介】作为一个合格的网络管理员,你需要有宽阔的技术背景知识,需要熟练掌握各种系统和设备的配置和操作,需要阅读和熟记...
  • 数据库管理员DBA

    千次阅读 热门讨论 2004-02-11 17:33:00
    数据库管理员DBA什么是DBA 数据库管理员,英文是Database Administrator,简称DBA。这个职位对不同的人意味着不同的意义。一个小的软件开发工作室和一个分工高度明细的大公司相比,DBA的职责来得更加宽泛一些。一个...
  • DBA数据库管理员要求

    2009-03-10 19:59:50
    近年来,我一直在和数据库管理员打交道,并直接面试了很多DBA职位。本文想概括一下IT行业对DBA的要求,以及国内DBA的新资现状。可以肯定地说,做一个高级DBA是很不错的职业。如果你打算成为一名DBA,那么希望本文起...
  • 不做七种危险的网络管理员

    千次阅读 2012-07-11 13:16:03
    在这里,他定义了七类最不安全的网络管理员。如果你是一名网络管理员,并且已经意识到工作中还存在着不足,看看你属于名单中的哪一类? 大多数网络管理员对工作游刃有余,并且可以在一个具有高度挑战和技术难度的...
  • 怎样做好一个服务器管理员

    千次阅读 2013-07-12 21:21:36
    除了文章下面的留言收集外,51CTO的BBS也是广大“午饭”交流的重要平台。今天,小编就看到了一个非常...作为一个服务器管理员,日常应该做些什么?以下是51CTO版主对其问题提出了详尽解答。 1.服务器系统管理
  • 数据库管理员DBA必读

    2010-03-23 00:14:00
    什么是DBA 数据库管理员,英文是Database Administrator,简称DBA。这个职位对不同的人意味着不同的意义。一个小的软件开发工作室和一个分工高度明细的大公司相比,DBA的职责来得更加宽泛一些。一个公司,不管它是...
  • ERP管理员培训报道

    千次阅读 2016-11-03 10:49:44
    金秋十月,丹桂飘香,为期三天的“201610管理员培训”活动于2016年10月19日在苏州总部成功举行。参与本次培训活动的有浙江卡迪夫电缆有限公司、上海华源瓷业股份有限公司、江苏牛牌纺织机械有限公司、江苏华达化工...
  • 2. Microsoft Windows 2000 平台Windows 2000 家族 Windows 2000 的组件和功能本章总结Microsoft 于2000年2月正式推出 Windows 2000 操作系统平台。虽然 Microsoft原本的 Window NT4 就支持 SQL Sever 2000,但 ...
  • 系统管理员的概念和工作职责 系统管理员(System Administrator)主要分为网络管理员和系统管理员。网络管理员也称为网络工程师(Network Engineer,简称为网管)主要负责整个公司网络的设计,网络设备的安装、...
  • 数据库管理员,英文是Database Administrator,简称DBA。数据管理员是指一个负责管理和维护数据库服务器的人。 DBA是一份清闲的工作,还是复杂且须付出心力的重任?把DBA作为一个可能的职业选择的原因是什么呢? 如何...
  • IT各个层次角色与职责

    千次阅读 2015-04-01 21:19:38
    在IT行业中一般由需求分析师、产品经理、交互设计师、视觉设计师、架构设计师、数据架构师、数据分析师、开发工程师、测试工程师、配置管理员、项目经理、质量经理。下面让我们来说说他们分别的职责与在项目运行过程...
  • 定义项目研发过程,组建项目团队并明确职责,定义项目研发过程的度量指标; 主导制定并维护项目主计划,并协调各种资源实施PDT的管理工作; 统筹管理项目立项阶段到发布阶段整个过程中的所有工作; 协调市场、...
  • 数据:描述事物的符号 ...数据库管理员(DateBase Administrator,简称DBA) 数据库管理员是对数据库进行规划、设计、维护和监视等的专业人员, 在数据库系统中起着非常重要的作用。 数据库管理系统(DataBa...
  • 做个数据库管理员DBA

    2006-10-09 11:51:00
    什么是DBA 数据库管理员,英文是Database Administrator,简称DBA。这个职位对不同的人意味着不同的意义。一个小的软件开发工作室和一个分工高度明细的大公司相比,DBA的职责来得更加宽泛一些。一个公司,不管它是...
  • 角色的管理员创建和维护网站 一个站长是谁的人处理一个网站在确保Web服务器,硬件和软件功能系统的维护。他是包含在一个网站,包括文字和图片信息的唯一建筑。他有喜欢设计的网站,生成和修改网页,回答用户的意见,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,545
精华内容 6,618
关键字:

平台管理员是什么职责