测试起步。。。

发布新日志

  • statspack[转载]

    2010-01-24 22:52:48

    虽然不完整,但看看还是很有好处的,关键是中文滴:em11:

    (1) 
    调整的先后次序 

    1. Tune the design. -- Application designers 

    2. Tune the application. -- Application developers 

    3. Tune memory. 

    4. Tune I/O. 

    5. Tune contention. 

    6. Tune the operating system. 



    Statspack
    分析报告详解: 

    statspack 
    输出结果中必须查看的十项内容 

      1、负载间档(Load profile) 
      2、实例效率点击率(Instance efficiency hit ratios) 
      3、首要的5个等待事件(Top 5 wait events) 
      4、等待事件(Wait events) 
      5、闩锁等待 
      6、首要的SQL(Top sql) 
      7、实例活动(Instance activity) 
      8、文件I/O(File I/O) 
      9、内存分配(Memory allocation) 
      10、缓冲区等待(Buffer waits



    1.
    报表头信息
    数据库实例相关信息,包括数据库名称、ID、版本号及主机等信息。

    STATSPACK report for 
    DB Name DB Id Instance Inst Num Release Cluster Host 
    ------------ ----------- ------------ -------- ----------- ------- ------------ 
    BLISSDB 4196236801 blissdb 1 9.2.0.4.0 NO BLISS 
    Snap Id Snap Time Sessions Curs/Sess Comment 
    ------- ------------------ -------- --------- ------------------- 
    Begin Snap: 4 23-6
     -05 17:43:32 10 3.3 
    End Snap: 5 23-6
     -05 18:01:32 12 6.1 
    Elapsed: 18.00 (mins) 
    Cache Sizes (end) 
    ~~~~~~~~~~~~~~~~~ 
    Buffer Cache: 24M Std Block Size: 8K 
    Shared Pool Size: 48M Log Buffer: 512K 

    2.
    负载间档
    该部分提供每秒和每个事物的统计信息,是监控系统吞吐量和负载变化的重要部分。
    Load Profile 
    ~~~~~~~~~~~~ 
    Per Second Per Transaction
    --------------- ---------------
    Redo size: 431,200.16 18,627,847.04z
    Logical reads: 4,150.76 179,312.72
    Block changes: 2,252.52 97,309.00
    Physical reads: 23.93 1,033.56
    Physical writes: 68.08 2,941.04
    User calls: 0.96 41.36
    Parses: 1.12 48.44
    Hard parses: 0.04 1.92
    Sorts: 0.77 33.28
    Logons: 0.00 0.20
    Executes: 2.36 102.12
    Transactions: 0.02 

    Redo size
    :每秒产生的重做日志大小(单位字节),可标志数据变更频率数据库任务的繁重与否。本例中平均每秒产生了430K左右的重做,每个事务品均产生了18M的重做。
    Logical reads
    :平次每秒产生的逻辑读,单位是block
    block changes
    :每秒block变化数量,数据库事物带来改变的块数量。
    Physical reads
    :平均每秒数据库从磁盘读取的block数。
    Logical reads
    Physical reads比较:大约有0.55%的逻辑读导致了物理I/O,平均每个事务执行了大约18万个逻辑读,在这个例子中,有一些大的事务被执行,因此很高的读取数目是可以接受的。
    Physical writes
    :平均每秒数据库写磁盘的block数。
    User calls
    :每秒用户call次数。
    Parses
    Hard parses:每秒大约1.12个解析,其中有4%为硬解析,系统每25秒分析一些SQL,都还不错。对于优化好的系统,运行了好几天后,这一列应该达到0,所有的sql在一段时间后都应该在共享池中。
    Sorts
    :每秒产生的排序次数。
    Executes
    :每秒执行次数。
    Transactions
    :每秒产生的事务数,反映数据库任务繁重与否。
    % Blocks changed per Read: 54.27 Recursive Call %: 86.94
    Rollback per transaction %: 12.00 Rows per Sort: 32.59 

    % Blocks changed per Read
    :说明46%的逻辑读是用于那些只读的而不是可修改的块,该系统只更新54%的块。
    Rollback per transaction %
    :事务回滚的百分比。计算公式为:Round(User rollbacks / (user commits + user rollbacks) ,4)* 100%。本例中每8.33个事务导致一个回滚。如果回滚率过高,可能说明数据库经历了太多的无效操作。过多的回滚可能还会带来Undo Block的竞争。
    3.
    实例命中率
    该部分可以提前找出ORACLE潜在将要发生的性能问题,很重要。
    Instance Efficiency Percentages (Target 100%)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Buffer Nowait %: 100.00 Redo NoWait %: 100.00
    Buffer Hit %: 99.42 In-memory Sort %: 100.00
    Library Hit %: 98.11 Soft Parse %: 96.04
    Execute to Parse %: 52.57 Latch Hit %: 100.00
    Parse CPU to Parse Elapsd %: 11.40 % Non-Parse CPU: 99.55
    Buffer Nowait %
    :在缓冲区中获取Buffer的未等待比率,Buffer Nowait<99%说明,有可能是有热块(查找x$bh tchv$latch_childrencache buffers chains)
    Redo NoWait %
    :在Redo缓冲区获取Buffer的未等待比率。
    Buffer Hit %
    :数据块在数据缓冲区中的命中率,通常应在90%以上,否则,小于95%,需要调整重要的参数,小于90%可能是要加db_cache_size,但是大量的非选择的索引也会造成该值很高(大量的db file sequential read)。如果一个经常访问的列上的索引被删除,可能会造成buffer hit 显著下降。如果增加了索引,但是它影响了ORACLE正确的选择表连接时的驱动顺序,那么可能会导致buffer hit 显著增高。如果命中率变化幅度很大,说明需要改变SQL模式。
    In-memory Sort %
    :在内存中的排序率。
    Library Hit %
    :主要代表sql在共享区的命中率,通常在95%以上,否则需要要考虑加大共享池,绑定变量,修改cursor_sharing等参数。
    Soft Parse %
    :近似看作sql在共享区的命中率,小于<95%,需要考虑到绑定,如果低于80%,那么就可能sql基本没有被重用。
    Execute to Parse %
    :一个语句执行和分析了多少次的度量。在一个分析,然后执行语句,且再也不在同一个会话中执行它的系统中,这个比值为0。计算公式为:Execute to Parse =100 * (1 - Parses/Executions)。所以如果系统Parses > Executions,就可能出现该比率小于0的情况。本例中,对于每个分析来说大约执行了2.1次。该值<0通常说明shared pool设置或效率存在问题,造成反复解析,reparse可能较严重,或者可是同snapshot有关,如果该值为负值或者极低,通常说明数据库性能存在问题。
    Latch Hit %
    :要确保>99%,否则存在严重的性能问题,比如绑定等会影响该参数。
    Parse CPU to Parse Elapsd %
    :计算公式为:Parse CPU to Parse Elapsd %= 100*(parse time cpu / parse time elapsed)。即:解析实际运行时间/(解析实际运行时间+解析中等待资源时间)。此处为11.4%,非常低,用于解析花费的每个CPU秒花费了大约8.77秒的wall clock时间,这说明花了很多时间等待一个资源。如果该比率为100%,意味着CPU时间等于经过的时间,没有任何等待。
    % Non-Parse CPU
    :计算公式为:% Non-Parse CPU =round(100*1-PARSE_CPU/TOT_CPU),2)。太低表示解析消耗时间过多。与PARSE_CPU相比,如果TOT_CPU很高,这个比值将接近100%,这是很好的,说明计算机执行的大部分工作是执行查询的工作,而不是分析查询的工作。
    4.Shared Pool
    相关统计数据
    Shared Pool Statistics Begin End
    ------ ------
    Memory Usage %: 60.45 62.42
    % SQL with executions>1: 81.38 78.64
    % Memory for SQL w/exec>1: 70.36 68.02 

    Memory Usage %
    :正在使用的共享池的百分率。这个数字应该长时间稳定在75%90%。如果这个百分率太低,就浪费内存。如果这个百分率太高,会使共享池外部的组件老化,如果SQL语句被再次执行,这将使得SQL语句被硬解析。在一个大小合适的系统中,共享池的使用率将处于75%到略低于90%的范围内。
    % SQL with executions>1
    :这是在共享池中有多少个执行次数大于一次的SQL语句的度量。在一个趋向于循环运行的系统中,必须认真考虑这个数字。在这个循环系统中,在一天中相对于另一部分时间的部分时间里执行了一组不同的SQL语句。在共享池中,在观察期间将有一组未被执行过的SQL语句,这仅仅是因为要执行它们的语句在观察期间没有运行。只有系统连续运行相同的SQL语句组,这个数字才会接近100%。这里显示,在这个共享池中几乎有80%SQL语句在18分钟的观察窗口中运行次数多于一次。剩下的20%的语句可能已经在那里了--系统只是没有理由去执行它。
    % Memory for SQL w/exec>1
    :这是与不频繁使用的SQL语句相比,频繁使用的SQL语句消耗内存多少的一个度量。这个数字将在总体上与% SQL with executions>1非常接近,除非有某些查询任务消耗的内存没有规律。
    在稳定状态下,总体上会看见随着时间的推移大约有75%85%的共享池被使用。如果Statspack报表的时间窗口足够大到覆盖所有的周期,执行次数大于一次的SQL语句的百分率应该接近于100%。这是一个受观察之间持续时间影响的统计数字。可以期望它随观察之间的时间长度增大而增大。
    5.
    首要等待事件
    常见等待事件说明:
    oracle
    等待事件是衡量oracle运行状况的重要依据及指示,主要有空闲等待事件和非空闲等待事件。
    TIMED_STATISTICS
    =TRUE,等待事件按等待的时间排序,= FALSE,等待事件按等待的数量排序。
    运行statspack期间必须session上设置TIMED_STATISTICS = TRUE
    空闲等待事件是oracle正等待某种工作,在诊断和优化数据库时候,不用过多注意这部分事件,非空闲等待事件专门针对oracle的活动,指数据库任务或应用程序运行过程中发生的等待,这些等待事件是我们在调整数据库应该关注的。
    Top 5 Timed Events
    ~~~~~~~~~~~~~~~~~~ % Total
    Event Waits Time (s) Ela Time
    -------------------------------------------- ------------ ----------- --------
    db file sequential read 22,154 259 62.14
    CPU time 49 11.67
    log file parallel write 2,439 26 6.30
    db file parallel write 400 22 5.32
    SQL*Net message from dblink 4,575 15 3.71
    ------------------------------------------------------------- 

    这里是比其他任何事件都能使速度减慢的事件。比较影响性能的常见等待事件:
    db file scattered read
    :该事件通常与全表扫描有关。因为全表扫描是被放入内存中进行的进行的,通常情况下它不可能被放入连续的缓冲区中,所以就散布在缓冲区的缓存中。该指数的数量过大说明缺少索引或者限制了索引的使用(也可以调整optimizer_index_cost_adj)。这种情况也可能是正常的,因为执行全表扫描可能比索引扫描效率更高。当系统存在这些等待时,需要通过检查来确定全表扫描是否必需的来调整。如果经常必须进行全表扫描,而且表比较小,把该表存人keep池。如果是大表经常进行全表扫描,那么应该是OLAP系统,而不是OLTP的。
    db file sequential read
    :该事件说明在单个数据块上大量等待,该值过高通常是由于表间连接顺序很糟糕,或者使用了非选择性索引。通过将这种等待与statspack报表中已知其它问题联系起来(如效率不高的sql),通过检查确保索引扫描是必须的,并确保多表连接的连接顺序来调整, DB_CACHE_SIZE可以决定该事件出现的频率。
    db file sequential read
    :该事件说明在单个数据块上大量等待,该值过高通常是由于表间连接顺序很糟糕,或者使用了非选择性索引。通过将这种等待与statspack报表中已知其它问题联系起来(如效率不高的sql),通过检查确保索引扫描是必须的,并确保多表连接的连接顺序来调整,DB_CACHE_SIZE可以决定该事件出现的频率。
    buffer busy wait
    :当缓冲区以一种非共享方式或者如正在被读入到缓冲时,就会出现该等待。该值不应该大于1%,确认是不是由于热点块造成(如果是可以用反转索引,或者用更小块大小)。
    latch free
    :常跟应用没有很好的应用绑定有关。闩锁是底层的队列机制(更加准确的名称应该是互斥机制),用于保护系统全局区(SGA)共享内存结构闩锁用于防止对内存结构的并行访问。如果闩锁不可用,就会记录一次闩锁丢失。绝大多数得闩锁问题都与使用绑定变量失败(库缓存闩锁)、生成重作问题(重执行分配闩锁)、缓存的争用问题(缓存LRU以及缓存的热数据宽块(缓存链)有关。当闩锁丢失率高于0.5%时,需要调整这个问题。
    log buffer space
    :日志缓冲区写的速度快于LGWRREDOFILE的速度,可以增大日志文件大小,增加日志缓冲区的大小,或者使用更快的磁盘来写数据。
    logfile switch
    :通常是因为归档速度不够快,需要增大重做日志。
    log file sync
    :当一个用户提交或回滚数据时,LGWR将会话得重做操作从日志缓冲区填充到日志文件中,用户的进程必须等待这个填充工作完成。在每次提交时都出现,如果这个等待事件影响到数据库性能,那么就需要修改应用程序的提交频率为减少这个等待事件,须一次提交更多记录,或者将重做日志REDO LOG文件访在不同的物理磁盘上。
    Wait time: 
    等待时间包括日志缓冲的写入和发送操作。
    6.
    数据库用户程序发生的所有等待事件
    Wait Events for DB: BLISSDB Instance: blissdb Snaps: 4 -5
    -> s - second
    -> cs - centisecond - 100th of a second
    -> ms - millisecond - 1000th of a second
    -> us - microsecond - 1000000th of a second
    -> ordered by wait time desc, waits desc (idle events last)
    Avg
    Total Wait wait Waits
    Event Waits Timeouts Time (s) (ms) /txn
    ---------------------------- ------------ ---------- ---------- ------ --------
    db file sequential read 22,154 0 259 12 886.2
    log file parallel write 2,439 2,012 26 11 97.6
    db file parallel write 400 0 22 55 16.0
    SQL*Net message from dblink 4,575 0 15 3 183.0
    SQL*Net more data from dblin 64,490 0 13 0 2,579.6
    control file parallel write 416 0 5 13 16.6
    db file scattered read 456 0 5 11 18.2
    write complete waits 9 0 5 568 0.4
    control file sequential read 370 0 5 13 14.8
    log buffer space 126 0 4 34 5.0
    free buffer waits 11 1 3 313 0.4
    log file switch completion 13 0 2 188 0.5
    log file sync 90 0 1 8 3.6
    log file sequential read 10 0 0 16 0.4
    latch free 17 6 0 8 0.7
    direct path read 56 0 0 1 2.2
    direct path write 56 0 0 1 2.2
    SQL*Net more data to client 173 0 0 0 6.9
    SQL*Net message to dblink 4,575 0 0 0 183.0
    LGWR wait for redo copy 8 0 0 1 0.3
    log file single write 10 0 0 1 0.4
    db file single write 5 0 0 0 0.2
    SQL*Net break/reset to clien 5 0 0 0 0.2
    async disk IO 15 0 0 0 0.6
    SQL*Net message from client 789 0 3,290 4170 31.6
    virtual circuit status 36 36 1,082 30069 1.4
    wakeup time manager 34 34 1,034 30403 1.4
    SQL*Net message to client 791 0 0 0 31.6
    SQL*Net more data from clien 30 0 0 0 1.2
    ------------------------------------------------------------- 

    7.
    数据库后台进程发生的等待事件
    Background Wait Events for DB: BLISSDB Instance: blissdb Snaps: 4 -5
    -> ordered by wait time desc, waits desc (idle events last)
    Avg
    Total Wait wait Waits
    Event Waits Timeouts Time (s) (ms) /txn
    ---------------------------- ------------ ---------- ---------- ------ --------
    log file parallel write 2,439 2,012 26 11 97.6
    db file parallel write 400 0 22 55 16.0
    control file parallel write 406 0 5 13 16.2
    control file sequential read 258 0 4 16 10.3
    db file sequential read 19 0 1 51 0.8
    log buffer space 24 0 0 9 1.0
    log file sequential read 10 0 0 16 0.4
    latch free 14 6 0 9 0.6
    db file scattered read 6 0 0 14 0.2
    direct path read 56 0 0 1 2.2
    direct path write 56 0 0 1 2.2
    LGWR wait for redo copy 8 0 0 1 0.3
    log file single write 10 0 0 1 0.4
    rdbms ipc message 7,339 3,337 3,172 432 293.6
    pmon timer 373 373 1,083 2903 14.9
    smon timer 3 3 924 ###### 0.1
    ------------------------------------------------------------- 

    8.TOP SQL
    调整首要的25个缓冲区读操作和首要的25个磁盘读操作做的查询,将可对系统性能产生5%5000%的增益。
    SQL ordered by Gets for DB: BLISSDB Instance: blissdb Snaps: 4 -5
    -> End Buffer Gets Threshold: 10000
    -> Note that resources reported for PL/SQL includes the resources used by
    all SQL statements called within the PL/SQL code. As individual SQL
    statements are also reported, it is possible and valid for the summed
    total % to exceed 100
    CPU Elapsd
    Buffer Gets Executions Gets per Exec %Total Time (s) Time (s) Hash Value
    --------------- ------------ -------------- ------ -------- --------- ----------
    1,230,745 1 1,230,745.0 27.5 16.39 60.69 1574310682
    Module: PL/SQL Developer
    insert into city_day_cal select * from rptuser.city_day_cal@db15
    1
    143,702 1 143,702.0 3.2 1.75 18.66 3978122706
    Module: PL/SQL Developer
    insert into city_day_cal select * from rptuser.city_day_cal@db15
    1 where curtime between to_date('200501','yyyymm') and to_date('
    200502','yyyymm')-1 

    在报表的这一部分,通过Buffer GetsSQL语句进行排序,即通过它执行了多少个逻辑I/O来排序。顶端的注释表明一个PL/SQL单元的缓存获得(Buffer Gets)包括被这个代码块执行的所有SQL语句的Buffer Gets。因此将经常在这个列表的顶端看到PL/SQL过程,因为存储过程执行的单独的语句的数目被总计出来。
    SQL ordered by Reads for DB: BLISSDB Instance: blissdb Snaps: 4 -5
    -> End Disk Reads Threshold: 1000
    CPU Elapsd
    Physical Reads Executions Reads per Exec %Total Time (s) Time (s) Hash Value
    --------------- ------------ -------------- ------ -------- --------- ----------
    3,587 1 3,587.0 13.9 0.17 5.13 3342983569
    Module: PL/SQL Developer
    select min(curtime),max(curtime) from city_day_cal
    1,575 1 1,575.0 6.1 1.75 18.66 3978122706
    Module: PL/SQL Developer
    insert into city_day_cal select * from rptuser.city_day_cal@db15
    1 where curtime between to_date('200501','yyyymm') and to_date('
    200502','yyyymm')-1 

    这部分通过物理读对SQL语句进行排序。这显示引起大部分对这个系统进行读取活动的SQL,即物理I/O
    SQL ordered by Executions for DB: BLISSDB Instance: blissdb Snaps: 4 -5
    -> End Executions Threshold: 100
    CPU per Elap per
    Executions Rows Processed Rows per Exec Exec (s) Exec (s) Hash Value
    ------------ --------------- ---------------- ----------- ---------- ----------
    748 748 1.0 0.00 0.00 3371479671
    select t.name, (select owner_instance from sys.aq$_queue_table_
    affinities where table_objno = t.objno) from system.aq$_queue
    _tables t where t.name = :1 and t.schema = :2 for update skip lo
    cked
    442 1,142 2.6 0.00 0.00 1749333492
    select position#,sequence#,level#,argument,type#,charsetid,chars
    etform,properties,nvl(length, 0), nvl(precision#, 0),nvl(scale,
    0),nvl(radix, 0), type_owner,type_name,type_subname,type_linknam
    e,pls_type from argument$ where obj#=:1 and procedure#=:2 order
    by sequence# desc 

    这部分告诉我们在这段时间中执行最多的SQL语句。为了隔离某些频繁执行的查询,以观察是否有某些更改逻辑的方法以避免必须如此频繁的执行这些查询,这可能是很有用的。或许一个查询正在一个循环的内部执行,而且它可能在循环的外部执行一次,可以设计简单的算法更改以减少必须执行这个查询的次数。即使它运行的飞快,任何被执行几百万次的操作都将开始耗尽大量的时间。
    9.
    实例活动
    Instance Activity Stats for DB: BLISSDB Instance: blissdb Snaps: 4 -5
    Statistic Total per Second per Trans
    --------------------------------- ------------------ -------------- ------------
    CPU used by this session 4,870 4.5 194.8
    CPU used when call started 4,870 4.5 194.8
    CR blocks created 45 0.0 1.8
    DBWR buffers scanned 24,589 22.8 983.6
    DBWR checkpoint buffers written 14,013 13.0 560.5
    DBWR checkpoints 5 0.0 0.2
    ……
    dirty buffers inspected 38,834 36.0 1,553.4 --
    脏缓冲的个数
    free buffer inspected 40,463 37.5 1,618.5 --
    如果数量很大,说明缓冲区过小
    …… 

    10.I/O
    下面两个报表是面向I/O的。通常,在这里期望在各设备上的读取和写入操作是均匀分布的。要找出什么文件可能非常。一旦DBA了解了如何读取和写入这些数据,他们也许能够通过磁盘间更均匀的分配I/O而得到某些性能提升。
    Tablespace IO Stats for DB: BLISSDB Instance: blissdb Snaps: 4 -5
    ->ordered by IOs (Reads + Writes) desc
    Tablespace
    ------------------------------
    Av Av Av Av Buffer Av Buf
    Reads Reads/s Rd(ms) Blks/Rd Writes Writes/s Waits Wt(ms)
    -------------- ------- ------ ------- ------------ -------- ---------- ------
    BLISS_DATA
    17,649 16 12.3 1.2 44,134 41 0 0.0
    UNDOTBS1
    4,484 4 9.6 1.0 29,228 27 0 0.0
    SYSTEM
    340 0 31.0 1.1 36 0 0 0.0 

    File IO Stats for DB: BLISSDB Instance: blissdb Snaps: 4 -5
    ->ordered by Tablespace, File
    Tablespace Filename
    ------------------------ ----------------------------------------------------
    Av Av Av Av Buffer Av Buf
    Reads Reads/s Rd(ms) Blks/Rd Writes Writes/s Waits Wt(ms)
    -------------- ------- ------ ------- ------------ -------- ---------- ------
    BLISS_DATA D:ORACLEORADATABLISSDBBLISS01.DBF
    5,779 5 12.0 1.2 14,454 13 0
    D:ORACLEORADATABLISSDBBLISS02.DBF
    5,889 5 12.1 1.2 14,772 14 0
    D:ORACLEORADATABLISSDBBLISS03.DBF
    5,981 6 12.6 1.2 14,908 14 0 

    11.
    缓冲池
    Buffer Pool Statistics for DB: BLISSDB Instance: blissdb Snaps: 4 -5
    -> Standard block size Pools D: default, K: keep, R: recycle
    -> Default Pools for other block sizes: 2k, 4k, 8k, 16k, 32k
    Free Write Buffer
    Number of Cache Buffer Physical Physical Buffer Complete Busy
    P Buffers Hit % Gets Reads Writes Waits Waits Waits
    --- ---------- ----- ----------- ----------- ---------- ------- -------- ------
    D 3,000 99.4 4,482,816 25,756 73,470 11 9 0
    ------------------------------------------------------------- 

    如果我们使用多缓冲池的功能,上面的报表会告诉我们缓冲池引起的使用故障。实际上这只是我们在报表的开头看到的信息的重复。
    12
    .回滚段活动
    Instance Recovery Stats for DB: BLISSDB Instance: blissdb Snaps: 4 -5
    -> B: Begin snapshot, E: End snapshot
    Targt Estd Log File Log Ckpt Log Ckpt
    MTTR MTTR Recovery Actual Target Size Timeout Interval
    (s) (s) Estd IOs Redo Blks Redo Blks Redo Blks Redo Blks Redo Blks
    - ----- ----- ---------- ---------- ---------- ---------- ---------- ----------
    B 37 17 169 4012 3453 184320 3453
    E 37 32 1385 57132 184320 184320 436361
    ------------------------------------------------------------- 
    一般期望活动在各回滚段间(除了SYSTEM回滚段外)均匀分布。在检查报表的这一部分时,报表标题也具有需要记住的最有用信息。尤其是,如果完全使用最佳设置时关于OptmalAvg Active更大的建议。因为这是与DBA最有关的活动(I/O和回滚段信息)

    [ 
    本帖最后由 joelau  2007-3-27 10:50 编辑 ]


     joelau 回复于:2007-03-27 10:41:30

    有耐心的就再看一些吧 


    数据库的等待事件,发现前几名是:
    log file parallel write 

    db file scattered read 

    log file sync 

    db file sequential read 

    SQL*Net more data to client

    发现前面的4项都是影响到数据库性能的问题:

    log file sync


    这个等待时间是指等待oracle的前台的commitrollback操作进程完成,有时候这个等待时间也会包括等待LGWR进程把一个会话事务的日志记录信息从日志缓冲区中写到磁盘上的重做日志文件中。因此当前台进程在等待这个事件的时候,LGWR进程同时也在等待事件log file parallel write

    理解什么造成这个等待事件的关键在于:对比这个等待事件和log file parallel write等待事件的平均等待时间:

    如果他们的等待时间差不多,那么就是重做日志文件的I/O引起了这个等待事件,则需要调整重做日志文件的I/O

    如果log file parallel write等待事件的平均等待时间明显小于log file sync等待事件的等待时间,那么就是一些其他写日志的机制在commitrollback操作时引起的等待,而不是I/O引起的等待。例如重做日志文件的latch竞争,会伴随出现latch free或者LGWR wait for redo copy等待事件

    V$SESSION_WAIT中,这个等待事件有3个参数:

    P1
     
    代表在日志缓冲区中需要被写入到重做日志文件中的缓存数量,写入的同时会确认事务是否已经被提交,并且保留提交信息到实例意外中断前,因此必须等待LGWRP1数量的缓存写入重做日志文件为止。
     
    P2
     
    无用
     
    P3
     
    无用
     

    如果这个等待事件在整个等待事件中占了比较大的比重,可以从3个方面来进行调整

    1. 
    调整LGWR进程时期具有更好的磁盘I/O吞吐量,例如不要将日志文件放在RAID5的磁盘上

    2. 
    如果存在很多执行时间很短的事务,可以考虑将这些事务合并成一个批量事务以减少提交的次数,因为每次提交都需要确认相关的日志写入重做日志文件,因此使用批量事务来减少提交的次数是一种非常行之有效的减少I/O的方法

    3. 
    产看是否有一些操作可以安全的使用NOLOGGING或者UNRECOVERABLE选项,这样可以减少日志文件的产生

    Log file parallel write

    这个等待事件出现在党LGWR后台进程从日志缓冲区写日志信息到磁盘上的重做日志文件的时候。只有启用了异步I/O的时候,LGWR进程才会并行写当前日志组内的充作日志文件,否则LGWR指挥循环顺序逐个的写当前日志组重做日志文件。LGWR进程不得不等待当前日志组所有的重做日志文件成员全部写完,因此,决定这个等待事件的等待时间长短的主要因素是重做日志文件所在磁盘的I/O读写速度。

    如果是当前LGWR进程写的速度不够快导致这个等待事件,可以通过查看一些和重做日志相关的统计值来判定当前的LGWR进程是否效率低下,具体的可以看 redo writes, redo blocks written, redo write time, rdo wastage, redo size等统计值,这些都是和LGWR进程性能直接相关的一些统计值。

    V$SESSION_WAIT中,这个等待事件的3个参数:

    P1
     
    代表正在被写入的重做日志文件组中的重做日志文件号
     
    P2
     
    代表需要写入重做日志组中每个重做日志文件的重做日志block数量
     
    P3
     
    代表I/O请求次数,需要被写入的block会被分成多次分别请求
     

    如果这个等待事件占用比较多的时间,可以做如下调整

    1
     采用UNRECOVERABLE/NOLOGGING操作尽量减少重做日志的产生

    2
     在保证不会同时对市重做日志文件的前提下,尽量减少重做日志组中的成员个数,减少每次写重做日志文件的时间

    3
     除非在备份情况下,否则不要在江表空间置于热备份的模式下,因为在表空间处于热备的模式下会产生更多的重做日志文件

    4
     对于使用LogMinerLogical Standby或者Streams,在能够满足要求功能的前提下,尽量使用最低级别的追加日志以减少重做日志的产生

    5
     尽量将同一个日志组内的重做日志文件分散到不同的硬盘上,减少并行写重做日志文件时产生的I/O竞争

    6
     不要将重做日志文件置于RAID5的磁盘上,最好放在裸设备上。

    7
     如果设置了归档模式,不要将归档日志的目的地设置为存放重做日志的磁盘上,避免引起I/O竞争

    关于Log的这2个问题的总结

    通过上述对Log2个问题的描述,以及产生的原因,除了Log file sync可能有其他方面的因素引起的(Latch),主要还是磁盘和使用习惯

    1
     磁盘由于这些都是写磁盘所引起的,所以只有从减少写磁盘(指数据库本身的角度,和下列提到的用户操作习惯不一样)和加快写磁盘来减少这些等待时间

    a) 
    尽量不要在RAID5的磁盘上保存重做日志文件,RAID5写的速度属于比较慢的

    b) 
    在安全性保证的基础上,减少重做日志组成员的个数

    c) 
    同一个日志组中的不同成员放在不同的磁盘上,加速写的速度。

    d) 
    对可以采用NOLOGGING/UNRECOVERABLE的操作,使用这些选项减少log的产生

    e) 
    有归档的,不要将归档的和在线重做日志放在一个磁盘上

    2
     使用习惯如果用户不断的进行commit或者rollback,这样必定引起一次log日志的写操作。因此可以通过一些统计信息判断是否每次的日志的写操作数据量很小,这样通过调节用户的操作,将大量的数据更新合并到一个事务中来,这样增加每次日志的操作量,减少对日志的不断调用,提高LGWR的写的效率。

    db file scattered read 

    这是一个非常常见的等待时间。当oracle从磁盘上读取多个block到不连续的高速缓存区的缓存中就会发生这个等待事件,Oracle一次最多能够读入的block数量由初始化参数DB_FILE_MULTIBLOCK_READ_COUND决定,这个时间一般伴随着全表扫描或者Fast Full Index 扫描一起出现。

    V$SESSION_WAIT中,这个等待事件的几个参数:

    P1
     
    代表oracle的文件号
     
    P2
     
    代表从这个文件中开始读取的block
     
    P3
     
    代表从这个block开始需要读取的block数量
     

    一般从这个3个参数,就可以回头查询到是在读取数据库的哪个对象,然后分析对这个对象的操作来进行优化Sql语句。

    如果这个等待事件占的比重比较厉害,可以通过以下方法来调整

    方法一

    找出执行全表扫描或者Fast Full index扫描的Sql语句,判断这些扫描是否是必要的,是否导致了比较差的执行计划,进行调整。

    oracle9i开始,提供了一个视图V$SQL_PLAN,可以通过它帮助我们找到那些全表扫描或者Fast Full Index扫描的Sql语句:

    查找全表扫描的SQL语句

    Select sql_text from v$sqltext t, v$sql_plan p

    Where t.hash_value=p.hash_value

    And p.operation=’TABLE ACCESS’

    And p.option=’FULL’

    Order by p.hash-value, t.piece;
     

    查找Fast Full index 扫描的Sql语句可以这样;

    Select sql_text from v$sqltext t, v$sql_plan p

    Where t.hash_value=p.hash_value

    And p.operation=’INDEX’

    And p.option=’FULL SCAN’

    Order by p.hash-value, t.piece;
     

    如果是Oracle8i的数据库,可以通过v$session_event视图中找到关于这个等待事件的进程sid,然后根据这个sid来跟踪相应会话的SQL

    Select sid, event from v$session_event 

    Where event=’db file sequential read’
     

    或者可以通过查看物理读取最多的SQL语句的执行计划,看是否里面包含了全表扫描和Fast Full Index扫描,可以通过以下语句获取物理读取最多的SQL语句

    Select sql_text from

    Select *from v$sqlarea

    Order by disk_reads)

    Where rownum<10
     

    方法二:

    有时候执行计划很好也会出现多block扫描的情况,这个时候可以通过调整Oracle数据库的多blockI/O,来设置一个合理的DB_FILE_MULTIBLOCK_READ_COUNT,使得尽量满足;

    Db_block_size * DB_FILE_MULTIBLOCK_READ_COUNT = max io size of system

    这个参数也不是设置的越大越好,设置这个参数之前需要了解一下应用的类型,如果是OLTP类型的,一般来说全表扫描较少,这个时候如果设置了比较大反而会降低数据库的性能,因为CBO在某些情况下会因为多block读取导致COST比较低从而错误的选用了全表扫描。

    其他方法

    还可以采用对表和索引使用分区、将缓存区的LRU末端的全表扫描和FastFullIndex扫描的block放入到Keep缓存池等方法来进行调节。

    db file sequential read

     

     

     

     

     

     

     

     

     

     

    STATSPACK概述
      
      STATSPACK来源在ORACLE最早版本就存在的UTLBSTATUTLESTAT工具。开始的BSTAT-ESTAT工具就可以直接从ORACLE的内存结构中获取信息。
      
      STATSPACK通过获取数据库当前状态的快照来进行工作。大部分的情况,我们会规划一个以小时为单位来收集数据的JOB,并在需要的时候请求附加快照。当我们获取快照时,STATSPACK会从SGA内部的RAM内存结构中采样,并记录到相应的STATSPACK表中,注意的是,大多数情况下,SGA中的V$视图与相应的的STATSPACK表之间存在直接的对应关系,比如:
      
      V$SYSSTAT --------->STATS$SYSSTAT
      

      SQL> DESC V$SYSSTAT 
      Name                   Null?  Type 
      ----------------------------------------- -------- ----------------------------
      STATISTIC#                    
    NUMBER
      NAME                       
    VARCHAR2(64)
      CLASS                       
    NUMBER
      VALUE                       
    NUMBER
      

      SQL> DESC STATS$SYSSTAT
      Name                   Null?  
    Type
      
    ----------------------------------------- -------- ----------------------------
      SNAP_ID                 
    NOT NULL NUMBER(6)
      DBID                   
    NOT NULL NUMBER
      INSTANCE_NUMBER             
    NOT NULL NUMBER
      STATISTIC#                
    NOT NULL NUMBER
      NAME                   
    NOT NULL VARCHAR2(64)
      VALUE                       NUMBER

    在理解STATSPACK工具的时候,很关键的是要明白通过STATSPACK快照收集的信息是累计值,从V$视图中收集到起始时间的数据库信息,然后进行持续累加,知道实例中止,我想,这也许就应该是STATSPACK不能产生两张跨越SHUTDOWN的快照的报告的原因吧。

    [PERFSTAT@orcl] SQL>select table_name from user_tables;
    oracle10

    1.SQL*PLUS中输入
    [@] SQL> connect sys/sys as sysdba;

    [SYS@orcl] SQL>alter system set job_queue_processes=6; --自动执行数据收集时该参数需要大于0

    [SYS@orcl] SQL>alter system set timed_statistics=true;  

    --使用statspack收集统计信息时建议将该值设置为 TRUE,否则收集的统计信息大约只能起到10%的作用


    [SYS@orcl] SQL>@F:\oracle\product\10.2.0\db_1\RDBMS\admin\spcreate.sql

    Choose the PERFSTAT user's password
    -----------------------------------
    Not specifying a password will result in the installation FAILING

    输入 perfstat_password 的值: perfstat
    输入 default_tablespace 的值
    : test1
    输入 temporary_tablespace 的值: test_temp

    随后,程序包自动运行,
    。。。。。。。。。。。。。。
    ... Creating PERFSTAT user
    ... Installing required packages
    ... Creating views
    ... Granting privileges
    。。。。。。。。。。。。。。

    直至出现:

    NOTE:
    SPCPKG complete. Please check spcpkg.lis for any errors.

    -------到这一步才算成功-------

    2.查看文件夹会产生三个文件
    C:\Documents and Settings\Administrator
    (这个目录可能与你的不同)
    spcpkg.lis
    spctab.lis
    spcusr.lis

    3.手动执行STATSPACK收集统计信息

    注意看你的当前用户,已经更改成perfstat用户了。
    [PERFSTAT@orcl] SQL>show user;
    USER
    "PERFSTAT"
    [PERFSTAT@orcl] SQL>execute statspack.snap;

    PL/SQL 过程已成功完成。

    4.生成STATSPACK调整报告

    [PERFSTAT@orcl] SQL>@F:\oracle\product\10.2.0\db_1\RDBMS\admin\spreport.sql;

    会出来一大串信息,比较重要的信息:


    [PERFSTAT@orcl] SQL>select d.dbid            dbid
    2       , d.name            db_name
    3       , i.instance_number inst_num
    4       , i.instance_name   inst_name
    5    from v$database d,
    6         v$instance i;

       DB Id    DB Name      Inst Num Instance
    ----------- ------------ -------- ------------
    1236556452 ORCL                1 orcl

    已选择 1 行。

    DB Id    Inst Num DB Name      Instance     Host
    ---------- -------- ------------ ------------ ------------
    1236556452        1 ORCL         orcl         PC-200811181
                                                  447

    sing 1236556452 for database Id
    sing          1 for instance number

    Listing all Completed Snapshots

                                                           Snap
    Instance     DB Name        Snap Id   Snap Started    Level Comment
    ------------ ------------ --------- ----------------- ----- ------------
    orcl         ORCL                 1 22 1
    2010 10:1     5
                                        7


    (
    注意:上面显示的是snap id只有1.我在下面输入edn snapshot id 2时报错退出oracle。我再以PERFSTAT登陆,从第三步开始。这次出现2)
    Specify the Begin and End Snapshot Ids
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    输入 begin_snap 的值
    : 1
    Begin Snapshot Id specified: 1

    输入 end_snap 的值: 2
    End   Snapshot Id specified: 2


    输入 report_name 的值: report1.txt

    。。。。。又出现一大串信息,呵呵 略过。。。

    End of Report ( report1.txt )


    5.
    查看产生的report1文档

    C:\Documents and Settings\Administrator\report1.txt

    呵呵,刚才一大串信息都出现在这个文档里。

    6.自动执行STATSPACK收集统计信息

    [PERFSTAT@orcl] SQL>@F:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\spauto.sql;

    PL/SQL 过程已成功完成。


    Job number for automated statistics collection for this instance
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Note that this job number is needed when modifying or removing
    the job:
         JOBNO
    ----------
            21


    Job queue process
    ~~~~~~~~~~~~~~~~~
    Below is the current setting of the job_queue_processes init.ora
    parameter - the value for this parameter must be greater
    than 0 to use automatic statistics gathering:
    NAME_COL_PLUS_SHOW_PARAM
    ------------------------------------------------------------------------------
    TYPE
    ----------------------
    VALUE_COL_PLUS_SHOW_PARAM
    ------------------------------------------------------------------------------
    job_queue_processes
    integer
    6


    Next scheduled run
    ~~~~~~~~~~~~~~~~~~
    The next scheduled run for this job is:
           JOB NEXT_DATE
    ---------- --------------
    NEXT_SEC
    ----------------------------------------------------------------
            21 22-1
    -10
    11:00:00


    spauto.sql
    中主要调用dbms_job.submit,默认每小时收集1次(1/24

    以下是spauto.sql的主要内容:

    variable jobno number;
    variable instno number;
    b

  • dojob

    2009-11-15 19:06:22

  • 回去做

    2009-11-12 20:33:42

    *Input PPC file GMT000001.inp
    * Date : 12/03/2009
    *Input file for Test new profile Cellular
    Customer:  CAM
    Quantity:  50
    Type:  PLUG-IN
    Profile:  1.00
    Batch:  00001
    Transport_key: 002
    SIM_Reference:   SIM64
    Graph_ref: 1.00
    Artwork _ref: 000

    712246326178430 8132118308171903130F 1234 92440446 1149 38422409 50000400 8F5C56B508B0C9DE7519D49300B87A8C
    712246326178431 8132118308171903131F 1234 92440446 1149 38422409 50000401 8F5C56B508B0C9DE7519D49301B87A8C
    712246326178432 8132118308171903132F 1234 92440446 1149 38422409 50000402 8F5C56B508B0C9DE7519D49302B87A8C
    712246326178433 8132118308171903133F 1234 92440446 1149 38422409 50000403 8F5C56B508B0C9DE7519D49303B87A8C
    712246326178434 8132118308171903134F 1234 92440446 1149 38422409 50000404 8F5C56B508B0C9DE7519D49304B87A8C
    712246326178435 8132118308171903135F 1234 92440446 1149 38422409 50000400 8F5C56B508B0C9DE7519D49300B87A8C
    712246326178436 8132118308171903136F 1234 92440446 1149 38422409 50000401 8F5C56B508B0C9DE7519D49301B87A8C
    712246326178437 8132118308171903137F 1234 92440446 1149 38422409 50000402 8F5C56B508B0C9DE7519D49302B87A8C
    712246326178438 8132118308171903138F 1234 92440446 1149 38422409 50000403 8F5C56B508B0C9DE7519D49303B87A8C
    712246326178439 8132118308171903139F 1234 92440446 1149 38422409 50000404 8F5C56B508B0C9DE7519D49304B87A8C

  • 凡人琐事

    2009-05-20 01:00:17

    很快,23号就要来了,软件评测师考试。

    这段时间又犯老毛病了,大考大玩,小考小玩。像过去读书时那样。

    努力让自己紧张起来,找了些试题来做,依旧是读书时的套路,应试,题海战。

    感觉自己除了有时审题不清以外一般的题目还没被难倒在下,心里还是略有一丝得意滴。

    准考证在同学那,评测中心上课频率越来越低,毕设老师终于发模板来了,就业问题依旧困扰,真应了那句“此情s(复数形式)无计可消除,才下眉头,又上心头”

    晚上睡不着,打算待会看下书,困到自然睡,这才是正经事。

  • 一次失败的面试经历-拓维

    2009-05-02 22:26:04

    六月即将毕业,最近一直在找工作,在网上发了很多份简历,却连一份回复都没有,石沉大海的同时,心也沉了。

    很是烦恼~快毕业了,心里却没了底。

    今天去了拓维面试,其实我很重视这次面试,之前和网友聊到说,长沙最好的两大IT企业,除了威盛就是拓维了。

    第一次参加这么正式的面试,其实暑假以前也面试过,做美工,当时感觉面试官很亲切,但是做全职是他们的硬性要求,而那时候的我只想暑假出去实习的,于是告吹了。记得那时候面试官还亲切地跟我说毕业了再来找我们吧~

    可是现在我学的是软件测试,客观的来说,也是比美工更高的工种,当然希望能够找到份专业对口的工作了。

    不得不说拓维很大,厅很大,背投、钢琴、咖啡厅一应俱全。进门后负责招聘的员工也很热情,填表,通知都很客气友善。

    在等通知的时候,我观察了另外一些candidates,他们看得出都比我大,像是有经验的人,有人在找些公司读物看,有人在认真填表,有人在凝想。

    发生了点小插曲,不过我还是到了第一轮面试的考官那。

    看了会儿简历后,考官开始问问题,首先问的是你认为什么是软件测试。

    我答得很规范,把书上的定义用自己的话表达了出来。

    然后考官具体地问了我关于软件评测中心的情况,还具体问了我所做过的项目。另外会不会工具,还出了一道关于SQL的问题,很简单,我轻松地答出了,考官看起来比较满意,让我进了第二轮。

    接着,悲剧开始了。

    面试我的是为年纪大概三十多的男人,说话声音很小,很无力。简历大概看了3分钟有余,然后问了第一个问题,说一说软件测试的流程。

    这是个很基础的问题,我把软件测试流程图口头表达了出来。

    然后又是沉默大概5分钟有余,第二个问题,说说测试用例报告包括哪些内容。

    这个更简单,测试环境,测试人,用例编号,步骤,预期结果,实际是否通过……

    然后又是沉默,他继续盯着简历看,要是我用这么多时间我可以背出这份简历了,虽然我不善于背诵。

    说说以前的项目吧?

    我把最近一次项目是什么,我的工作模块,测试方法,项目流程都说了遍。

    然后这个问题倒是来得快,说,你这里工作经历有一年,应该有更多的项目吧?

    我于是继续说,慢慢开始回忆以前在测评中心做过的项目,说了大概4、5个把项目流程都说了,期间他接了个电话,我就停顿了下。

    跟着是更长的沉默,他继续盯我的简历,我也心里打鼓了,怎么看这么久啊,我又不好打断他的思绪,于是静静地在一旁等着。

    他接着把简历夸张地往额头上碰了碰,像是很挣扎的样子,然后突然冒出一句话:对不起,不能让你过这轮,我们会将你放入人才库,需要的话会通知你。

    当时我就木然了,我知道一般出现这句话就是没戏了,脑子里一下空了,条件反射似的说了声谢谢,就走了。

    接着是后悔,刚到门口就后悔了,因为我甚至连为什么我不行我都没问,就走了。可是为时晚矣,我已经失去了机会。

    有时候成功真的离自己很近,我后来想,如果我利用他沉默的那些会儿多谈谈自己的情况,或是拿出自己准备的简历给他看看,或是在他忧郁的那时候求求他,希望他给我一次机会,也许结果都会是另一个样。

    而失败了,却实在想不起自己哪里有问题更是我这次面试的最大失败。

    但总的来说,我还是有所收获的,希望看到这篇文的朋友也能分享下:比如项目经验很重要,一些基本的编程知识也得清楚,临场的大胆也是一方面,我当时估计就是太木讷了,老想着这是在考验我的耐心,或是别打扰了他的思维,遇到这样的面试官或许是种不幸,但做技术的,不善于表达不排除这种情况。

  • 测试,就业

    2009-04-28 18:29:51

    轰轰烈烈的几个月的软件测试学习算是即将结束了,现在只剩下白盒和测试标准那些部分。

    毕业设计也完成得差不多了,按照老师的要求加了几个功能模块,自认为过关是绝对没问题了,那么,剩下也就是写论文了,指导老师很不负责,现在还没把论文模板发来,催了几次了,哎~

    软考方面,书是有针对性地看了一遍,也做了近年的两套题目,自我感觉还不错,决定再巩固一遍,再多做些题目。

    最一筹莫展的是英语了,提不起兴趣,更要命的是,完全记不住单词,记着记着又忘了,很打击人。

    最大最重要的事情仍是找工作,评测中心只是帮忙推荐,但到时候谁知道呢?还得靠自己吧~技能方面我倒是不担心,我对自己有信心。担心的是有没有公司给我工作的机会,经济危机加上本地软件业并不发达,找工作很难。当年说软件测试行业很需要人才,我现在也开始怀疑了。最近打击不少也不小,都是就业这问题引起的。

    希望老天爷也眷顾我一次,给我份满意的工作吧~

  • 软件评测师考试

    2009-04-12 22:39:59

    上两个星期前报考了软件评测师,看书看到性能测试了,感觉好晕额,好多概念好多难理解的东西。

    现在感觉最难的是那些个测试标准,评价啥的当然还有性能测试的一些个东西。

    今天做了做08的卷子,感觉难不是很难,但陷阱颇多,而且很多概念性的东西,这点我很不喜欢,我不太喜欢回答概念性内容,不是不知道,而是不知道怎样去表达完整。特别像那些个选择题,有些模棱两可或是标准定义的多一个少一个的定义,天啊,谁能看得那么细,记得那么清啊?

    5月多考试,一切依旧,考试,毕业设计,六级,找工作,软测培训,生活很是充实。

  • QTP算是学完了。

    2009-03-06 23:06:17

    其实学会用QTP只需要2周,学好QTP却需要长期的经验累积。

    老师最后给了我们个清单,说只要练过4-5遍,QTP就算基本掌握了。

    太长了。。本来想打下了,算了,浪费时间。

    其实现在还有几个不太了解的地方,一个是恢复场景,还有一个同步点。

    下2周是Java,然后是winrunner,加油。

     

  • QTP学了一段时间了

    2009-02-28 01:58:30

    虽然自学了QTP一段时间,自己也跟着tutorial做了一遍,但我觉得自己才刚刚入门。

    好老师能帮助我们学习效率提高很多,碰到差老师,就只能自认倒霉了。

    其实,测试也是挺好玩的一件事情,在于你去发觉。在李老师的教导下感觉自己真的进步了很多,那些东西是多年总结出来的,而不是书上随随便便就能看到的,这是一笔宝贵的财富。另外我发现,提前学习是个好的学习方式,现在我比起同班同学感觉自己学得跟踏实。

    下周结束QTP,下下周上点开发的课,然后要上winrunner了,我也该抓紧了。

    最近上课都上糊涂了,一直以为今天是星期4,后来老妈问我,我一看电脑,今天是星期5,天啊,好不容易的周五不能早睡了,于是熬到现在,无所事事,但就是毫无睡意。

  • 专攻QTP了

    2009-02-08 14:07:08

    毕业设计算是基本完成了。感觉还不错,应该可以交差的。。哈哈

    现在刚开始看Qtp,好迷茫啊,看了一阵子说明书,几个重点还是基本理清了。下的8.2版的,有个视频是9.0的,另外装8.2还让我把IE7给卸了,汗。现在在下9.2了。(这段在说些什么。。)

    先跟着教材摸着说明书学学吧,等基本操作原理都会了再用那个flight自己试试,感觉先这么做做,然后9.2估计也装好了,再装上,跟着视频学学,接着,培训课也开始了,大概就先这么计划着吧,完毕!

  • nostagia

    2009-01-25 01:28:38

    用了寒假到大年初这段时间一直在做一个项目,其实就是本人的课程设计啦~

    题目是 软件缺陷管理系统 我是用。net2.0 做的,基于B-S结构,感觉还行,现在已经能实现基本功能了,成员管理用的是membership类,自己也建了一系列的表用于缺陷管理控制,目前有个还算严重的bug,伤脑筋,但愿在老师那能得到解决办法,但本人对指导老师很没信心的说,试了很久,实在是没办法解决啦! 

    先忙到这儿吧,快过年心也散了,今天就看了一天的动画片,大过年的,还是休息休息的好,过一阵子,也许就会想到办法跨越这道瓶颈。

    明天三十,心有万千思绪,不是喜庆,而是略感伤怀,嗯。愿众生安好。

  • 2009了

    2009-01-02 00:51:59

    今年,注定会发生很多。

    我将走上工作的岗位,面临很多的挑战,但,也很期待,2009,我要加油。

  • 写需求

    2008-12-19 13:00:52

    今天老师让我们学着写需求和计划。

    今天把大概的需求写了下,看起来容易的东西,其实做起来还是比较麻烦的,我想难点在于对粒度的把握上吧~

    太细,会增大自己的工作量;太粗,则会给将来的设计带来隐患。
    或许有人会说,工作量,是想偷懒吧~
    其实,我的理解是,如果把单位的工作量提高,同样会影响到团队效率,耽误计划的正常实施,当然详细的需求是必要的,这就是把握粒度的难度所在吧。

    还有就是功能覆盖的问题,把握粒度的前提,我们必须先把握全局了,没有完全覆盖的需求是没有意义的。

    明天考六级,后天自己再做做,把需求和计划给写了。

  • 整理一下

    2008-12-12 14:40:28

    上课算算也将近一个星期了,现在终于讲到边界值,因果图法了,感觉还不错,李老师自己编的书很好,该讲的都讲了,不该讲的没一句废话,有人指路还是比自己摸索要好多了,今天发了个小程序,老师要我们用等价类、边界值和因果图法写测试用例。

    感觉时间好紧哦,20号要考6级(紧急又重要的事情,优先级高),毕业设计老师催着申报表(紧急但不重要的事情,优先级低),这边测试的学习也要跟上(不紧急但很重要的事情,优先级中)

    现在最大的任务就是6级了,但没太大信心,最近乱七八糟的事情太多了,包括现在用的这台电脑,自从上次很多exe被感染后,总是出些小问题,昨天重装系统,主要是为了,把vs2005和sql2005装好做毕设。那D版碟质量又不好,好几个文件忽略了,有的还干脆没装,也不知道用不用得,

    慢慢来吧,over。

  • 正式上课

    2008-12-09 14:47:01

    今天发书了,四本。

    分四本:《软件测试基本理论》
           《软件测试实践》
           《软件测试工具运用》
           《软件测试的高端领域-白盒测试》

    今天讲的都是概念,大概这段时间讲的都比较简单吧,我可以好好复习英语和数据库。

  • 开学典礼

    2008-12-08 14:20:11

    今天去软测中心了,第一天的课,算开学典礼吧那边还没结束,这里已经开学了。。。

    今天的重大事情是确定毕业设计题目,额,真是有点麻烦啦。我选了个“开发一个软件测试缺陷管理的工具(基于B/S结构)”听说很难额,但也硬着头皮上了,管他的,还有5个月,慢慢弄,慢慢学。至少这跟我所学的专业相关,而且,绝对有助于我学习软测。

    明天交钱拿书。

    然后还有六级。

    还是很迷茫,要是没做出来,会不会毕不了业啊?压力了。。。。。。汗

  • 改变思想的每一点

    2008-12-04 22:21:10

    思想影响行为
    行为影响习惯
    习惯影响性格

    性格决定命运!

    考试明天考完,下个星期开始实训了,打起精神!

    只有六级和毕业设计两大任务了。

  • 软件质量保证

    2008-11-30 00:00:40

    1

    软件:计算机程序、规程、文档、运行所需数据。
    对应软件错误:代码错、过程错、文档错、数据错。

    质量的概念
    对目的的满意程度。(于用户)
    产品的内在特征。(于产品本身)
    对规范的符合程度。(于制造)
    依赖于客户愿意付多少钱购买。(基于价值)
    不能明确定义但可以识别的。(先验论)这个哲学了额~~

    追求质量的目的:
    开发正确的产品。-与产品有关的声明
    正确地开发产品。-与开发过程有关的声明

    软件质量定义:
    软件与明确地和隐含地定义的需求相一致的程度。(明显是基于制造嘛~)
    具体说,软件质量是软件符合明确地叙述的功能和性能需求、文档中明确描述的开发标准以及所有专业开发的软件都应该具有的隐含特征的程度。(真拗口,还是前面的定义清晰)

    软件质量保证的主要任务:
    为了提高软件的质量和软件的生产率。

     

    2

    软件质量保证标准分为:
    1.质量管理标准
    2.项目过程标准
    (对比和区别:关注单位、关注重点、关注目的、标准的目标)

    SPC提供了各种改善模型和方法的课程,包括软件CMM和CMMI、度量、和软件工程技术、集成化系统和软件过程开发。

    MIL-STD-498的关键词:软件和项目
    CMM的关键词:过程和组织

     

    3

    质量的成本:错误预防、评估(产品与过程)、与失效相关的活动。
    软件质量控制主要就是发现和消除软件产品的缺陷。(不就是软件测试的目的嘛~!)

    质量相关活动和过程应用的结果实际上就是软件质量分析成本的输出。对输出有影响的部分是:
    1.信息。2.产品。3.相关服务。(这个我也没看懂,大致理解为影响质量成本的因素。)

     

    4

    审查阶段:计划、复查、准备、审查会议、返工、后续跟踪。

    5

    软件配置管理提供了一个可视、跟踪和控制软件进展的方法。
    软件配置管理,简称SCM(Soft Configuration Management),就是管理软件的变化,他应用于整个软件工程过程,通常有相应的工具、过程和方法学组成。

    CMM包括了过程成熟度的5个级别
    1.初始级
    2.可重复级(KPA:1.需求管理、2.软件项目的监督和计划、3.软件配置管理、4.软件子合同的管理、5.软件质量保证)
    3.已定义级
    4.已管理级
    5.优化级

    质量保证任务
    确定项目过程中所要完成的质量保证任务对其中每一个任务负责的组织层的团队。
    包括:
    1.评审文档。
    2.参与文档准备。
    3.监控项目进度。
    4.见证验收测试。
    5.验证代码评审记录。

    6

    经典的软件开发方法学
    1.Parnas方法
    2.SASD方法
    3.面向对象的软件开发方法(一个主要目标,是提高软件的可重用性。)

    软件开发模型是指在软件开发中过程、活动和任务所需要的结构框架。

    瀑布模型将软件生命周期划分为需求定义、需求分析、设计、编码、测试、运行维护六个阶段。

    螺旋模型
    优点:
    1.强调严格的全过程风险管理。
    2.强调各开发阶段的质量。
    3.提供机会检讨项目是否有价值继续下去。
    缺点:
    引入非常严格的风险识别,风险分析和风险控制,这对风险管理的技能水平提出了很高的要求。这需要人员、资金和时间投入。

    7

    软件质量度量:
    1.直接度量。即对不依赖于其他属性的简单属性的简单属性的测量。
    2.间接度量。即对涉及若干个其他属性的软件要素、准则或属性的度量。因为他们必须通过建立一定的度量方法或模型才能间接推断而获得。
    分类:
    过程度量、产品度量、项目度量。

    老师划的重点,打一便,加深印象,哈哈。要考试啦~~~

  • 谁不幸中了suchost的,能借鉴此文但愿有所帮助

    2008-11-29 02:00:31

    头都快抓破了,忙到现在才基本算弄好了。

    电脑中毒了,上次中毒恐怕要算到1年前了,那还是学校的Arp攻击。一直开影子系统的,想想也没关系,于是今天装某软件的时候想也没想就装了。可万万没想到,中毒了,代理木马的那种,感染了整个电脑的EXE文件,而且有个很“病毒”的名字:suchost.exe.

    影子系统还是起到了作用,可是面对各盘数以千计的感染exe,每触发一个就会引起在C:/windows/system32/drivers下产生suchost文件,注入病毒,并调用cmd将自身删除,然后在各根盘符产生autorun 和空名字执行文件。幸亏我保护好了c盘,以致注册表重启后没坏,找了N久的专杀,没有,还得得到一个信息,它是鼎鼎大名的熊猫的变种!!!一般遇到这种情况就直接格盘了。

    N次尝试后,发现还有救,由于我的c盘正常,病毒和“司令部”没有建立联系,于是先开好usb后台监控软件(自动删除产生的autorun)然后找到某感染执行程序执行一次,在发作的时候,结束其suchost进程,其附带进程也会随之消亡,然后删掉c盘上产生的文件。第二次启动执行文件,感染消除,执行文件正常。

    可是这又带来了随之而来的问题,上千个执行文件,每个运行一次吗?而且有些执行程序手动执行,可能会给程序带来致命的灾难。

    接着我突然想到个点子,说来也简单,就是手工在drivers下建个高权限的suchost.exe,这样就无法被取代了,没了司令,自然感染发作了也不会有什么伤害,况且第二次运行的时候感染就消失了。

    通过多次测试,确定可行。这也是没办法的办法了。

    建立文件后,开上影子,到目前为止运行正常,搞得我从昨天晚上做到今天凌晨了。。不过,不用格盘已是万幸。

     

     

    PS:今天在此博客上看到了评论,呵呵,谢谢你。我有两个博客,这个写工作和学习。另一个写生活和感情。

  • 软件项目管理 与YYYYYYY

    2008-11-26 21:31:56

    今天花一下午的时间把《软件项目管理》这本书粗略地看了一遍。

    记录下主要内容吧。

    软件项目需求管理、软件项目估算与进度管理、软件项目配置管理、软件项目风险管理、软件项目质量管理、软件项目资源管理、软件市场与软件产业。

    其实真不知道学校为什么要开这们课程,虽然说学了必有好处,但是这些知识真正用上,也要等到成为项目经理之后,与其教这些,还不如开一科软件测试的必修课,那对我们的用处会更大。

    星期六学校有场招聘会,去不去呢~去看看吧,但我现在还不想急着找就业,毕竟自己修炼还远远不够,我不会做自己没有信心完成的事情。

    今天听到很多关于经济危机的事情,人心惶惶的,大家生怕毕业后找不到工作,而盲目奔走。我想,还不如把自己的底子打好,不要病急乱投医的好。

261/212>
Open Toolbar