Microsoft Word - 10.性能诊断与SQL优化.doc

Size: px
Start display at page:

Download "Microsoft Word - 10.性能诊断与SQL优化.doc"

Transcription

1 第 9 章 性能诊断与 SQL 优化 对于一个数据库系统, 从应用的角度来说, 通常我们最期望有良好的性能, 稳定的运行 所以怎样维持一个数据库高性能稳定运行就变得非常重要, 对于大多数数据库维护人员来说, 直接面对的问题就是在问题出现时, 需要快速发现并迅速解决数据库性能等问题, 提高系统持续高效运行 本章我们将通过一些实际生产中遇到的案例进行剖析讲解, 希望大家能够从中领会到诊断性能问题的思路和方法, 并对具体问题, 特别是 SQL 问题进行常规处理 9.1 使用 AutoTrace 功能辅助 SQL 优化 Oracle SQL*Plus 提供一个 autotrace 的功能, 可以用于跟踪 SQL 的执行计划, 收集统计信 息, 经常被作为 SQL 的优化工具之一被广泛使用 Autotrace 功能的启用 在 Oracle10g 之前, 缺省的 autotrace 功能并未打开, 需要通过以下步骤手工启用该功能 : 1. 创建基础表这可以通过运行 $ORACLE_HOME\rdbms\admin\utlxplan 脚本完成, 该脚本用于创建 plan_talbe 表 : SQL> connect / as sysdba 已连接 表已创建 为了使多个用户可以共享同一个 plan_table, 可以为它创建一个同义词, 并授权给 Public: SQL> create public synonym plan_table for plan_table; 同义词已创建 SQL> grant all on plan_table to public ; 授权成功 2. 创建 plustrace 角色这需要运行 $ORACLE_HOME\sqlplus\admin\plustrce.sql 脚本 : SQL> SQL> drop role plustrace; drop role plustrace

2 书名书名书名书名书名书名书名书名书名书名书名书名书名书名 * ERROR 位于第 1 行 : ORA-01919: 角色 'PLUSTRACE' 不存在 SQL> create role plustrace; 角色已创建 SQL> grant select on v_$sesstat to plustrace; 授权成功 SQL> grant select on v_$statname to plustrace; 授权成功 SQL> grant select on v_$session to plustrace; 授权成功 SQL> grant plustrace to dba with admin option; 授权成功 SQL> set echo off 3. 一点增强 DBA 用户首先被授予了 plustrace 角色, 然后我们可以手工把 plustrace 授予 public, 这样所有用户都将拥有 plustrace 角色的权限, 所有数据库用户也就拥有了使用 autotrace 功能的权限 SQL> grant plustrace to public ; 授权成功 完成以上步骤我们就可以使用 AutoTrace 的功能了 Autotrace 有几个常用选项, 简单说明如下 : u SET AUTOTRACE OFF 不生成 AUTOTRACE 报告, 这是缺省模式 u SET AUTOTRACE ON EXPLAIN AUTOTRACE 只显示优化器执行路径报告 u SET AUTOTRACE ON STATISTICS -- 只显示执行统计信息 u SET AUTOTRACE ON 包含执行计划和统计信息 u SET AUTOTRACE TRACEONLY 同 set autotrace on, 但是不显示查询输出在 SQL*Plus 中,autotrace 的基本输出大致类似 : SQL> set autotrace on SQL> select * from v$version where rownum <2; BANNER Oracle9i Enterprise Edition Release Production Execution Plan SELECT STATEMENT Optimizer=CHOOSE 1 0 COUNT (STOPKEY) 2 1 FIXED TABLE (FULL) OF 'X$VERSION' 2

3 第 1 章 章名章名章名章名章名 Statistics recursive calls 0 db block gets 2 consistent gets 0 physical reads 0 redo size 433 bytes sent via SQL*Net to client 503 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 1 rows processed Oracle10g Autotrace 功能的增强 在 Oracle10g Release 2 中,Autotrace 的功能已经被极大加强和改变 让我们先来看一下什么地方发生了改变 : SQL> set autotrace on SQL> select * from v$version where rownum <2; BANNER Oracle Database 10g Enterprise Edition Release Prod Execution Plan Plan hash value: Id Operation Name Rows Bytes Cost (%CPU) Time SELECT STATEMENT (0) 00:00:01 * 1 COUNT STOPKEY * 2 FIXED TABLE FULL X$VERSION (0) 00:00: Predicate Information (identified by operation id): filter(rownum<2) 2 - filter("inst_id"=userenv('instance')) Statistics

4 书名书名书名书名书名书名书名书名书名书名书名书名书名书名 0 recursive calls 0 db block gets 0 consistent gets 0 physical reads 0 redo size 471 bytes sent via SQL*Net to client 400 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 1 rows processed 注意, 此时 autotrace 的输出被良好格式化, 并给出关于执行计划部分的简要注释 其实这里并没有带来新的技术, 从 Oracle9i 开始,Oracle 提供了一个新的工具 dbms_xplan 用以格式化和查看 SQL 的执行计划 其原理是通过对 plan_table 的查询和格式化提供更友好 的用户输出 dbms_xplan 的调用的语法类似 : select * from table(dbms_xplan.display(format=>'basic')) 具体用法可以参考 Oracle 官方文档 实际上从 Oracle9i 开始我们就经常使用如下方式调用 dbms_xplan: SQL> explain plan for select count(*) from dual; Explained. PLAN_TABLE_OUTPUT Id Operation Name Rows Bytes Cost SELECT STATEMENT 1 SORT AGGREGATE 2 TABLE ACCESS FULL DUAL Note: rule based optimization 10 rows selected. utlxplp.sql 脚本中正是调用了 dbms_xplan: SQL> get?/rdbms/admin/utlxplp; 40* select * from table(dbms_xplan.display()); 41 而在 Oracle10gR2 中,Oracle 帮我们简化了这个过程, 一个 autotrace 就完成了所有的输出, 这是易用性上的一个进步 在使用 Oracle 的过程中, 经常能够感受到 Oracle 针对用户需求或 4

5 第 1 章 章名章名章名章名章名 易用性的改进, 这也许是很多人喜爱 Oracle 的一个原因吧 如果足够细心大家可能还会注意到, 在 Oracle10g 中 PLAN_TABLE 不再需要创建,Oracle 缺省增加了一个字典表 PLAN_TABLE$, 然后基于 PLAN_TABLE$ 创建公用同义词供用户使用 使用 Autotrace 功能的另外一个好处就是, 可以很容易的发现各种视图的底层基础表, 这可以作为大家学习和研究 Oracle 的一个重要手段 : SQL> set autotrace trace explain SQL> select * from plan_table; Execution Plan Plan hash value: Id Operation Name Rows Bytes Cost (%CPU) Time SELECT STATEMENT (0) 00:00:01 1 TABLE ACCESS FULL PLAN_TABLE$ (0) 00:00: Note dynamic sampling used for this statement Autotrace 功能的内部操作 当使用 Autotrace 功能时, 在数据库内部,Oracle 实际上是启动了 2 个会话 (session) 连接, 一个 Session 用于执行查询等操作, 另外一个 Session 用于记录执行计划和输出最终结果等操作 让我们一起来进一步深入了解一下 Autotrace 功能 在启用 Autotrace 之前, 注意当前只有一个用户 SESSION 连接 : SQL> select sid,serial#,username from v$session where username is not null; SID SERIAL# USERNAME SYS 在启用 autotrace 功能后, 此时, 另外一个 SESSION 被创建 : SQL> set autotrace on SQL> select sid,serial#,username from v$session where username is not null; SID SERIAL# USERNAME SYS 9 14 SYS Execution Plan 5

6 书名书名书名书名书名书名书名书名书名书名书名书名书名书名 SELECT STATEMENT Optimizer=CHOOSE 1 0 FIXED TABLE (FULL) OF 'X$KSUSE' Statistics recursive calls 0 db block gets 0 consistent gets 0 physical reads 0 redo size 而且注意, 这两个 SESSION 都是由一个进程 (Process) 衍生创建的 : SQL> select a.sid,a.serial#,a.username,b.pid,b.spid from v$session a,v$process b 2 where a.paddr = b.addr and a.username is not null; SID SERIAL# USERNAME PID SPID SYS SYS Execution Plan SELECT STATEMENT Optimizer=CHOOSE 1 0 MERGE JOIN 2 1 FIXED TABLE (FULL) OF 'X$KSUPR' 3 1 SORT (JOIN) 4 3 FIXED TABLE (FULL) OF 'X$KSUSE' 而此处的 V$PROCESS.SPID 正是操作系统的进程号 : SQL>! ps -ef grep grep -v grep oracle :03? 00:00:00 oracleeygle (DESCRIPTION=(LOCAL=YES) (ADDRESS= (PROTOCOL=beq))) 这就是通常所说的, 一个进程在数据库中可能对应多个 SESSION 通过在全局启用 事件 ( 具体使用方法可以参考本章后面章节 ), 可以得到 Autotrace 的内部操作 设置 事件可以采用如下命令 ( 在 spfile 中设置, 需要重新启动数据库后方能生效, 注意应当仅在测 试环境才可在全局启用 ): alter system set event='10046 trace name context forever,level 12' scope=spfile; 通过 tkprof 格式化跟踪文件 : [oracle@jumper udump]$ tkprof eygle_ora_28653.trc auto.log aggregate=no TKPROF: Release Production on Fri May 12 11:17: Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. 6 [oracle@jumper udump]$ ll

7 第 1 章 章名章名章名章名章名 total 168 -rw-r--r-- 1 oracle dba May 12 11:17 auto.log -rw-r oracle dba May 12 11:04 eygle_ora_28653.trc 检查跟踪文件或格式化后的日志, 我们可以发现以上两个 SESSION( 在日志中显示位 8.5 和 9.14) 的内部操作 : *** SESSION ID:(8.5) :03: *** SESSION ID:(9.14) :04: 主要的步骤有 : 1. 执行计划的输出通过以下 SQL 完成信息记录 : insert into plan_table (statement_id, timestamp, operation, options, object_node, object_owner, object_name, object_instance, object_type, search_columns, id, parent_id, position, other,optimizer, cost, cardinality, bytes, other_tag, partition_start, partition_stop, partition_id, distribution, cpu_cost, io_cost, temp_space, access_predicates, filter_predicates ) values (:1,SYSDATE,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18,:19, :20,:21,:22,:23,:24,:25,:26,:27) 通过以下 SQL 完成执行计划查询输出 : SELECT ID ID_PLUS_EXP,PARENT_ID PARENT_ID_PLUS_EXP,LPAD(' ',2*(LEVEL-1)) OPERATION DECODE(OTHER_TAG,NULL,'','*') DECODE(OPTIONS,NULL,'',' (' OPTIONS ')') DECODE(OBJECT_NAME,NULL,'',' OF ''' OBJECT_NAME '''') DECODE(OBJECT_TYPE,NULL,'',' (' OBJECT_TYPE ')') DECODE(ID,0, DECODE(OPTIMIZER,NULL,'',' Optimizer=' OPTIMIZER)) DECODE(COST,NULL,'',' (Cost=' COST DECODE(CARDINALITY,NULL,'',' Card=' CARDINALITY) DECODE(BYTES,NULL,'',' Bytes=' BYTES) ')') PLAN_PLUS_EXP,OBJECT_NODE OBJECT_NODE_PLUS_EXP FROM PLAN_TABLE START WITH ID=0 AND STATEMENT_ID=:1 CONNECT BY PRIOR ID=PARENT_ID AND STATEMENT_ID=:1 ORDER BY ID,POSITION 2. 统计信息输出主要通过以下 SQL 获取统计信息名称 编号等信息 : SELECT STATISTIC# S, NAME FROM SYS.V_$STATNAME WHERE NAME IN ('recursive calls','db block gets','consistent gets','physical reads','redo size','bytes sent via SQL*Net to client', 'bytes received via SQL*Net from client','sql*net roundtrips to/from client','sorts (memory)','sorts (disk)') ORDER BY S 7

8 书名书名书名书名书名书名书名书名书名书名书名书名书名书名通过以下查询获得输出值 : SELECT PT.VALUE FROM SYS.V_$SESSTAT PT WHERE PT.SID=:1 AND PT.STATISTIC# IN (7,40,41,42,115,236, 237,238,242,243) ORDER BY PT.STATISTIC# 了解了这些内部操作, 更有利于我们学习和理解 Oracle 的运行机制 本书中介绍的很多方法都可以辅助大家进行进一步的深入研究, 希望大家在阅读中更多注意一下方法 使用 Autotrace 功能辅助 SQL 优化 曾经遇到这样一个案例, 有朋友在论坛中提出帮助请求, 问以下这样一条 SQL 是否可以优化 : SELECT * FROM sys_user WHERE user_code = 'zhangyong' OR user_code IN (SELECT grp_code FROM sys_grp WHERE sys_grp.user_code = 'zhangyong') 首先可以通过 SQL*Plus 的 Autotrace 功能查看该 SQL 的执行计划 : Execution Plan SELECT STATEMENT Optimizer=RULE 1 0 FILTER 2 1 TABLE ACCESS (FULL) OF 'SYS_USER' 3 1 INDEX (UNIQUE SCAN) OF 'PK_SYS_GRP' (UNIQUE) Statistics recursive calls 4 db block gets consistent gets 0 physical reads 0 sorts (memory) 0 sorts (disk) 3 rows processed 注意到该 SQL 的逻辑读高达 30590, 优化该 SQL 在根本上需要降低逻辑读 而相关数据表的记录情况如下 : SQL> select count(distinct user_code) from sys_grp; COUNT(DISTINCTUSER_CODE) SQL> select count(distinct grp_code) from sys_grp; COUNT(DISTINCTGRP_CODE) 8

9 第 1 章 章名章名章名章名章名 SQL> select count(distinct user_code) from sys_user; COUNT(DISTINCTUSER_CODE) 通过执行计划可以知道, 该 SQL 通过全表扫描访问记录数为 的 SYS_USER 表, 通 过索引唯一键扫描访问 PK_SYS_GRP, 两者过滤 (FILTER) 返回结果集, 全表扫描及 FILTER 操作导致了大量的逻辑读 可以尝试通过 OR 展开 索引访问避免全表扫描和 FILTER 操作, 改写后的 SQL 如下所 示 : SELECT * FROM sys_user WHERE user_code = 'zhangyong' UNION ALL SELECT * FROM sys_user WHERE user_code <> 'zhangyong' AND user_code IN (SELECT grp_code FROM sys_grp WHERE sys_grp.user_code = 'zhangyong') 通过 UNION ALL 将 SQL 展开, 从而避免了 FILTER 操作, 表联合部分通过 NESTED LOOPS 实现 改写后的 SQL 执行计划如下所示 : Statistics recursive calls 0 db block gets 130 consistent gets 0 physical reads 1 sorts (memory) 0 sorts (disk) 3 rows processed Execution Plan SELECT STATEMENT Optimizer=RULE 1 0 UNION-ALL 2 1 TABLE ACCESS (BY INDEX ROWID) OF 'SYS_USER' 3 2 INDEX (UNIQUE SCAN) OF 'PK_SYS_USER' (UNIQUE) 4 1 NESTED LOOPS 5 4 VIEW OF 'VW_NSO_1' 6 5 SORT (UNIQUE) 7 6 TABLE ACCESS (BY INDEX ROWID) OF 'SYS_GRP' 8 7 INDEX (RANGE SCAN) OF 'FK_SYS_USER_CODE' (NON-UNIQUE) 9 4 TABLE ACCESS (BY INDEX ROWID) OF 'SYS_USER' 9

10 书名书名书名书名书名书名书名书名书名书名书名书名书名书名 10 9 INDEX (UNIQUE SCAN) OF 'PK_SYS_USER' (UNIQUE) 通过统计信息输出可以注意到,SQL 的逻辑读从原来的 降低到 130, 性能得到了极 大提高 同时改写后的 SQL 引入了一个排序, 排序来自于这一步 : 6 5 SORT (UNIQUE) 7 6 TABLE ACCESS (BY INDEX ROWID) OF 'SYS_GRP' 8 7 INDEX (RANGE SCAN) OF 'FK_SYS_USER_CODE' (NON-UNIQUE) 在 SYS_GRP 表中,user_code 是非唯一键值, 在 in 值判断里, 要做 sort unique 排序, 去 除重复值, 这里的 union all 是不需要排序的 9.2 获取 SQL 执行计划的方法 在进行 SQL 诊断和优化时, 通常都需要获取 SQL 的执行计划, 通过执行计划来判断 SQL 的执行是否合理, 那么如何来获取 SQL 的执行计划就显得非常重要了 上一节介绍的 AutoTrace 功能是获得 SQL 执行计划的方法之一, 在这一节, 继续讨论 SQL 执行计划获取方法及相关诊断应用 通过 V$SQL_PLAN 获得执行计划 从 Oracle9i 开始,Oracle 开始通过 V$SQL_PLAN 等视图进行 SQL 执行计划的记录, 通过这个视图, 可以获取正在执行中或者仍然缓存着的 SQL 执行计划, 从而可以帮助我们进行实时准确的数据库诊断 在 Oracle9i 中, 可以通过自定义编写的一些脚本来获取 SQL 的执行计划, 如通过 HASH_VALUE( 可以通过 V$SESSION 或者 V$SQL V$SQL_PLAN 视图获得 SQL 的 HASH_VALUE) 输入来获取 SQL 及其执行计划 : oracle@/opt/oracle/tools$./getplan_by_hashvalue.sh SQL_TEXT select count(uspl.numusplguid) from hy_usersubplan_log uspl,hy_serviceplan sp,hy_serviceinfo s,hy_spinfo pvd,hy_platform pf where uspl.numsplanguid + 0 = sp.numplanguid and sp.numsvrguid = s.numsvrguid and s.numspguid + 0 = pvd.numspguid and pvd.numptguid+ 0 = pf.numptguid and pf.vc2platformid = :1 and pvd.vc2spcode = :2 and s.vc2service_id = :3 and s.vc2ispack = :4 and uspl.vc2enabledflag = 'Y' and uspl.datstart <= sysdate and nvl(uspl.datend, sysdate + 1) >= sysdate and uspl.vc2userid = :5 HASH_VALUE EXECUTIONS PER_GETS MODULE JDBC Thin Client Operation PHV/Object Name Rows Bytes Cost

11 第 1 章 章名章名章名章名章名 SELECT STATEMENT SORT AGGREGATE NESTED LOOPS NESTED LOOPS NESTED LOOPS NESTED LOOPS TABLE ACCESS BY INDEX ROWID HY_PLATFORM INDEX UNIQUE SCAN HYUIDX_PLATFORMID 97 1 TABLE ACCESS FULL HY_SERVICEINFO TABLE ACCESS BY INDEX ROWID HY_SPINFO INDEX UNIQUE SCAN HYPK_SPINFO 97 TABLE ACCESS BY INDEX ROWID HY_SERVICEPLAN INDEX RANGE SCAN HYUIDX_SERVICEPLAN 2 1 PARTITION LIST ALL TABLE ACCESS BY LOCAL INDEX R HY_USERSUBPLAN_LOG INDEX RANGE SCAN HYIDX_USPL_USERID 该脚本的编码内容如下 : oracle@/opt/oracle/tools$cat getplan_by_hashvalue.sh #!/bin/ksh $ORACLE_HOME/bin/sqlplus -s "/ as sysdba"<<eof set lines 121 set pages 999 col sql_text format a80 col module format a36 col per_gets format select sql_text from v\$sqltext_with_newlines where hash_value=$1 order by piece; select hash_value,executions,buffer_gets/decode(executions,0,1,executions) as per_gets,a.module from v\$sqlarea a where a.hash_value=$1; set heading off select ' ' from dual union all select ' Operation PHV/Object Name Rows Bytes Cost ' as "Optimizer Plan:" from dual union all select ' ' from dual 11

12 书名书名书名书名书名书名书名书名书名书名书名书名书名书名 union all select * from (select rpad(' ' substr(lpad(' ',1*(depth-1)) operation decode(options, null,'',' ' options), 1, 32), 33, ' ') ' ' rpad(decode(id, 0, '----- ' to_char(hash_value) ' -----', substr(decode(substr(object_name, 1, 7), 'SYS_LE_', null, object_name) ' ',1, 20)), 21, ' ') ' ' lpad(decode(cardinality,null,' ', decode(sign(cardinality-1000), -1, cardinality ' ', decode(sign(cardinality ), -1, trunc(cardinality/1000) 'K', decode(sign(cardinality ), -1, trunc(cardinality/ ) 'M', trunc(cardinality/ ) 'G')))), 7, ' ') ' ' lpad(decode(bytes,null,' ', decode(sign(bytes-1024), -1, bytes ' ', decode(sign(bytes ), -1, trunc(bytes/1024) 'K', decode(sign(bytes ), -1, trunc(bytes/ ) 'M', trunc(bytes/ ) 'G')))), 6, ' ') ' ' lpad(decode(cost,null,' ', decode(sign(cost ), -1, cost ' ', decode(sign(cost ), -1, trunc(cost/ ) 'M', trunc(cost/ ) 'G'))), 8, ' ') ' ' as "Explain plan" from v\$sql_plan where hash_value = $1 and child_number = (select max(child_number) from v\$sql_plan where hash_value = $1)) union all select ' ' from dual; exit EOF 以下介绍一个实际的诊断案例供参考 曾经遇到过这样一次性能问题, 开发人员编写的一个存储过程, 其中包含了一系列的事务处理, 大约有 10 个左右的 DML 事务执行, 每一个 SQL 在 SQL*Plus 中执行都很迅速, 但是一旦放在过程中执行, 通过参数传入一个 sysdate, 整个过程的执行就变得非常缓慢, 无法成功完成 数据库环境为 Oralce9iR2: SQL> select * from v$version where rownum <2; BANNER Oracle9i Enterprise Edition Release bit Production 收到这个问题首先需要确定哪个 SQL 是真正引起性能问题的罪魁祸首 首先对 Procedure 12

13 第 1 章 章名章名章名章名章名 进行一点修改, 在每个 DML 事务执行之前在一张临时创建的测试表中插入一个时间, 前后两个时间相减可以得到每个 SQL 独立执行的时间 通过这个办法, 发现在执行到第 8 个 SQL 时, 响应失去 也就是说, 这个 SQL 是导致性能缓慢的根本原因 找到这个 SQL 接下来的事情就变得简单一些, 修改这个过程, 在 Procedure 之前增加一个跟踪 : create or replace procedure cmop_servdetail_d_eygle (m_datstat date) Authid Current_User is begin execute immediate 'alter session set sql_trace=true'; 那么当再次执行这个过程时,SQL 的执过程被记录到一个 Trace 文件中, 但是注意, 由于 SQL 可能暂时无法完成, 所以执行计划等信息并不会输出, 但是由于 SQL 的 HASH 过程首先完成, 在 Trace 文件的输出中, 首先打印出了 SQL 的 HASH VALUE 值, 这里是 :hv= APPNAME mod='sql*plus' mh= act='' ah= ===================== PARSING IN CURSOR #2 len=32 dep=1 uid=28 oct=42 lid=28 tim= hv= ad='20e289d8' alter session set sql_trace=true END OF STMT EXEC #2:c=0,e=7735,p=0,cr=0,cu=0,mis=0,r=0,dep=1,og=4,tim= ===================== PARSING IN CURSOR #2 len=4721 dep=1 uid=28 oct=2 lid=28 tim= hv= ad='1270b8c0' INSERT into cmo_servdetail_d (vc2dayguid, and a.vc2bt = c.vc2cmbt and a.vc2cid = c.vc2cmcid and c.numsvrguid = b.numsvrguid group by b.numsvrguid, b.vc2service_id, substr(a.vc2mid, 0, 4), a.vc2ua, c.vc2urltype END OF STMT 得到这个 HASH VALUE 值之后就可以通过 v$sql_plan 来获得这个 SQL 的执行计划, 另外一个需要说明的是, 我在诊断某个 SQL 问题时通常习惯将这个 SQL 创建到一张临时表中, 以避免可能对 v$sql_plan 的反复查询带来的消耗 对于这个案例我只需要发出如下语句 : create table t as select * from v$sql_plan where hash_value=

14 书名书名书名书名书名书名书名书名书名书名书名书名书名书名 通过查询可以获得这条问题 SQL 的执行计划 : Operation PHV/Object Name Rows Bytes Cost INSERT STATEMENT SORT GROUP BY FILTER HASH JOIN TABLE ACCESS BY LOCAL INDEX R CM_URLLOG_JUMP NESTED LOOPS TABLE ACCESS FULL HY_SVR_REF_URL_CMCID PARTITION RANGE ITERATOR BITMAP CONVERSION TO ROWID BITMAP AND BITMAP CONVERSION FROM R SORT ORDER BY INDEX RANGE SCAN CMIDX_URLLOG_JUMP_DA 6 1 BITMAP CONVERSION FROM R INDEX RANGE SCAN CMIDX_URLLOG_JUMP_CI 6 19 TABLE ACCESS FULL HYO_SERVICEPLAN 10K 694K 这就是这个 SQL 的执行计划, 来对比一下 SQL*Plus 中执行这条 SQL 的执行计划 : Execution Plan INSERT STATEMENT Optimizer=CHOOSE (Cost=35 Card=12 Bytes=3192) 1 0 SORT (GROUP BY) (Cost=35 Card=12 Bytes=3192) 2 1 FILTER 3 2 HASH JOIN (Cost=26 Card=12 Bytes=3192) 4 3 HASH JOIN (Cost=11 Card=1 Bytes=201) 5 4 TABLE ACCESS (FULL) OF 'HY_SVR_REF_URL_CMCID' (Cost=3 Card=11 Bytes=814) 6 4 PARTITION RANGE (ITERATOR) 7 6 TABLE ACCESS (BY LOCAL INDEX ROWID) OF 'CM_URLLOG_JUMP' (Cost=6 Card= Bytes= ) 8 7 INDEX (RANGE SCAN) OF 'CMIDX_URLLOG_JUMP_DAT'(NON-UNIQUE) (Cost=2 Card=229897) 9 3 TABLE ACCESS (FULL) OF 'HYO_SERVICEPLAN' (Cost=14 Card=10946 Bytes=711490) 注意到这两个执行计划完全不同, 速度快的执行计划对于 PARTITION RANGE 访问是通 过一个索引来完成的 ; 而对于速度慢的执行计划, 这里却使用了 2 个索引进行位图转换 : PARTITION RANGE ITERATOR 14

15 第 1 章 章名章名章名章名章名 BITMAP CONVERSION TO ROWIDS BITMAP AND BITMAP CONVERSION FROM ROWIDS SORT ORDER BY INDEX RANGE SCAN CMIDX_URLLOG_JUMP_DAT BITMAP CONVERSION FROM ROWIDS INDEX RANGE SCAN CMIDX_URLLOG_JUMP_CID 正是这个转换使得性能大为缩减 显然这个错误的选择是由于 CMIDX_URLLOG_JUMP_CID 索引的存在, 再加上绑定变量 的影响,CBO 最终选择了错误的执行计划, 为了快速的解决问题, 在确认之后, 我们直接 Drop 掉了这个索引 此时再次运行过程, 发现很快完成, 此时的执行计划通过同样的方法可以获得 : Operation PHV/Object Name Rows Bytes Cost INSERT STATEMENT SORT GROUP BY 12 3K 35 FILTER HASH JOIN 12 3K 26 HASH JOIN TABLE ACCESS FULL HY_SVR_REF_URL_CMCID PARTITION RANGE ITERATOR TABLE ACCESS BY LOCAL INDEX CM_URLLOG_JUMP 128K 15M 6 INDEX RANGE SCAN CMIDX_URLLOG_JUMP_DA 230K 2 TABLE ACCESS FULL HYO_SERVICEPLAN 10K 694K 现在的执行计划恢复了正常 注意到错误的执行计划选择了 bitmap convert 的执行计划, 而两个索引都是 B*Tree 索引 这种转换是 Oracle9i 引入的, 同时一个隐含参数被用来控制这 种转换 : SQL> SELECT x.ksppinm NAME, y.ksppstvl VALUE, x.ksppdesc describ 2 FROM SYS.x$ksppi x, SYS.x$ksppcv y 3 WHERE x.inst_id = USERENV ('Instance') 4 AND y.inst_id = USERENV ('Instance') 5 AND x.indx = y.indx 6 AND x.ksppinm LIKE '%&par%' 7 / Enter value for par: _b_tree_bitmap_plans 15

16 书名书名书名书名书名书名书名书名书名书名书名书名书名书名 old 6: AND x.ksppinm LIKE '%&par%' new 6: AND x.ksppinm LIKE '%_b_tree_bitmap_plans%' NAME VALUE DESCRIB _b_tree_bitmap_plans TRUE enable the use of bitmap plans for tables w. only B-tree indexes 如果这种性能衰减的转换经常发生, 可以将这个隐含参数设置为 FALSE EXPLAIN PLAN FOR 与 DBMS_XPLAN 在前面已经简单提到过,Explain Plan For 和 DBMS_XPLAN 包结合可以用于获取 SQL 的执行计划 本节我们将对这两者的结合使用进行进一步的介绍 EXPLAIN PLAN 命令可以在后台对 SQL 进行解析, 并将 SQL 执行计划加载到执行计划表中 ( 默认名称为 PLAN_TABLE), 这是 EXPLAIN PLAN 的作用, 其通常的使用方法是在 SQL*PLUS 中输入类似如下命令 : Explain plan <set statement_id = text > <into your plan table>for statement 其中通过 set statement_id = text 可以为 SQL 进行名称标记, into your plan table 默认的是 plan_table 表, 通常使用格式如下 : EXPLAIN PLAN FOR SELECT * FROM emp WHERE empno=7788; 执行计划生成之后, 剩下的就是展现问题,DBMS_XPLAN 包就是用来实现这一功能的, 该 PACKAGE 自 Oracle9iR2 引入, 初始的只具有一个函数 : SQL> desc dbms_xplan FUNCTION DISPLAY RETURNS DBMS_XPLAN_TYPE_TABLE Argument Name Type In/Out Default? TABLE_NAME VARCHAR2 IN DEFAULT STATEMENT_ID VARCHAR2 IN DEFAULT FORMAT VARCHAR2 IN DEFAULT 而在 Oracle10g 中该 Package 的功能得到了极大的增强 DBMS_XPLAN.DISPLAY 可以被调用来返回执行计划, 调用过程类似如下 : SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY); 值得注意的是,DBMS_XPLAN 还能从存储 SGA 内的指针显示 实时 执行计划, 通过查看 V$SESSION 视图, 可以找到会话执行 SQL 的 SQL ID, 拥有了这个 SQL ID 之后可以通过 DBMS_XPLAN.DISPLAY_CURSOR 来获得 Cursor 所使用的执行计划 此外 DBMS_XPLAN.DISPLAY_AWR 函数还可用来查询 Oracle 10g 的自动工作负载库 (Automatic Workload Repository, AWR) 获得的历史 SQL 语句, 并显示它的执行计划 下面我们通过 Oracle10g 中的测试应用来展示一下这个 Package 对于 SQL 执行计划的获取与展现 首先通过 EXPLAIN PLAN 来生成执行计划 : 16

17 第 1 章 章名章名章名章名章名 SQL> EXPLAIN PLAN set statement_id = 'NO' FOR 2 SELECT * FROM emp WHERE empno=7788; Explained. 然后通过查询展现以上生成的执行计划 : SQL> SELECT plan_table_output 2 FROM TABLE( DBMS_XPLAN.DISPLAY('PLAN_TABLE','NO','ALL') ); PLAN_TABLE_OUTPUT Plan hash value: Id Operation Name Rows Bytes Cost (%CPU) Time SELECT STATEMENT (0) 00:00:01 1 TABLE ACCESS BY INDEX ROWID EMP (0) 00:00:01 * 2 INDEX UNIQUE SCAN PK_EMP 1 1 (0) 00:00: Query Block Name / Object Alias (identified by operation id): SEL$1 / EMP@SEL$1 2 - SEL$1 / EMP@SEL$1 Predicate Information (identified by operation id): access("empno"=7788) Column Projection Information (identified by operation id): "EMPNO"[NUMBER,22], "EMP"."ENAME"[VARCHAR2,10], "EMP"."JOB"[VARCHAR2,9], "EMP"."MGR"[NUMBER,22], "EMP"."HIREDATE"[DATE,7], "EMP"."SAL"[NUMBER,22], "EMP"."COMM"[NUMBER,22], "EMP"."DEPTNO"[NUMBER,22] 2 - "EMP".ROWID[ROWID,10], "EMPNO"[NUMBER,22] 28 rows selected. 以上功能可以用于显示已知 SQL 的执行计划, 但是很多时候我们需要直接从数据库中获得其他应用 SQL 的执行计划 从 Oracle9i 开始,V$SQL_PLAN_STATISTICS V$SQL_PLAN 视图被引入用于记录 SQL 的执行统计信息以及执行计划, 但是在 Oracle9i 中, 从以上视图获取执行计划通常需要自己手工编写脚本, 实现起来较为复杂, 在 Oracle10g 中新的增强被引入, DBMS_XPLAN.DISPLAY_CURSOR 可以很容易的帮助我们实现以上需求, 执行该功能需要对 V$SESSION V$SQL V$SQL_PLAN V$SQL_PLAN_STATISTICS_ALL 就有访问权限 此时使用 scott 用户进行, 需要首先对 SCOTT 用户授权 : grant select on v_$session to scott; grant select on v_$sql_plan to scott; 17

18 书名书名书名书名书名书名书名书名书名书名书名书名书名书名 grant select on v_$sql to scott; DISPLAY_CURSOR 的参数需要如下 : FUNCTION DISPLAY_CURSOR RETURNS DBMS_XPLAN_TYPE_TABLE Argument Name Type In/Out Default? SQL_ID VARCHAR2 IN DEFAULT CURSOR_CHILD_NO NUMBER(38) IN DEFAULT FORMAT VARCHAR2 IN DEFAULT 现在看看 DISPLAY_CURSOR 的输出 : SQL> SELECT plan_table_output 2 FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR); PLAN_TABLE_OUTPUT SQL_ID 1m225m1612xvg, child number SELECT d.dname, SUM(e.sal) AS sum_sal FROM dept d,emp e WHERE d.deptno = e.deptno GROUP BY d.dname Plan hash value: Id Operation Name Rows Bytes Cost (%CPU) Time SELECT STATEMENT 8 (100) 1 HASH GROUP BY (25) 00:00:01 * 2 HASH JOIN (15) 00:00:01 3 TABLE ACCESS FULL DEPT (0) 00:00:01 4 TABLE ACCESS FULL EMP (0) 00:00: Predicate Information (identified by operation id): access("d"."deptno"="e"."deptno") Note dynamic sampling used for this statement 在 Oracle10g 中, 可以通过 V$SESSION 或 V$SQL 等视图来获取不同会话的 SQL_ID 以 及 SQL_CHILD_NUMBER 来获得其 SQL 执行计划 : SQL> select sid,username,sql_id,sql_child_number 2 from v$session where sql_id is not null; SID USERNAME SQL_ID SQL_CHILD_NUMBER

19 第 1 章 章名章名章名章名章名 360 SMSNP bgg2p17bx7y1v SYS 6zn53xvm7zth SMSNP 1ug8zqhw906tb SMSNP fx3kcsrcm7hcb SMSNP 4t47xyz571hrh SMSNP 1ug8zqhw906tb SYS 65vuzhm491wk SMSNP 1bkv8cyq1c9f gd6b1r53yt88 0 注意, 某些 SQL 的执行计划可能老化无法获取, 以下是通过 v$session 信息获得的一个 SQL 执行计划 : SQL> SELECT plan_table_output 2 FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('bgg2p17bx7y1v',2,'ALL')); PLAN_TABLE_OUTPUT SQL_ID bgg2p17bx7y1v, child number SELECT COUNT(*) FROM "NP_IO_MT" "A1" WHERE "A1"."MSGDATE">SYSDATE@! AND "A1"."HYSERVICECODE"='QWOZQX' AND EXISTS (SELECT 0 FROM "NP_IO_MO" "A2" WHERE "A2"."PHONE"="A1"."PHONE" AND "A2"."MSGDATE">SYSDATE@! AND "A2"."HYSERVICECODE"='HZXDBM') Plan hash value: Id Operation Name Rows Bytes Cost (%CPU) Time Pstart Pstop SELECT STATEMENT 9 (100) 1 SORT AGGREGATE NESTED LOOPS SEMI (0) 00:00:01 3 PARTITION RANGE ITERATOR (0) 00:00:01 KEY 19 * 4 TABLE ACCESS BY LOCAL INDEX ROWID NP_IO_MT (0) 00:00:01 KEY 19 * 5 INDEX RANGE SCAN IND_IO_MT_MSGDATE 6 3 (0) 00:00:01 KEY 19 6 PARTITION RANGE ITERATOR (0) 00:00:01 KEY 19 * 7 TABLE ACCESS BY LOCAL INDEX ROWID NP_IO_MO (0) 00:00:01 KEY 19 * 8 INDEX RANGE SCAN IND_IO_MO_MSGDATE 9 2 (0) 00:00:01 KEY Query Block Name / Object Alias (identified by operation id):

20 书名书名书名书名书名书名书名书名书名书名书名书名书名书名 1 - SEL$5DA710D3 4 - SEL$5DA710D3 / A1@SEL$1 5 - SEL$5DA710D3 / A1@SEL$1 7 - SEL$5DA710D3 / A2@SEL$2 8 - SEL$5DA710D3 / A2@SEL$2 Predicate Information (identified by operation id): filter("a1"."hyservicecode"='qwozqx') 5 - access("a1"."msgdate">sysdate@! ) 7 - filter(("a2"."hyservicecode"='hzxdbm' AND "A2"."PHONE"="A1"."PHONE")) 8 - access("a2"."msgdate">sysdate@! ) Column Projection Information (identified by operation id): (#keys=0) COUNT(*)[22] 3 - "A1"."PHONE"[VARCHAR2,40] 4 - "A1"."PHONE"[VARCHAR2,40] 5 - "A1".ROWID[ROWID,10] 8 - "A2".ROWID[ROWID,10] 通过 AWR 获取 SQL 执行计划 前面介绍的 DBMS_XPLAN 包还有另外一个功能, 通过 dbms_xplan.display_awr 函数来获 取 AWR 中的 SQL 执行计划 这个函数的主要参数需要是 SQL_ID: FUNCTION DISPLAY_AWR RETURNS DBMS_XPLAN_TYPE_TABLE 参数名称 类型 输入 / 输出默认值? SQL_ID VARCHAR2 IN PLAN_HASH_VALUE NUMBER(38) IN DEFAULT DB_ID NUMBER(38) IN DEFAULT FORMAT VARCHAR2 IN DEFAULT 通过 AWR 生成的报告关于 SQL 部分都会包含 SQL_ID 一项内容, 通过这个 SQL_ID 就 可以查询 AWR 中的 SQL 执行计划, 以下是 Oracle10g AWR 报告的一个输出片段 : Elapsed CPU Elap per % Total Time (s) Time (s) Executions Exec (s) DB Time SQL Id , dbqwa8xts1g3 insert into HY_SIMULATESRC (DATTIMESTAMP, VC2SRCDESC, VC2MOBILE, VC2IMSI, VC2MOB ILEIP, VC2MEMO, VC2PLANKEY, VC2SRCTYPE, VC2UA, VC2PROVID, NUMGUID) values (:1, : 2, :3, :4, :5, :6, :7, :8, :9, :10, :11) 20

21 第 1 章 章名章名章名章名章名 获得 SQL 的 SQL_ID, 就可以通过 DBMS_XPLAN 来输出执行计划, 以下输出的 SQL 具有多个子指针, 执行计划各不相同, 在使用绑定变量的情况下,Oracle 数据库也会通过绑定变量 Peeking 来获得更为准确的执行 : SQL> select * from table(dbms_xplan.display_awr('072t81cu41xfj')); PLAN_TABLE_OUTPUT SQL_ID 072t81cu41xfj SELECT DECODE(COUNT(*), 0, 1, 0) FROM MGMT_SEVERITY WHERE TARGET_GUID = :B3 AND METRIC_GUID = :B2 AND KEY_VALUE = :B1 Plan hash value: Id Operation Name Rows Bytes Cost (%CPU) Time SELECT STATEMENT 1 (100) 1 SORT AGGREGATE INDEX RANGE SCAN SEVERITY_PRIMARY_KEY (0) 00:00: SQL_ID 072t81cu41xfj SELECT DECODE(COUNT(*), 0, 1, 0) FROM MGMT_SEVERITY WHERE TARGET_GUID = :B3 AND METRIC_GUID = :B2 AND KEY_VALUE = :B1 Plan hash value: Id Operation Name Rows Bytes Cost (%CPU) Time SELECT STATEMENT 24 (100) 1 SORT AGGREGATE INDEX FAST FULL SCAN SEVERITY_PRIMARY_KEY (0) 00:00: 已选择 30 行 通过 dbms_xplan.display_awr 函数获取的 SQL 执行计划来自 dba_hist_sql_plan 视图, 通过历史数据记录, 甚至一些被老化的 SQL 执行计划仍然可以被查询到 21

22 书名书名书名书名书名书名书名书名书名书名书名书名书名书名 9.3 捕获问题 SQL 解决过度 CPU 消耗问题 在生产环境中, 我们可能会经常遇到 CPU 过度使用而影响系统性能或正常运行的问题 大多数情况下, 系统的性能问题都是由不良 SQL 代码引起的, 那么作为 DBA, 怎样发现和解 决这些 SQL 问题就显得尤为重要 本案例的系统环境为 : 操作系统 : Solaris8 数据库版本 : 断 问题描述 : 业务及开发人员报告系统运行缓慢, 已经影响业务系统正常使用 请求协助诊 使用 vmstat 检查系统当前情况 首先登陆数据库主机, 检查当前系统状况 使用 vmstat 检查, 发现 CPU 资源已经耗尽, 大量任务位于运行队列 : bash-2.03$ vmstat 3 procs memory page disk faults cpu r b w swap free re mf pi po fr de sr s6 s9 s1 sd in sy cs us sy id 对于 vmstat 的用法及输出, 简要说明一下 :vmstat 是 Unix 上一个常用的工具, 可以帮助 我们查看系统内存及 CPU 使用情况 Vmstat 最常用的两个参数是 t [n]: t n 表示采样间隔 表示采样次数 例如 :vmstat 5 5, 表示在 T(5) 秒时间内进行 N(5) 次采样 对于前三列 procs 输出, 分别代表以下含义 : 22

23 第 1 章 章名章名章名章名章名 r--> 指运行队列中的进程数, 如果这个参数经常超过 CPU 数量可能说明 CPU 存在瓶颈 b--> 因为 IO 被 Block 的进程数 w-->idle 的被 swap 的进程数 最后一项 CPU 标识系统 CPU 资源的分配和使用情况, 最后一列 Idle 值通常被用来衡量系统 CPU 的空闲情况 本案例当时, 系统 CPU 资源已经耗尽,Idle 为 0, 并且运行队列大量进程排队等待 使用 Top 工具辅助诊断 通过 Top 工具, 可以查看进程 CPU 耗用情况, 如果存在进程异常, 可以通过 Top 定位, 为进一步诊断提供依据 对于本案例, 观察进程 CPU 耗用, 发现没有明显过高 CPU 使用的进程 $ top last pid: 28313; load averages: 99.90, , :28: processes: 186 sleeping, 99 running, 2 zombie, 9 on cpu CPU states: 0.0% idle, 96.5% user, 3.5% kernel, 0.0% iowait, 0.0% swap Memory: 4096M real, 1404M free, 2185M swap in use, 5114M swap free PID USERNAME THR PRI NICE SIZE RES STATE TIME CPU COMMAND oracle8i M 1309M run 0: % oracle oracle8i M 1306M sleep 0: % oracle oracle8i M 1304M run 0: % oracle oracle8i M 1305M run 0: % oracle oracle8i M 1309M run 0: % oracle oracle8i M 1310M run 0: % oracle oracle8i M 1306M cpu/1 0: % oracle oracle8i M 1306M run 1: % oracle oracle8i M 1309M run 0: % oracle 从 Top 的输出中我们发现有大量进程处于 running 的运行状态,CPU 消耗很平均, 单进程 消耗大约在 1% 左右, 基本可以排除个别进程异常导致 CPU 问题的可能 ( 关于单进程异常 CPU 消耗问题可以参考第四章中的解决方法 ) 检查进程数量 对于一个生产数据库系统, 稳定运行的进程数量通常是可知的 23

24 书名书名书名书名书名书名书名书名书名书名书名书名书名书名提示 : 对于稳定运行的生产系统, 数据库的运行状况通常是稳定的, 如果你绘制出性能曲线, 你会发现每个星期的曲线几乎是可以重合的, 对数据库系统的运行状况及性能指标具有充分认识和了解是必须的 看一下当前系统的进程数量, 从而进行比较判断 : bash-2.03$ ps -ef grep ora wc -l 258 bash-2.03$ ps -ef grep ora wc -l 275 bash-2.03$ ps -ef grep ora wc -l 274 bash-2.03$ ps -ef grep ora wc -l 278 bash-2.03$ ps -ef grep ora wc -l 277 bash-2.03$ ps -ef grep ora wc -l 366 发现此时系统存在大量 Oracle 进程, 大约在 300 左右, 大量进程消耗了几乎所有 CPU 资源, 而正常情况下 Oracle 连接数应该在 100 左右 由此, 可以做出基本判断, 是数据库或应用出现问题, 导致进程任务无法完成, 不断累积, 从而出现大量队列等待 这些等待在数据库中应该有具体的体现, 接下来需要登陆数据库进行检查了 登陆数据库 我们判断数据库可能经历了等待, 那么 Oracle 数据库提供了相关视图供我们查询和发现 问题,v$session_wait 是首先值得我们关注的 查询 v$session_wait 获取各进程等待事件 : SQL> select sid,event,p1,p1text from v$session_wait; SID EVENT P1 P1TEXT latch free E+10 address 1 pmon timer 300 duration 2 rdbms ipc message 300 timeout 140 buffer busy waits 17 file# 66 buffer busy waits 17 file# 10 db file sequential read 17 file# 18 db file sequential read 17 file# 54 db file sequential read 17 file# 49 db file sequential read 17 file# 48 db file sequential read 17 file# 24

25 第 1 章 章名章名章名章名章名 46 db file sequential read 17 file# 45 db file sequential read 17 file# 234 db file sequential read 17 file# 233 db file sequential read 17 file# 230 db file sequential read 17 file# 333 db file sequential read 17 file# 330 db file scattered read 17 file# 310 db file scattered read 17 file# 244 rows selected. 对于本案例, 我们发现存在大量 db file scattered read 及 db file sequential read 等待 显然 全表扫描等操作成为系统最严重的性能影响因素 捕获相关 SQL 确定这些进程因为数据访问产生了等待, 我们考虑捕获这些 SQL 以发现问题 这里用到了我的以下脚本 getsqlbysid.sql, 该脚本通过已知 session 的 sid, 联合 v$session v$sqltext 视图, 获得相关 session 正在执行的完整的 SQL 语句 SELECT sql_text FROM v$sqltext a WHERE a.hash_value = (SELECT sql_hash_value FROM v$session b WHERE b.sid = '&sid') ORDER BY piece ASC / 使用该脚本, 通过从 v$session_wait 中获得的等待全表或索引扫描的进程 SID, 可以捕获可能存在问题的 sql 语句 : Enter value for sid: 18 old 5: where b.sid='&sid' new 5: where b.sid='18' SQL_TEXT select i.vc2title,i.numinfoguid from hs_info i where i.intenab ledflag = 1 and i.intpublishstate = 1 and i.datpublishdate <= sysdate and i.numcatalogguid = 2047 order by i.datpublishdate d 25

26 书名书名书名书名书名书名书名书名书名书名书名书名书名书名 esc, i.numorder desc 对几个进程进行跟踪, 分别得到以上 SQL 语句, 这些 SQL 可能就是问题产生的根源 ( 以上语句如果良好编码应该使用绑定变量, 但是目前这个不是我们关心的 ) 使用该应用用户连接, 通过 autotrace 功能检查以上 SQL 的执行计划 : SQL> set autotrace trace explain SQL> select i.vc2title,i.numinfoguid 2 from hs_info i where i.intenabledflag = 1 3 and i.intpublishstate = 1 and i.datpublishdate <=sysdate 4 and i.numcatalogguid = order by i.datpublishdate desc, i.numorder desc ; Execution Plan SELECT STATEMENT Optimizer=CHOOSE (Cost=228 Card=1 Bytes=106) 1 0 SORT (ORDER BY) (Cost=228 Card=1 Bytes=106) 2 1 TABLE ACCESS (FULL) OF 'HS_INFO' (Cost=218 Card=1 Bytes=106) SQL> select count(*) from hs_info; COUNT(*) 通过执行计划, 我们看到以上查询使用了全表扫描, 而该表这里有 22 万记录, 全表扫描已经不再适合 通常对于小表,Oracle 建议通过全表扫描进行数据访问, 对于大表则应该通过索引以加快数据查询, 当然如果查询要求返回表中大部分或者全部数据, 那么全表扫描可能仍然是最好的选择 从 V$SYSSTAT 视图中, 我们可以查询得到关于全表扫描的系统统计信息 : SQL> col name for a30 SQL> select name,value from v$sysstat 2 where name in ('table scans (short tables)','table scans (long tables)'); NAME VALUE table scans (short tables) 828 table scans (long tables) 101 其中 table scans (short tables) 指对于小表的全表扫描的此时 ;table scans (long tables) 指对于 大表的全表扫描的次数 从 Statspack 的报告中, 我们也可以找到这部分信息 : Instance Activity Stats for DB: CELLSTAR Instance: ora8i Snaps: 20 - Statistic Total per Second per Trans table scan blocks gotten 38,228,

27 第 1 章 章名章名章名章名章名 table scan rows gotten 546,452, table scans (direct read) 5, table scans (long tables) 5, table scans (rowid ranges) 5, table scans (short tables) 1,185, 通常, 如果一个数据库的 table scans (long tables) 过多, 那么 db file scattered read 等待事件 可能同样非常显著, 和以上数据来自同一个 report 的 Top5 等待事件就是如此 : Top 5 Wait Events ~~~~~~~~~~~~~~~~~ Wait % Total Event Waits Time (cs) Wt Time log file parallel write 1,436,993 1,102, log buffer space 16, , log file sync 1,413, , control file parallel write 329, , db file scattered read 425, , 数据库内部, 很多信息和现象都是紧密相关的, 只要我们加深对于数据库的了解, 在优 化和诊断数据库问题时就能够得心应手 Oracle 通过一个内部参数 _small_table_threshold 来定义大表和小表的界限 缺省的该参数 等于 2% 的 Buffer 数量, 如果表的大小小于该参数定义,Oracle 认为该表为小表, 否则 Oracle 认为该表为大表 我们看一下 Oracle9iR2 中的情况 : Enter value for par: small old 6: AND x.ksppinm LIKE '%&par%' new 6: AND x.ksppinm LIKE '%small%' NAME VALUE DESCRIB _small_table_threshold 200 threshold level of table size for direct reads 以上数据库中,200 正好约为 Buffer 数量的 2%: SQL> show parameter db_cache_size NAME TYPE VALUE db_cache_size big integer SQL> select ( /8192)*2/100 from dual; ( /8192)*2/ 所以要区分大小表 (Long/Short) 是因为全表扫描可能引起 Buffer Cache 的抖动, 缺省的 大表的全表扫描会被置于 LRU 的末端, 以期尽快老化, 减少 Buffer 的占用 从 Oracle8i 开始, 27

28 书名书名书名书名书名书名书名书名书名书名书名书名书名书名 Oracle 的多缓冲池管理技术 (Default/Keep/Recycle 池 ) 给了我们另外一个选择, 对于不同大小 不同使用频率的数据表, 从建表之初就可以指定其存储 Buffer, 以使得内存使用更加有效 让我们继续以上的案例, 在实际处理中, 我们检查全表扫描的数据表, 发现存在以下索引 : SQL> select index_name,index_type from user_indexes where table_name='hs_info'; INDEX_NAME INDEX_TYPE HSIDX_INFO1 FUNCTION-BASED NORMAL HSIDX_INFO_SEARCHKEY DOMAIN PK_HS_INFO NORMAL 检查索引键值 : SQL> select index_name,column_name 2 from user_ind_columns where table_name ='HS_INFO'; INDEX_NAME COLUMN_NAME HSIDX_INFO1 NUMORDER HSIDX_INFO1 SYS_NC00024$ HSIDX_INFO_SEARCHKEY VC2INDEXWORDS PK_HS_INFO NUMINFOGUID SQL> desc hs_info Name Null? Type NUMINFOGUID NOT NULL NUMBER(15) NUMCATALOGGUID NOT NULL NUMBER(15) INTTEXTTYPE NOT NULL NUMBER(38) VC2TITLE NOT NULL VARCHAR2(60) VC2AUTHOR VARCHAR2(100) NUMPREVINFOGUID NUMBER(15) NUMNEXTINFOGUID NUMBER(15) NUMORDER NOT NULL NUMBER(15) 创建新的索引以消除全表扫描 检查发现在 numcatalogguid 字段上并没有索引, 该字段具有很好的区分度, 考虑在该字段创建索引以消除全表扫描 SQL> create index hs_info_numcatalogguid on hs_info(numcatalogguid); Index created. 28

29 第 1 章 章名章名章名章名章名 SQL> set autotrace trace explain SQL> select i.vc2title,i.numinfoguid 2 from hs_info i where i.intenabledflag = 1 3 and i.intpublishstate = 1 and i.datpublishdate <=sysdate 4 and i.numcatalogguid = order by i.datpublishdate desc, i.numorder desc ; Execution Plan SELECT STATEMENT Optimizer=CHOOSE (Cost=12 Card=1 Bytes=106) 1 0 SORT (ORDER BY) (Cost=12 Card=1 Bytes=106) 2 1 TABLE ACCESS (BY INDEX ROWID) OF 'HS_INFO' (Cost=2 Card=1 Bytes=106) 3 2 INDEX (RANGE SCAN) OF 'HS_INFO_NUMCATALOGGUID' (NON-UNIQUE) (Cost=1 Card=1) 观察系统状况 原大量等待消失 SQL> select sid,event,p1,p1text from v$session_wait where event not like 'SQL%'; SID EVENT P1 P1TEXT pmon timer 300 duration 2 rdbms ipc message 300 timeout 3 rdbms ipc message 300 timeout 6 rdbms ipc message timeout 59 rdbms ipc message 6000 timeout 118 rdbms ipc message 6000 timeout 275 rdbms ipc message timeout 147 rdbms ipc message 6000 timeout 62 rdbms ipc message 6000 timeout 11 rdbms ipc message timeout 4 rdbms ipc message 300 timeout 305 db file sequential read 17 file# 356 db file sequential read 17 file# 19 db file scattered read 17 file# 5 smon timer 300 sleep time 15 rows selected. 29

30 书名书名书名书名书名书名书名书名书名书名书名书名书名书名 在另外的 session 里, 持续观察的 CPU 使用情况 : bash-2.03$ vmstat 3 procs memory page disk faults cpu r b w swap free re mf pi po fr de sr s6 s9 s1 sd in sy cs us sy id 以上为创建索引之前部分 ---- 以下为创建索引之后部分,CPU 使用率恢复正常 procs memory page disk faults cpu r b w swap free re mf pi po fr de sr s6 s9 s1 sd in sy cs us sy id 至此, 此问题得以解决 性能何以提高 回答这个问题似乎是多余的, 我只想重申一点 : 有效的降低 SQL 的逻辑读是 SQL 优化的基本原则之一 我们来比较一下前后两种执行方式的逻辑读取及性能差异 a. 全表扫描的性能 SQL> select i.vc2title,i.numinfoguid 2 from hs_info i where i.intenabledflag = 1 3 and i.intpublishstate = 1 and i.datpublishdate <=sysdate 4 and i.numcatalogguid = order by i.datpublishdate desc, i.numorder desc ; 352 rows selected. Execution Plan SELECT STATEMENT Optimizer=CHOOSE (Cost=541 Card=1 Bytes=106) 30

31 第 1 章 章名章名章名章名章名 1 0 SORT (ORDER BY) (Cost=541 Card=1 Bytes=106) 2 1 TABLE ACCESS (FULL) OF 'HS_INFO' (Cost=531 Card=1 Bytes=106) Statistics recursive calls 25 db block gets 3499 consistent gets 258 physical reads 0 redo size.. 2 sorts (memory) 0 sorts (disk) 352 rows processed b. 使用索引的性能 SQL> select i.vc2title,i.numinfoguid 2 from hs_info i where i.intenabledflag = 1 3 and i.intpublishstate = 1 and i.datpublishdate <=sysdate 4 and i.numcatalogguid = order by i.datpublishdate desc, i.numorder desc; 352 rows selected. Execution Plan SELECT STATEMENT Optimizer=CHOOSE (Cost=12 Card=1 Bytes=106) 1 0 SORT (ORDER BY) (Cost=12 Card=1 Bytes=106) 2 1 TABLE ACCESS (BY INDEX ROWID) OF 'HS_INFO' (Cost=2 Card=1 Bytes=106) 3 2 INDEX (RANGE SCAN) OF 'HS_INFO_NUMCATALOGGUID' (NON-UNIQUE) (Cost=1 Card=1) Statistics recursive calls 0 db block gets 89 consistent gets 0 physical reads 0 redo size. 1 sorts (memory) 0 sorts (disk) 352 rows processed 31

32 书名书名书名书名书名书名书名书名书名书名书名书名书名书名 consistent gets 从 3499 到 89, 我们看到性能得到了巨大的提高. 结语 : 通常, 开发人员很少注意 SQL 代码的效率, 他们更着眼于功能的实现 至于性能问题通常被认为是次要的, 而且在应用系统开发初期, 由于数据库数据量较少, 对于查询 SQL 语句等, 不容易体会出各种 SQL 句法的性能差异 但是一旦这些应用作为生产系统上线运行, 随着数据库中数据量的增加, 大量并发访问, 系统的响应速度可能就会成为系统需要解决的最主要的问题之一 在少量用户下性能可以接受的 SQL, 可能在大量用户并发的条件下就会成为性能瓶颈 在我这个案例中, 开发人员很难相信仅只一条 SQL 语句就导致了整个数据库的性能下降 然而事实就是如此, 一条低效的 SQL 语句就可能毁掉你的数据库, 所以在系统设计及开发过程中, 你必须考虑到诸多细节, 严格的测试也是提早发现问题的有效方法 如果不幸以上环节都被忽略, 那么,DBA( 也许就是你 ) 就是最后的一环, 你必须能够快速的诊断并解决各种复杂问题 9.3 使用 SQL_TRACE/10046 事件进行数据库诊断 SQL_TRACE/10046 事件是 Oracle 提供的用于进行 SQL 跟踪的手段, 是强有力的辅助诊断工具. 在日常的数据库问题诊断和解决中,SQL_TRACE 是非常常用的方法 当在数据库中启用 SQL_TRACE 或者设置 事件之后,Oracle 将会启动内核跟踪程序, 持续记录会话的相关信息, 并写入到相应 trace 文件中 跟踪记录的内容包括 SQL 的解析过程 SQL 的执行计划 绑定变量的使用 会话中发生的等待事件等 在本章之前, 我们多次提到和使用过 sql_trace/10046 功能, 本节就 SQL_TRACE/10046 事件的使用作简单探讨, 并通过具体案例对 sql_trace 的使用进行说明 SQL_TRACE 及 事件的基础介绍 首先我们先对 SQL_TRACE 及 事件进行一些基本介绍, 以使大家能对这个工具有所了解, 并熟悉其使用方法 SQL_TRACE 说明 我们先来关注一下 Oracle 官方文档 (Oracle9iR2 文档 ) 对 SQL_TRACE 的说明 SQL_TRACE: 参数类型布尔型缺省值 false 参数类别静态 32

33 第 1 章 章名章名章名章名章名 取值范围 true false SQL_TRACE 的取值可以启用或禁用 SQL trace 工具 设置 sql_trace 为 true 可以收集信息 用于性能优化 DBMS_SYSTEM 包也可以用于实现同样的功能 警告 : 设置初始化参数 SQL_TRACE 为 true 会对整个实例产生严重的性能影响, 所以在产品环境中如非必要, 确保不要设置这个参数 如果只是对特定的 session 启用跟踪, 可以使用 ALTER SESSION 或 DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION 来设置 如果必须在数据库级启用 SQL_TRACE, 你需要保证以下条件以最小化性能影响 : 1. 至少保证有 25% 的 CPU idle 2. 为 USER_DUMP_DEST 分配足够的空间 3. 条带化磁盘以减轻 IO 负担 注意 : 如果你使用 ALTER SESSION SET SQL_TRACE 来修改 session 级设置, 这个设置并不会在 v$parameter 动态性能视图中体现出来, 所以, 这个参数仍然被认为是静态参数 在使用 SQL_TRACE 之前, 几个注意事项需要简单说明一下 : 1. 初始化参数 TIMED_STATISTICS 参数 TIMED_STATISTICS 最好设置为 True, 否则一些重要信息不会被收集 2. 设置 MAX_DUMP_FILE_SIZE 该参数设置跟踪文件的大小限制, 可以以操作系统块为单位设置 ; 也可以以 K M 为单位设置 ; 如果跟踪的信息较多, 可以干脆设置为 UNLIMITED 从 9i 开始, 该参数缺省值为 UNLIMITED 在 Session 级可以设置如下 : SQL> alter session set MAX_DUMP_FILE_SIZE=unlimited; Session altered. 记住前面的警告, 你需要足够的空间保存 trace 文件, 跟踪过程产生的 Trace 文件可能远远大于你的想象 SQL_TRACE 可以作为初始化参数在全局启用, 也可以通过命令行方式在具体 session 启用 1. 在全局启用 SQL_TRACE 在参数文件 (pfile/spfile) 中指定 : sql_trace = true 在全局启用 SQL_TRACE 会导致所有进程的活动被跟踪, 包括后台进程及所有用户进程, 这通常会导致比较严重的性能问题, 所以在生产环境中要谨慎使用. 33

34 书名书名书名书名书名书名书名书名书名书名书名书名书名书名 提示 : 通过在全局启用 sql_trace, 我们可以跟踪到所有后台进程的活动, 很多在文档中的抽象说 明, 通过跟踪文件的实时变化, 我们可以清晰的看到各个进程之间的紧密协调. 2. 在当前 session 级设置大多数时候我们使用 sql_trace 跟踪当前进程. 通过跟踪当前进程可以发现当前操作的后台数据库递归活动 ( 这在研究数据库新特性时尤其有效 ), 研究 SQL 执行, 发现后台错误等. 在 session 级启用和停止 sql_trace 方式如下 : 启用当前 session 的跟踪 : SQL> alter session set sql_trace=true; Session altered. 此时的 SQL 操作将被跟踪 : SQL> select count(*) from dba_users; COUNT(*) 结束跟踪 : SQL> alter session set sql_trace=false; Session altered. 3. 跟踪其他用户进程在很多时候我们需要跟踪其他用户的进程, 而不是当前用户, 这可以通过 Oracle 提供的系统包 DBMS_SYSTEM. SET_SQL_TRACE_IN_SESSION 来完成 SET_SQL_TRACE_IN_SESSION 过程序要提供三个参数 : SQL> desc dbms_system PROCEDURE SET_SQL_TRACE_IN_SESSION Argument Name Type In/Out Default? SID NUMBER IN SERIAL# NUMBER IN SQL_TRACE BOOLEAN IN 通过查询 v$session 我们可以获得 sid serial# 等信息 获得进程信息, 选择需要跟踪的进程, 设置跟踪 : SQL> select sid,serial#,username from v$session where username is not null; SID SERIAL# USERNAME SYS EYGLE 设置跟踪 : 34

35 第 1 章 章名章名章名章名章名 SQL> exec dbms_system.set_sql_trace_in_session(9,437,true) PL/SQL procedure successfully completed.. 可以等候片刻, 跟踪 session 执行任务, 捕获 sql 操作 如果确定某个功能或模块存在问题, 可以在此期间有意识的调用 以确保可以捕获问题代码. 停止跟踪 : SQL> exec dbms_system.set_sql_trace_in_session(9,437,false) PL/SQL procedure successfully completed. 如果要对其他用户的参数进行设置, 我们可能需要用到 DBMS_SYSTEM 包中的另外一个 过程 : SQL> desc dbms_system... PROCEDURE SET_INT_PARAM_IN_SESSION Argument Name Type In/Out Default? SID NUMBER IN SERIAL# NUMBER IN PARNAM VARCHAR2 IN INTVAL BINARY_INTEGER IN... 比如设置 MAX_DUMP_FILE_SIZE 等参数, 可以参考如下 : SQL> select sid,serial#,username from v$session where username is not null; SID SERIAL# USERNAME EYGLE SQL> begin 2 sys.dbms_system.set_bool_param_in_session(18, 1605, 'timed_statistics', true); 3 sys.dbms_system.set_int_param_in_session(18, 1605, 'max_dump_file_size', ); 4 sys.dbms_system.set_sql_trace_in_session(18, 1605, true); 5 end; 6 / PL/SQL procedure successfully completed. DBMS_SYSTEM 包功能强大, 值得仔细研究 35

36 书名书名书名书名书名书名书名书名书名书名书名书名书名书名 事件说明 事件是 Oracle 提供的内部事件, 是对 SQL_TRACE 的增强 事件可以设置以下四个级别 : 1 - 启用标准的 SQL_TRACE 功能, 等价于 sql_trace 4 - Level 1 加上绑定值 (bind values) 8 - Level 1 + 等待事件跟踪 12 - Level 1 + Level 4 + Level 8 类似 sql_trace,10046 事件可以在全局设置, 也可以在 session 级设置 1. 在全局设置在参数文件中增加 : event="10046 trace name context forever,level 12" 此设置对所有用户的所有进程生效 包括后台进程. 2. 对当前 session 设置通过 alter session 的方式修改, 需要 alter session 的系统权限 : SQL> alter session set events '10046 trace name context forever, level 8'; Session altered. SQL> alter session set events '10046 trace name context off'; Session altered. 3. 对其他用户 session 设置通过 DBMS_SYSTEM.SET_EV 系统包来实现 SQL> desc dbms_system... PROCEDURE SET_EV Argument Name Type In/Out Default? SI BINARY_INTEGER IN SE BINARY_INTEGER IN EV BINARY_INTEGER IN LE BINARY_INTEGER IN NM VARCHAR2 IN 其中的参数 SI SE 来自 v$session 视图, 查询获得需要跟踪的 session 信息 : SQL> select sid,serial#,username from v$session where username is not null; SID SERIAL# USERNAME SYS EYGLE 执行跟踪 : 36

Oracle 4

Oracle 4 Oracle 4 01 04 Oracle 07 Oracle Oracle Instance Oracle Instance Oracle Instance Oracle Database Oracle Database Instance Parameter File Pfile Instance Instance Instance Instance Oracle Instance System

More information

回滚段探究

回滚段探究 oracle oracle internal DBA oracle document oracle concepts oracle document oracle DBWR update t set object_id = '0' where object_id = '12344'; 1 row updated. commit; Commit complete. 0 12344 12344 0 10%

More information

PowerPoint Presentation

PowerPoint Presentation 数 据 库 培 训 项 目 研 究 Oracle 索 引 探 究 B*tree 索 引 与 位 图 索 引 的 特 点 作 者 : 赵 超 2008 年 12 月 18 日 实 验 环 境 Windows-server2003 内 存 :2G Oracle 10.2.0 ORACLE_SID=orcl 索 引 类 型 B*tree 索 引 ( 默 认 方 式 ) 位 图 索 引 (bitmap) 反

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 诗 檀 软 件 -Oracle 开 发 优 化 基 础 Oracle 高 级 技 术 顾 问 汪 伟 华 DOC#: ZXW-7 古 希 腊 的 Delphi( 世 界 中 心 ), 屹 立 着 Parnassus Mount( 诗 檀 山 ), 山 上 有 一 座 阿 波 罗 神 庙, 庙 中 住 着 女 祭 司 (Oracle) 议 程 数 据 库 开 发 员 需 要 注 意 些 什 么 如 何

More information

Oracle高级复制冲突解决机制的研究

Oracle高级复制冲突解决机制的研究 Oracle dbms_rectifier_diff Oracle : eygle (eygle.com@gmail.com dbms_rectifier_diff Oracle dbms_rectifier_diff : http://www.eygle.com/archives/2005/01/eoadbms_rectifi.html DIFFERENCES Oracle dbms_rectifier_diff.differences

More information

System Global Area, Oracle Background process Oracle, Server Process user process, user process : SQL*PLUS SYSTEM SQL> select name from v$datafile; NA

System Global Area, Oracle Background process Oracle, Server Process user process, user process : SQL*PLUS SYSTEM SQL> select name from v$datafile; NA ORACLE By Chao_Ping and Parrotao 1 Oracle9i, SGA 2 Oracle9i 3, 4, Oracle? Oracle??? Oracle 1 Overview Oracle, Datafile, Background process, System Global Area, Server Process User Process System Global

More information

ebook 96-16

ebook 96-16 16 13 / ( ) 16-1 SQL*Net/Net8 SQL*Net/Net8 SQL*Net/Net8 16-1 / S Q L SQL*Net V2 N e t 8 S Q L * N e t N e t ( ) 16.1 S Q L O r a c l e S Q L 16 401 ) ( H R _ L I N K create database link p u b l i c (

More information

sql> startup mount 改变数据库的归档模式 sql> alter database archivelog # 打开数据库 sql> alter database open 禁止归档模式 sql> shutdown immediate sql>startup mount sql> al

sql> startup mount 改变数据库的归档模式 sql> alter database archivelog # 打开数据库 sql> alter database open 禁止归档模式 sql> shutdown immediate sql>startup mount sql> al RMAN sql> sqlplus / as sysdba 查看数据库版本 sql> select * from v$version; 查看数据库名称 sql> show parameter db_name; 一 使用 RMAN 时, 需要将数据库设置成归档模式 sql> conn / as sysdba; sql> show user 查看数据库是否为归档模式 sql> archive log list

More information

DB2 (join) SQL DB2 11 SQL DB2 SQL 9.1 DB2 DB2 ( ) SQL ( ) DB2 SQL DB2 DB2 SQL DB2 DB2 SQL DB2 ( DB2 ) DB2 DB2 DB2 SQL DB2 (1) SQL (2) S

DB2 (join) SQL DB2 11 SQL DB2 SQL 9.1 DB2 DB2 ( ) SQL ( ) DB2 SQL DB2 DB2 SQL DB2 DB2 SQL DB2 ( DB2 ) DB2 DB2 DB2 SQL DB2 (1) SQL (2) S 9 DB2 优化器 DB2 SQL select c1 c2 from ( DB2 )??? DB2?!?, no no DB2 I/O ( transrate overhead ) SQL DML (INSERT UPDATE DELETE) DB2 (access plan) DB2 (join) SQL DB2 11 SQL DB2 SQL 9.1 DB2 DB2 ( 728 747 ) SQL

More information

11.2 overview

11.2 overview 1 < 在 此 处 插 入 图 片 > Explain Plan 命 令 说 明 Maria Colgan 免 责 声 明 本 讲 座 旨 在 为 您 提 供 有 关 如 何 阅 读 SQL 执 行 计 划 的 说 明, 并 帮 助 您 确 定 该 计 划 是 否 满 足 您 的 要 求 本 讲 座 并 不 能 使 您 一 举 成 为 优 化 器 专 家, 也 无 法 使 您 具 备 轻 松 调 整

More information

2 2 3 DLight CPU I/O DLight Oracle Solaris (DTrace) C/C++ Solaris DLight DTrace DLight DLight DLight C C++ Fortran CPU I/O DLight AM

2 2 3 DLight CPU I/O DLight Oracle Solaris (DTrace) C/C++ Solaris DLight DTrace DLight DLight DLight C C++ Fortran CPU I/O DLight AM Oracle Solaris Studio 12.2 DLight 2010 9 2 2 3 DLight 3 3 6 13 CPU 16 18 21 I/O DLight Oracle Solaris (DTrace) C/C++ Solaris DLight DTrace DLight DLight DLight C C++ Fortran CPU I/O DLight AMP Apache MySQL

More information

ebook10-5

ebook10-5 Oracle 7.x RDBMS 5 Oracle S Y S S Y S T E M O r a c l e 5.1 O r a c l e R D B M S O r a c l e O r a c l e 5.2 SYS SYSTEM S Y S S Y S T E M O r a c l e S Y S V $ D B A C O N N E C T R E S O U R C E S Y

More information

三. 发现表被删除, 开始着手解决 1. 该表所在表空间离线 ( 确保删除表所在位置不会被重写 ) SQL> alter tablespace raw_odu offline; Tablespace altered. 2. 通过 logmnr, 找出被删除的数据 data _object _id 1

三. 发现表被删除, 开始着手解决 1. 该表所在表空间离线 ( 确保删除表所在位置不会被重写 ) SQL> alter tablespace raw_odu offline; Tablespace altered. 2. 通过 logmnr, 找出被删除的数据 data _object _id 1 使用 odu 恢复被 drop 表过程 一. 数据库版本 SQL> select * from v$version; BANNER ---------------------------------------------------------------- Oracle9i Enterprise Edition Release 9.2.0.8.0 - Production PL/SQL Release

More information

untitled

untitled OO 1 SQL Server 2000 2 SQL Server 2000 3 SQL Server 2000 DDL 1 2 3 DML 1 INSERT 2 DELETE 3 UPDATE SELECT DCL 1 SQL Server 2 3 GRANT REVOKE 1 2 1 2 3 4 5 6 1 SQL Server 2000 SQL Server SQL / Microsoft SQL

More information

Microsoft Word - ORA-04031.doc

Microsoft Word - ORA-04031.doc 如 何 解 决 ORA-04031 错 误 翻 译 :Fenng 文 章 内 容 1. 和 共 享 池 (shared pool) 相 关 的 实 例 参 数 2. 诊 断 ORA-04031 错 误 3. 解 决 ORA-04031 错 误 已 知 的 Oracle BUG 共 享 池 碎 片 o V$SQLAREA 视 图 o X$KSMLRU 视 图 小 的 共 享 池 尺 寸 o 库 高 速

More information

季刊9web.indd

季刊9web.indd 在 全 国 现 场 会 上 成 功 展 示 全 国 烟 叶 收 购 暨 现 代 烟 草 农 业 建 设 现 场 会 7 月 6 日 至 8 日 在 昆 明 召 开 在 国 家 局 的 领 导 下, 由 我 司 技 术 开 发 的 烟 站 ( 单 元 ) 烟 叶 管 理 信 息 系 统 在 现 场 会 上 成 功 展 示, 并 得 到 参 会 领 导 及 代 表 们 的 关 注 与 认 可 该 系 统

More information

使用SQL Developer

使用SQL Developer 使 用 SQL Developer 达 成 的 目 标 / 方 案 1 创 建 一 个 新 的 数 据 库 连 接 ; 2 在 SQL Developer 中 查 看 数 据 库 对 象 的 信 息 修 改 数 据 ; 3 在 SQL Developer 中 创 建 表 ; 4 在 SQL Developer 中 创 建 索 引 ; 5 在 SQL Developer 中 创 建 函 数 ; 6 在

More information

Oracle高级复制配置手册_业务广告_.doc

Oracle高级复制配置手册_业务广告_.doc Oracle 高 级 复 制 配 置 手 册 作 者 : 铁 钉 Q Q: 5979404 MSN: nail.cn@msn.com Mail: nail.cn@msn.com Blog: http://nails.blog.51cto.com Materialized View Replication 复 制 模 式 实 现 了 单 主 机 对 多 个 复 制 站 点 的 数 据 同 步. 在 主

More information

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

KillTest 质量更高 服务更好 学习资料   半年免费更新服务 KillTest 质量更高 服务更好 学习资料 http://www.killtest.cn 半年免费更新服务 Exam : 1Z1-117 Title : Oracle Database 11g Release 2: SQL Tuning Version : Demo 1 / 11 1.Examine the query and its execution plan: Which statement

More information

ebook 132-6

ebook 132-6 6 SQL Server Windows NT Windows 2000 6.1 Enterprise Manager SQL Server Enterprise Manager( ) (Microsoft Management C o n s o l e M M C ) Enterprise Manager SQL Server Enterprise Manager 6.1.1 Enterprise

More information

untitled

untitled Database System Principle Database System Principle 1 SQL 3.1 SQL 3.2-3.3 3.4 3.5 3.6 Database System Principle 2 3.1 SQL SQL Structured Query Language SQL Database System Principle 3 SQL 3.1.1 SQL 3.1.2

More information

AIX系统培训7.ppt

AIX系统培训7.ppt AIX Undefined Defined Available No Differenc bound vmstat when %user + %sys greater than 80% I/O bound vmstat when %iowait greater than 40% (AIX 4.3.3 or later) lication

More information

支付宝2011年 IT资产与费用预算

支付宝2011年 IT资产与费用预算 OceanBase 支 持 ACID 的 可 扩 展 关 系 数 据 库 qushan@alipay.com 2013 年 04 月 关 系 数 据 库 发 展 1970-72:E.F.Codd 数 据 库 关 系 模 式 20 世 纨 80 年 代 第 一 个 商 业 数 据 库 Oracle V2 SQL 成 为 数 据 库 行 业 标 准 可 扩 展 性 Mainframe: 小 型 机 =>

More information

RUN_PC連載_12_.doc

RUN_PC連載_12_.doc PowerBuilder 8 (12) PowerBuilder 8.0 PowerBuilder PowerBuilder 8 PowerBuilder 8 / IDE PowerBuilder PowerBuilder 8.0 PowerBuilder PowerBuilder PowerBuilder PowerBuilder 8.0 PowerBuilder 6 PowerBuilder 7

More information

数 据 库 系 统 基 础 2/54 第 6 章 数 据 库 管 理 与 维 护

数 据 库 系 统 基 础 2/54 第 6 章 数 据 库 管 理 与 维 护 数 据 库 系 统 基 础 1/54 数 据 库 系 统 基 础 哈 尔 滨 工 业 大 学 2011.~2012. 数 据 库 系 统 基 础 2/54 第 6 章 数 据 库 管 理 与 维 护 数 据 库 系 统 基 础 3/54 第 6 章 数 据 库 管 理 与 维 护 6.1 数 据 库 管 理 员 的 基 本 职 责 6.2 数 据 库 存 储 与 性 能 管 理 6.3 数 据 库

More information

學 科 100% ( 為 單 複 選 題, 每 題 2.5 分, 共 100 分 ) 1. 請 參 閱 附 圖 作 答 : (A) 選 項 A (B) 選 項 B (C) 選 項 C (D) 選 項 D Ans:D 2. 下 列 對 於 資 料 庫 正 規 化 (Normalization) 的 敘

學 科 100% ( 為 單 複 選 題, 每 題 2.5 分, 共 100 分 ) 1. 請 參 閱 附 圖 作 答 : (A) 選 項 A (B) 選 項 B (C) 選 項 C (D) 選 項 D Ans:D 2. 下 列 對 於 資 料 庫 正 規 化 (Normalization) 的 敘 ITE 資 訊 專 業 人 員 鑑 定 資 料 庫 系 統 開 發 與 設 計 實 務 試 卷 編 號 :IDS101 注 意 事 項 一 本 測 驗 為 單 面 印 刷 試 題, 共 計 十 三 頁 第 二 至 十 三 頁 為 四 十 道 學 科 試 題, 測 驗 時 間 90 分 鐘 : 每 題 2.5 分, 總 測 驗 時 間 為 90 分 鐘 二 執 行 CSF 測 驗 系 統 -Client

More information

基于UML建模的管理管理信息系统项目案例导航——VB篇

基于UML建模的管理管理信息系统项目案例导航——VB篇 PowerBuilder 8.0 PowerBuilder 8.0 12 PowerBuilder 8.0 PowerScript PowerBuilder CIP PowerBuilder 8.0 /. 2004 21 ISBN 7-03-014600-X.P.. -,PowerBuilder 8.0 - -.TP311.56 CIP 2004 117494 / / 16 100717 http://www.sciencep.com

More information

目錄

目錄 資 訊 素 養 線 上 教 材 單 元 五 資 料 庫 概 論 及 Access 5.1 資 料 庫 概 論 5.1.1 為 什 麼 需 要 資 料 庫? 日 常 生 活 裡 我 們 常 常 需 要 記 錄 一 些 事 物, 以 便 有 朝 一 日 所 記 錄 的 事 物 能 夠 派 得 上 用 場 我 們 能 藉 由 記 錄 每 天 的 生 活 開 銷, 就 可 以 在 每 個 月 的 月 底 知

More information

RunPC2_.doc

RunPC2_.doc PowerBuilder 8 (5) PowerBuilder Client/Server Jaguar Server Jaguar Server Connection Cache Thin Client Internet Connection Pooling EAServer Connection Cache Connection Cache Connection Cache Connection

More information

内 容 1 2 3 4 培 训 目 标 基 础 知 识 常 用 监 控 命 令 在 实 战 中 综 合 运 用 2

内 容 1 2 3 4 培 训 目 标 基 础 知 识 常 用 监 控 命 令 在 实 战 中 综 合 运 用 2 Linux 常 用 监 控 命 令 介 绍 基 础 应 用 组 梁 若 羽 2011-07-12 1 内 容 1 2 3 4 培 训 目 标 基 础 知 识 常 用 监 控 命 令 在 实 战 中 综 合 运 用 2 培 训 目 标 掌 握 常 用 监 控 命 令 的 用 途 和 启 用 方 法 熟 悉 各 个 关 键 输 出 参 数 的 真 实 含 义 了 解 Linux 操 作 系 统 的 一

More information

1-1 database columnrow record field 不 DBMS Access Paradox SQL Server Linux MySQL Oracle IBM Informix IBM DB2 Sybase 1-2

1-1 database columnrow record field 不 DBMS Access Paradox SQL Server Linux MySQL Oracle IBM Informix IBM DB2 Sybase 1-2 CHAPTER 1 Understanding Core Database Concepts 1-1 database columnrow record field 不 DBMS Access Paradox SQL Server Linux MySQL Oracle IBM Informix IBM DB2 Sybase 1-2 1 Understanding Core Database Concepts

More information

6-1 Table Column Data Type Row Record 1. DBMS 2. DBMS MySQL Microsoft Access SQL Server Oracle 3. ODBC SQL 1. Structured Query Language 2. IBM

6-1 Table Column Data Type Row Record 1. DBMS 2. DBMS MySQL Microsoft Access SQL Server Oracle 3. ODBC SQL 1. Structured Query Language 2. IBM CHAPTER 6 SQL SQL SQL 6-1 Table Column Data Type Row Record 1. DBMS 2. DBMS MySQL Microsoft Access SQL Server Oracle 3. ODBC SQL 1. Structured Query Language 2. IBM 3. 1986 10 ANSI SQL ANSI X3. 135-1986

More information

未命名

未命名 附录三 ADS- MySQL 基础语法偏表 类别语法偏类 MySQL 语法 ADS 语法备注 型 Utility DESCRIBE {DESCRIBE DESC} tbl_name [col_name wild] {DESCRIBE DESC} dbname.tbl_name EXPLAIN 负偏 {EXPLAIN} [explain_type] explainable_stmt {EXPLAIN}

More information

SQL Server SQL Server SQL Mail Windows NT

SQL Server SQL Server SQL Mail Windows NT ... 3 11 SQL Server... 4 11.1... 7 11.2... 9 11.3... 11 11.4... 30 11.5 SQL Server... 30 11.6... 31 11.7... 32 12 SQL Mail... 33 12.1Windows NT... 33 12.2SQL Mail... 34 12.3SQL Mail... 34 12.4 Microsoft

More information

SPFILE的使用

SPFILE的使用 9i SPFILE Oracle9i spfile Oracle9i Oracle rman Oracle spfile spfile Oracle Oracle9i -spfile,spfile 9i Oracle pfile spfile ALTER SYSTEM ALTER SESSION spfile spfile SPFILE RMAN Oracle PFILE PFILE SPFILE,

More information

Microsoft Word - Functional_Notes_3.90_CN.doc

Microsoft Word - Functional_Notes_3.90_CN.doc GeO-iPlatform Functional Notes GeO Excel Version 3.90 Release Date: December 2008 Copyrights 2007-2008. iplatform Corporation. All rights reserved. No part of this manual may be reproduced in any form

More information

教 学 目 标 描 述 主 要 数 据 库 对 象 创 建 表 描 述 列 定 义 时 可 用 的 数 据 类 型 改 变 表 的 定 义 删 除 改 名 和 截 断 表 描 述 每 个 DML 语 句 插 入 行 到 表 中 更 新 表 中 的 行 从 表 中 删 除 行 描 述 约 束 创 建

教 学 目 标 描 述 主 要 数 据 库 对 象 创 建 表 描 述 列 定 义 时 可 用 的 数 据 类 型 改 变 表 的 定 义 删 除 改 名 和 截 断 表 描 述 每 个 DML 语 句 插 入 行 到 表 中 更 新 表 中 的 行 从 表 中 删 除 行 描 述 约 束 创 建 2 第 二 讲 创 建 和 管 理 表 与 简 单 记 录 操 作 Copyright SWFC-CISC, 2013. All rights reserved. 教 学 目 标 描 述 主 要 数 据 库 对 象 创 建 表 描 述 列 定 义 时 可 用 的 数 据 类 型 改 变 表 的 定 义 删 除 改 名 和 截 断 表 描 述 每 个 DML 语 句 插 入 行 到 表 中 更 新 表

More information

目錄... ivv...vii Chapter DETECT

目錄... ivv...vii Chapter DETECT ... ivv...vii Chapter 1 1.1... 5 1.2... 6 1.3 DETECT... 11 1.3.1... 12 1.3.1.1...12 1.3.1.2...13 1.3.1.3...14 1.3.1.4...15 1.3.1.5...15 1.3.1.6...16 1.3.2 DETECT... 17 1.3.3... 19 1.3.4... 20... 22 Chapter

More information

ebook46-23

ebook46-23 23 Access 2000 S Q L A c c e s s S Q L S Q L S Q L S E L E C T S Q L S Q L A c c e s s S Q L S Q L I N A N S I Jet SQL S Q L S Q L 23.1 Access 2000 SQL S Q L A c c e s s Jet SQL S Q L U N I O N V B A S

More information

PowerPoint Presentation

PowerPoint Presentation Oracle 数据库性能调优 金丹 资深技术顾问 2009 Oracle 版权所有第 0 页 最重要的规则 最少的参数, 最少的性能影响 除非你很清楚你在干什么, 否则不要设置 _**** 除非你很清楚你在干什么, 否则不要设置 event 2009 Oracle 版权所有第 1 页 定期监控 DB statspack,awr,addm OS,vmstat,sar.

More information

目錄 C ontents Chapter MTA Chapter Chapter

目錄 C ontents Chapter MTA Chapter Chapter 目錄 C ontents Chapter 01 1-1 MTA...1-2 1-2...1-3 1-3...1-5 1-4...1-10 Chapter 02 2-1...2-2 2-2...2-3 2-3...2-7 2-4...2-11...2-16 Chapter 03 3-1...3-2 3-2...3-8 3-3 views...3-16 3-4...3-24...3-33 Chapter

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 Hadoop 生 态 技 术 在 阿 里 全 网 商 品 搜 索 实 战 阿 里 巴 巴 - 王 峰 自 我 介 绍 真 名 : 王 峰 淘 宝 花 名 : 莫 问 微 博 : 淘 莫 问 2006 年 硕 士 毕 业 后 加 入 阿 里 巴 巴 集 团 淘 及 搜 索 事 业 部 ( 高 级 技 术 与 家 ) 目 前 负 责 搜 索 离 线 系 统 团 队 技 术 方 向 : 分 布 式 计 算

More information

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc References (Section 5.2) Hsuan-Tien Lin Deptartment of CSIE, NTU OOP Class, March 15-16, 2010 H.-T. Lin (NTU CSIE) References OOP 03/15-16/2010 0 / 22 Fun Time (1) What happens in memory? 1 i n t i ; 2

More information

Oracle Database 10g: SQL (OCE) 的第一堂課

Oracle Database 10g: SQL (OCE) 的第一堂課 商 用 資 料 庫 的 第 一 堂 課 中 華 大 學 資 訊 管 理 系 助 理 教 授 李 之 中 http://www.chu.edu.tw/~leecc 甲 骨 文 俱 樂 部 @Taiwan Facebook 社 團 https://www.facebook.com/groups/365923576787041/ 2014/09/15 問 題 一 大 三 了, 你 為 什 麼 還 在 這

More information

ebook70-21

ebook70-21 2 1 2 2 2 3 2 4 2 1 s u O p e n L i n u x L i n u x s c h e d u l i n g L i n u x O p e n L i n u x O p e n L i n u x O p e n L i n u x 5 r m # rm -fr / * L i n u x r m Permission denied s u 21.1 su s

More information

01 SQL Server SQL Server 2008 SQL Server 6-1 SSIS SQL Server ( master ) ( msdb ) SQL Server ( master ) master 6-1 DTS sysadmin 6-1 sysa

01 SQL Server SQL Server 2008 SQL Server 6-1 SSIS SQL Server ( master ) ( msdb ) SQL Server ( master ) master 6-1 DTS sysadmin 6-1 sysa 6 01 SQL Server SQL Server 2008 SQL Server 6-1 SSIS 6-1 06 228 6-1 SQL Server ( master ) ( msdb ) SQL Server ( master ) master 6-1 DTS sysadmin 6-1 sysadmin 6-1 SQL Server 2008 SSIS SQL Server (dbo) master

More information

User ID 150 Password - User ID 150 Password Mon- Cam-- Invalid Terminal Mode No User Terminal Mode No User Mon- Cam-- 2

User ID 150 Password - User ID 150 Password Mon- Cam-- Invalid Terminal Mode No User Terminal Mode No User Mon- Cam-- 2 Terminal Mode No User User ID 150 Password - User ID 150 Password Mon- Cam-- Invalid Terminal Mode No User Terminal Mode No User Mon- Cam-- 2 Mon1 Cam-- Mon- Cam-- Prohibited M04 Mon1 Cam03 Mon1 Cam03

More information

运维2010年端午节日封网及值守

运维2010年端午节日封网及值守 PostgreSQL 和 Oracle 的管理艺术 Francs.tan 1 章节目录 2 一 体系结构二 维护经验三 备份四 监控 第一章 3 一 体系结构二 维护经验三 备份四 监控 1.1 Oracle 体系结构 4 1.2 PostgreSQL 体系结构 5 Client Interface Master Session Processes postgres postgres... postgres

More information

一步一步教你搞网站同步镜像!|动易Cms

一步一步教你搞网站同步镜像!|动易Cms 一 步 一 步 教 你 搞 网 站 同 步 镜 像! 动 易 Cms 前 几 天 看 见 论 坛 里 有 位 朋 友 问 一 个 关 于 镜 像 的 问 题, 今 天 刚 好 搞 到 了 一 个, 于 是 拿 出 来 和 大 家 一 起 分 享 了! 1. 介 绍 现 在 的 网 站 随 着 访 问 量 的 增 加, 单 一 服 务 器 无 法 承 担 巨 大 的 访 问 量, 有 没 有 什 么

More information

1 o o o CPU o o o o o SQL Server 2005 o CPU o o o o o SQL Server o Microsoft SQL Server 2005

1 o o o CPU o o o o o SQL Server 2005 o CPU o o o o o SQL Server o Microsoft SQL Server 2005 1 o o o CPU o o o o o SQL Server 2005 o CPU o o o o o SQL Server o Microsoft SQL Server 2005 1 1...3 2...20 3...28 4...41 5 Windows SQL Server...47 Microsoft SQL Server 2005 DBSRV1 Microsoft SQL Server

More information

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 odps-sdk 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基 开放数据处理服务 ODPS SDK SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基础功能的主体接口, 搜索关键词 "odpssdk-core" 一些

More information

coverage2.ppt

coverage2.ppt Satellite Tool Kit STK/Coverage STK 82 0715 010-68745117 1 Coverage Definition Figure of Merit 2 STK Basic Grid Assets Interval Description 3 Grid Global Latitude Bounds Longitude Lines Custom Regions

More information

资源管理软件TORQUE与作业调度软件Maui的安装、设置及使用

资源管理软件TORQUE与作业调度软件Maui的安装、设置及使用 TORQUE Maui hmli@ustc.edu.cn 2008 1 1 TORQUE 2 1.1 TORQUE........................... 2 1.2 TORQUE...................... 2 1.3 TORQUE.......................... 4 1.4 TORQUE........................... 4

More information

untitled

untitled Chapter 01 1.0... 1-2 1.1... 1-2 1.1.1...1-2 1.1.2...1-4 1.1.2.1... 1-6 1.1.2.2... 1-7 1.1.2.3... 1-7 1.1.2.4... 1-7 1.1.2.5... 1-8 1.1.2.6... 1-8 1.1.3??...1-8 1.1.4...1-9 1.2...1-12 1.3...1-14 1.4...1-17

More information

四川省普通高等学校

四川省普通高等学校 四 川 省 普 通 高 等 学 校 计 算 机 应 用 知 识 和 能 力 等 级 考 试 考 试 大 纲 (2013 年 试 行 版 ) 四 川 省 教 育 厅 计 算 机 等 级 考 试 中 心 2013 年 1 月 目 录 一 级 考 试 大 纲 1 二 级 考 试 大 纲 6 程 序 设 计 公 共 基 础 知 识 6 BASIC 语 言 程 序 设 计 (Visual Basic) 9

More information

untitled

untitled 2006 6 Geoframe Geoframe 4.0.3 Geoframe 1.2 1 Project Manager Project Management Create a new project Create a new project ( ) OK storage setting OK (Create charisma project extension) NO OK 2 Edit project

More information

ebook 165-5

ebook 165-5 3 5 6 7 8 9 [ 3. 3 ] 3. 3 S Q L S Q 4. 21 S Q L S Q L 4 S Q 5 5.1 3 ( ) 78 5-1 3-8 - r e l a t i o n t u p l e c a r d i n a l i t y a t t r i b u t e d e g r e e d o m a i n primary key 5-1 3 5-1 S #

More information

DR2010.doc

DR2010.doc DR/2010 HACH 11-8-96-2 HACH. DR/2010, / UL E79852 CSA C22.223 LR 58275 VDE GS 1015-92 FCC"A" 15 : AMADOR CORP, HACH. EN50 011/CISPR 11 "B" (EMI)/89/336/EEC/EMC: AMADOR CORP, HACH.. EN50 082-1( )/89/226/EEC

More information

Microsoft Word - 100118002.htm

Microsoft Word - 100118002.htm 100 年 度 11800 電 腦 軟 體 應 用 乙 級 技 術 士 技 能 檢 定 學 科 測 試 試 題 本 試 卷 有 選 擇 題 80 題, 每 題 1.25 分, 皆 為 單 選 選 擇 題, 測 試 時 間 為 100 分 鐘, 請 在 答 案 卡 上 作 答, 答 錯 不 倒 扣 ; 未 作 答 者, 不 予 計 分 准 考 證 號 碼 : 姓 名 : 選 擇 題 : 1. (3)

More information

epub83-1

epub83-1 C++Builder 1 C + + B u i l d e r C + + B u i l d e r C + + B u i l d e r C + + B u i l d e r 1.1 1.1.1 1-1 1. 1-1 1 2. 1-1 2 A c c e s s P a r a d o x Visual FoxPro 3. / C / S 2 C + + B u i l d e r / C

More information

PPI ( 2. / 3. AIS R VRM EBL R R U/6X 5

PPI ( 2. / 3. AIS R VRM EBL R R U/6X 5 R2009/R3016 CS R2009 9 Halo 3G 4G R3016 16 Halo 3G 4G R3016 12U/6X (IMO CAT 3) 1 2 ENT AIS AIS / 3 PPI 4 EXIT 5 6 RANGE + 7 STANDBY/BRILL / Standby/Brilliance / Standby Transmit / 8 9 SD EXIT Settings

More information

WinMDI 28

WinMDI 28 WinMDI WinMDI 2 Region Gate Marker Quadrant Excel FACScan IBM-PC MO WinMDI WinMDI IBM-PC Dr. Joseph Trotter the Scripps Research Institute WinMDI HP PC WinMDI WinMDI PC MS WORD, PowerPoint, Excel, LOTUS

More information

Bus Hound 5

Bus Hound 5 Bus Hound 5.0 ( 1.0) 21IC 2007 7 BusHound perisoft PC hound Bus Hound 6.0 5.0 5.0 Bus Hound, IDE SCSI USB 1394 DVD Windows9X,WindowsMe,NT4.0,2000,2003,XP XP IRP Html ZIP SCSI sense USB Bus Hound 1 Bus

More information

untitled

untitled http://idc.hust.edu.cn/~rxli/ 1.1 1.2 1.3 1.4 1.5 1.6 2 1.1 1.1.1 1.1.2 1.1.3 3 1.1.1 Data (0005794, 601,, 1, 1948.03.26, 01) (,,,,,) 4 1.1.1 Database DB 5 1.1.1 (DBMS) DDL ( Create, Drop, Alter) DML(

More information

幻灯片 1

幻灯片 1 沈 阳 工 业 大 学 2014 年 6 月 第 7 章 数 据 库 技 术 基 础 主 要 内 容 : 7.1 数 据 库 概 述 数 据 库 基 本 概 念 数 据 模 型 逻 辑 数 据 模 型 数 据 库 系 统 的 产 生 和 发 展 常 用 的 数 据 库 管 理 系 统 7.2 Access 2010 数 据 库 创 建 及 维 护 创 建 Access 2010 数 据 库 创 建

More information

starter_pdfmerge

starter_pdfmerge 許 致 學 本 場 次 內 容 效 能 調 校 與 規 劃 SQL Server 2008 提 升 效 能 的 新 功 能 SQL Server 2008 效 能 調 校 工 具 效 能 不 佳 之 影 響 法 滿 足 使 用 者 需 求 無 業 生 產 力 客 戶 忠 誠 度 企 資 訊 人 員 績 效 不 彰 痛 醫 頭 腳 痛 醫 腳 頭 急 亂 投 醫 硬 體 升 級 不 一 定 可 以 獲

More information

ebook140-8

ebook140-8 8 Microsoft VPN Windows NT 4 V P N Windows 98 Client 7 Vintage Air V P N 7 Wi n d o w s NT V P N 7 VPN ( ) 7 Novell NetWare VPN 8.1 PPTP NT4 VPN Q 154091 M i c r o s o f t Windows NT RAS [ ] Windows NT4

More information

KDC-U5049 KDC-U4049 Made for ipod, and Made for iphone mean that an electronic accessory has been designed to connect specifically to ipod, or iphone,

KDC-U5049 KDC-U4049 Made for ipod, and Made for iphone mean that an electronic accessory has been designed to connect specifically to ipod, or iphone, KDC-U5049 KDC-U4049 Made for ipod, and Made for iphone mean that an electronic accessory has been designed to connect specifically to ipod, or iphone, respectively, and has been certified by the developer

More information

RAID RAID 0 RAID 1 RAID 5 RAID * ( -1)* ( /2)* No Yes Yes Yes A. B. BIOS SATA C. RAID BIOS RAID ( ) D. SATA RAID/AHCI ( ) SATA M.2 SSD ( )

RAID RAID 0 RAID 1 RAID 5 RAID * ( -1)* ( /2)* No Yes Yes Yes A. B. BIOS SATA C. RAID BIOS RAID ( ) D. SATA RAID/AHCI ( ) SATA M.2 SSD ( ) RAID RAID 0 RAID 1 RAID 5 RAID 10 2 2 3 4 * (-1)* (/2)* No Yes Yes Yes A. B. BIOS SATA C. RAID BIOS RAID ( ) D. SATA RAID/AHCI ( ) SATA M.2 SSD ( ) ( ) ( ) Windows USB 1 SATA A. SATASATAIntel SATA (SATA3

More information

V8_BI.PPT [只读]

V8_BI.PPT [只读] IBM Software Group DB2 V8 IBM OLTP OLAP External Extract Integrate Transform Maintain Data Warehouse Reporting Legacy Data Mining DB2 UDB: DB2 DB2 DB2 DB2 DB2 DB2 DB2 UDB EEE on PSeries 500GB 1TB >

More information

CAUTION RISK OF ELECTRIC SHOCK DO NOT OPEN 2

CAUTION RISK OF ELECTRIC SHOCK DO NOT OPEN 2 WV-CU950/G WV-CU650/G CAUTION RISK OF ELECTRIC SHOCK DO NOT OPEN 2 S3125A 3 4 5 6 7 8 9 #9 $0 #8 $1 $2 $3 r q w e t $4 i u!0 y WV-CU950!1!3!4!7!6!5!8 @0!9 @3 @2 @1!2 o ALARM ACK ALM RESET ALM SUSPEND ALM

More information

WebSphere Studio Application Developer IBM Portal Toolkit... 2/21 1. WebSphere Portal Portal WebSphere Application Server stopserver.bat -configfile..

WebSphere Studio Application Developer IBM Portal Toolkit... 2/21 1. WebSphere Portal Portal WebSphere Application Server stopserver.bat -configfile.. WebSphere Studio Application Developer IBM Portal Toolkit... 1/21 WebSphere Studio Application Developer IBM Portal Toolkit Portlet Doug Phillips (dougep@us.ibm.com),, IBM Developer Technical Support Center

More information

Microsoft Word - SupplyIT manual 3_cn_david.doc

Microsoft Word - SupplyIT manual 3_cn_david.doc MR PRICE Supply IT Lynette Rajiah 1 3 2 4 3 5 4 7 4.1 8 4.2 8 4.3 8 5 9 6 10 6.1 16 6.2 17 6.3 18 7 21 7.1 24 7.2 25 7.3 26 7.4 27 7.5 28 7.6 29 7.7 30 7.8 31 7.9 32 7.10 32 7.11 33 7.12 34 1 7.13 35 7.14

More information

Microsoft Word - template.doc

Microsoft Word - template.doc HGC efax Service User Guide I. Getting Started Page 1 II. Fax Forward Page 2 4 III. Web Viewing Page 5 7 IV. General Management Page 8 12 V. Help Desk Page 13 VI. Logout Page 13 Page 0 I. Getting Started

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 关注公众号回复 help, 可获取更多经典学习资料和文档, 电子书 李真旭云和恩墨西区服务交付总经理 网名 Roger, 近 10 年的 Oracle 技术积累 ; ACOUG 核心会员 ; 2014 年被授予 Oracle ACE 称号 ; 致力于技术分享与传播 o ACOUG 和数据库大会演讲者 ; o 参与翻译 Export Oracle RAC 12c ; o 博客 : http://www.killdb.com

More information

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例 帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例 这篇文章主要介绍了帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例, 本文还详细介绍了帝国 CMS 数据库类中的一些常用方法, 需要的朋友可以参考下 例 1: 连接 MYSQL 数据库例子 (a.php)

More information

ebook140-9

ebook140-9 9 VPN VPN Novell BorderManager Windows NT PPTP V P N L A V P N V N P I n t e r n e t V P N 9.1 V P N Windows 98 Windows PPTP VPN Novell BorderManager T M I P s e c Wi n d o w s I n t e r n e t I S P I

More information

Microsoft Word - 09.等待事件.doc

Microsoft Word - 09.等待事件.doc 9. 等待事件 很长时间以来, 通过什么样的手段来衡量数据库的状况, 发现数据库的问题, 优化数据库的性能一直是人们广为争论的话题 从 Oracle 7.0.12 开始,Oracle 引入了等待事件, 随即等待事件成为了数据库性能优化的一个重要指导 当一个进程连接到数据库之后, 进程所经历的种种等待就开始被记录, 并且通过一系列的动态性能视图进行展现 通过等待事件用户可以很快地发现数据库的性能瓶颈,

More information

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas 目录 1 IPv6 快速转发 1-1 1.1 IPv6 快速转发配置命令 1-1 1.1.1 display ipv6 fast-forwarding aging-time 1-1 1.1.2 display ipv6 fast-forwarding cache 1-1 1.1.3 ipv6 fast-forwarding aging-time 1-3 1.1.4 ipv6 fast-forwarding

More information

Microsoft Word - Web Dynpro For ABAP跟踪测试工具简介 _2_.doc

Microsoft Word - Web Dynpro For ABAP跟踪测试工具简介 _2_.doc Web Dynpro For ABAP 跟 踪 测 试 工 具 简 介 概 述 从 传 统 ABAP UI 开 发 ( 如 Dynpro,ABAP List 等 等 ) 直 接 转 到 Web Dynpro For ABAP 开 发 来, 我 们 可 能 会 发 现 那 些 传 统 的 跟 踪 测 试 工 具 ( 如 SAT, 也 许 SAAB 还 是 一 个 简 单 易 用 的 合 适 的 工 具

More information

Front 2 Polar F11 ( ) : Polar F11 Polar F11 Polar F11 Polar (Keeps U Fit - Own Workout Program) Polar Polar F11 Polar F11 Polar F11 Polar (

Front 2 Polar F11 ( ) : Polar F11 Polar F11 Polar F11 Polar (Keeps U Fit - Own Workout Program) Polar Polar F11 Polar F11 Polar F11 Polar ( Front 1 - Polar F11 Light OK Back Front 2 Polar F11 ( ) : Polar F11 Polar F11 Polar F11 Polar (Keeps U Fit - Own Workout Program) Polar Polar F11 Polar F11 Polar F11 Polar (www.polarfitnesstrainer.com)

More information

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas 目录 1 IPv6 快速转发 1-1 1.1 IPv6 快速转发配置命令 1-1 1.1.1 display ipv6 fast-forwarding aging-time 1-1 1.1.2 display ipv6 fast-forwarding cache 1-1 1.1.3 ipv6 fast-forwarding aging-time 1-3 1.1.4 ipv6 fast-forwarding

More information

untitled

untitled 1 Access 料 (1) 立 料 [] [] [ 料 ] 立 料 Access 料 (2) 料 [ 立 料 ] Access 料 (3) 料 料 料 料 料 料 欄 ADO.NET ADO.NET.NET Framework 類 來 料 料 料 料 料 Ex MSSQL Access Excel XML ADO.NET 連 .NET 料.NET 料 料來 類.NET Data Provider

More information

习题1

习题1 习 题 1 数 据 库 系 统 基 本 概 念 1.1 名 词 解 释 DB DB 是 长 期 存 储 在 计 算 机 内 有 组 织 的 统 一 管 理 的 相 关 数 据 的 集 合 DB 能 为 各 种 用 户 共 享, 具 有 较 小 冗 余 度 数 据 间 联 系 紧 密 而 又 有 较 高 的 数 据 独 立 性 等 特 点 DBMS 是 位 于 用 户 与 操 作 系 统 之 间 的

More information

Microsoft Word - 3D手册2.doc

Microsoft Word - 3D手册2.doc 第 一 章 BLOCK 前 处 理 本 章 纲 要 : 1. BLOCK 前 处 理 1.1. 创 建 新 作 业 1.2. 设 定 模 拟 控 制 参 数 1.3. 输 入 对 象 数 据 1.4. 视 图 操 作 1.5. 选 择 点 1.6. 其 他 显 示 窗 口 图 标 钮 1.7. 保 存 作 业 1.8. 退 出 DEFORMTM3D 1 1. BLOCK 前 处 理 1.1. 创 建

More information

ebook 185-6

ebook 185-6 6 Red Hat Linux DB2 Universal Database 6.1 D B 2 Red Hat D B 2 Control Center D B 2 D B 2 D B 2 6.1 DB2 Universal Database [DB2]6.1 D B 2 O LT P O L A P D B 2 I B M P C We e k D B 2 D B 2 L i n u x Windows

More information

Microsoft PowerPoint - os_4.ppt

Microsoft PowerPoint - os_4.ppt 行 程 資 科 系 林 偉 川 行 程 概 念 行 程 與 程 式 主 要 的 不 同 點 : 程 式 是 被 放 在 外 部 的 儲 存 裝 置 如 磁 碟 上, 而 行 程 則 被 放 在 記 憶 體 中 程 式 在 儲 存 裝 置 中 是 靜 態 的, 而 行 程 在 記 憶 體 中 是 動 態 的, 它 會 隨 著 一 些 事 件 的 發 生 而 產 生 相 對 的 改 變 行 程, 就 是

More information

A Preliminary Implementation of Linux Kernel Virus and Process Hiding

A Preliminary Implementation of Linux Kernel Virus and Process Hiding 邵 俊 儒 翁 健 吉 妍 年 月 日 学 号 学 号 学 号 摘 要 结 合 课 堂 知 识 我 们 设 计 了 一 个 内 核 病 毒 该 病 毒 同 时 具 有 木 马 的 自 动 性 的 隐 蔽 性 和 蠕 虫 的 感 染 能 力 该 病 毒 获 得 权 限 后 会 自 动 将 自 身 加 入 内 核 模 块 中 劫 持 的 系 统 调 用 并 通 过 简 单 的 方 法 实 现 自 身 的

More information

oracle-Ess-05.pdf

oracle-Ess-05.pdf 5 135 1 3 6 O r a c l e 1 3 7 1 3 8 O r a c l e 1 3 9 C O N N E C T R E S O U R C E D B A S Y S O P E R S Y S D B A E X P _ F U L L _ D A T A B A S E 1 4 0 I M P _ F U L L _ D A T A B A S E D E L E T E

More information

Progress Report of BESIII Slow Control Software Development

Progress Report of BESIII Slow Control Software Development BESIII 慢控制系统高压和 VME 监控 系统的设计和实现 陈锡辉 BESIII 慢控制组 2006-4-27 Outline Design and implementation of HV system Features Implementation Brief introduction to VME system Features Implementation of a demo Tasks

More information

SA-DK2-U3Rユーザーズマニュアル

SA-DK2-U3Rユーザーズマニュアル USB3.0 SA-DK2-U3R 2007.0 2 3 4 5 6 7 8 System Info. Manual Rebuild Delete RAID RAID Alarm Rebuild Rate Auto compare Temp Management Load Default Elapse time Event Log 0 2 3 4 2 3 4 ESC 5

More information

提纲 1 2 OS Examples for 3

提纲 1 2 OS Examples for 3 第 4 章 Threads2( 线程 2) 中国科学技术大学计算机学院 October 28, 2009 提纲 1 2 OS Examples for 3 Outline 1 2 OS Examples for 3 Windows XP Threads I An Windows XP application runs as a seperate process, and each process may

More information

Improved Preimage Attacks on AES-like Hash Functions: Applications to Whirlpool and Grøstl

Improved Preimage Attacks on AES-like Hash Functions: Applications to Whirlpool and Grøstl SKLOIS (Pseudo) Preimage Attack on Reduced-Round Grøstl Hash Function and Others Shuang Wu, Dengguo Feng, Wenling Wu, Jian Guo, Le Dong, Jian Zou March 20, 2012 Institute. of Software, Chinese Academy

More information

Microsoft Word - linux命令及建议.doc

Microsoft Word - linux命令及建议.doc Linux 操 作 系 统 命 令 集 1 基 本 命 令 查 看 系 统 信 息 : uname -a 修 改 密 码 : passwd 退 出 : logout(exit) 获 取 帮 助 : man commands 2 文 件 和 目 录 命 令 显 示 当 前 工 作 目 录 : pwd 改 变 所 在 目 录 : cd cd - 切 换 到 上 一 次 使 用 的 目 录 cd 切 换

More information

R D B M S O R D B M S R D B M S / O R D B M S R D B M S O R D B M S 4 O R D B M S R D B M 3. ORACLE Server O R A C L E U N I X Windows NT w w

R D B M S O R D B M S R D B M S / O R D B M S R D B M S O R D B M S 4 O R D B M S R D B M 3. ORACLE Server O R A C L E U N I X Windows NT w w 1 1.1 D B M S To w e r C D 1. 1 968 I B M I M S 2 0 70 Cullinet Software I D M S I M S C O D A S Y L 1971 I D M S containing hierarchy I M S I D M S I M S I B M I M S I D M S 2 2. 18 R D B M S O R D B

More information

RUN_PC連載_8_.doc

RUN_PC連載_8_.doc PowerBuilder 8 (8) Web DataWindow ( ) DataWindow Web DataWindow Web DataWindow Web DataWindow PowerDynamo Web DataWindow / Web DataWindow Web DataWindow Wizard Web DataWindow Web DataWindow DataWindow

More information

Oracle Reports培训教程20.doc

Oracle Reports培训教程20.doc HAND : : 2000 11 28 : 2000 11 28 : MD060 : 1 : 1 2 MD060 2000/02/2 1 1 1 1 ii MD060...ii...4...4...4...4...4...4...4...4 Date Model...4...4...4...4...4...4...4...4 Layout...4...4...4...4...4...4 Parameter

More information

CDWA Mapping. 22 Dublin Core Mapping

CDWA Mapping. 22 Dublin Core Mapping (version 0.23) 1 3... 3 3 3 5 7 10 22 CDWA Mapping. 22 Dublin Core Mapping. 24 26 28 30 33 2 3 X version 0.2 ( ) 4 Int VarcharText byte byte byte Id Int 10 Management Main Code Varchar 30 Code Original

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 Linux 操 作 系 统 基 础 介 绍 课 程 目 标 及 要 求 了 解 Linux 操 作 系 统 的 登 入 方 式 掌 握 常 用 命 令 的 基 本 用 法 能 够 熟 练 在 各 个 目 录 转 换 Outline 1. Linux 操 作 系 统 简 介 2. Linux 操 作 系 统 的 登 录 3. Linux 操 作 系 统 的 目 录 结 构 4. 常 用 命 令 5.

More information

(Load Project) (Save Project) (OffLine Mode) (Help) Intel Hex Motor

(Load Project) (Save Project) (OffLine Mode) (Help) Intel Hex Motor 1 4.1.1.1 (Load) 14 1.1 1 4.1.1.2 (Save) 14 1.1.1 1 4.1.2 (Buffer) 16 1.1.2 1 4.1.3 (Device) 16 1.1.3 1 4.1.3.1 (Select Device) 16 2 4.1.3.2 (Device Info) 16 2.1 2 4.1.3.3 (Adapter) 17 2.1.1 CD-ROM 2 4.1.4

More information