Oracle10g优化
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Oracle10g性能调整与优化
主要内容:收集性能数据、优化SQL语句和应用程序、调整共享池(Shared Pool)的性能、调整缓冲区高速缓存(Buffer Cache)的性能、调整重做有关的性能、共享(多线程)服务器(MTS)、调整磁盘I/O的性能、调整闩(latch)和锁定(lock)、调整操作系统。
第一章收集性能数据
1. 报警(Alert)日志文件
报警(Alert)日志文件在c:\oracle\product\10.2.0\admin\erp\bdump目录下:文件名为alert_erp.log。
注意报警(Alert)日志文件中的错误信息:
ORA-01652:在临时表空间中没有足够的空闲空间来进行排序操作。
ORA-01653:在表空间中没有足够的空闲空间来存放表。
ORA-01650:在回退段所在的表空间中没有足够的空闲空间来使回退段增长。
ORA-01631:表所占用的空间超过允许的最大值。
Checkpoint Not Complete。
Snapshot too old。
后台进程跟踪文件:也在c:\oracle\product\10.2.0\admin\erp\bdump目录下。文件名类似于erp_lgwr_2548.trc、erp_arc0_2620.trc、erp_dbw0_3012.trc。
用户跟踪文件:
udump目录下:erp_ora_788.trc文件。其中788为该会话所对应的Server Process的编号,可以通过V$process查得。
设置用户跟踪
实例级跟踪:init.ora参数SQL_TRACE=TRUE。这种方法会产生大量的系统开销。
用户级跟踪:
SQl>alter session set sql_trace=true;
SQl>alter session set sql_trace=false;
DBA跟踪:
SQL>exec sys.dbms_system.set_sql_trace_in_session(10,87,true);
SQL>exec sys.dbms_system.set_sql_trace_in_session(10,87,false);
10为会话编号,87为会话序列号。
限制用户跟踪文件的大小:init.ora参数MAX_DUMP_FILE_SIZE。
2. 性能优化视图
v$sysstat:数据库启动以来的统计数据。
v$system_event:系统中所有会话发生过的等待事件。
v$sesstat:所有当前会话的统计数据。
v$session: 所有当前的会话。
V$session_event:已经发生过的等待事件。
V$session_wait:正在发生的等待事件。
V$sgastat:SGA内存的统计数据。
V$waitstat:对自由列表的争用。
3. 收集性能数据的程序:STATSPACK。
STATSPACK工具的使用
创建一个单独的表空间存放性能数据。大小300M左右。
注意:STATSPACK收集的是默认数据库的数据。
用管理员SYS用户登录。
SQL> @ c:\oracle\product\10.2.0\db_1\rdbms\admin\spcreate.sql
用PERFSTAT用户登录。
SQL>execute STATSPACK.SNAP;
至少要有两个快照。
用PERFSTAT用户登录,生成报告文件:
SQL> @ c:\oracle\product\10.2.0\db_1\rdbms\admin\spreport.sql
4. 图形性能工具(WEB方式)
第二章优化SQL语句和应用程序
1. 测量SQL语句的性能
Tkprof(Trace Kernel Profile)工具的使用
功能:测量SQL语句的性能。
c:\> tkprof
c:\oracle\product\10.2.0\admin\ERP\udump\erp_ora_1436.trc c:\bao.txt sys=no sys=no的含义:不包含递归SQL语句(即访问数据字典的隐含语句)
SQL语句的处理要经过三个阶段:Parse、Execute、Fetch。
需要优化的SQL语句:
占用过多的CPU时间。
Parse、Execute、Fetch阶段的时间太长。
从磁盘读太多的数据块,而从内存中读很少的数据块。
访问许多数据块,但只返回几条数据。
Top SQL 的使用(WEB方式)
Top SQL用来代替Tkprof。
Top SQL可以找出哪些SQL语句的性能差,需要优化。
Top SQL 中的数据来源于V$SQL。
Top Sessions的使用(WEB方式)
Top Sessions可以找出哪些会话占用较多的资源。
2. SQL语句的解释计划(EXPLAIN PLAN)
通过解释计划,可以找出SQL语句性能低的原因。
用SQL ScratchPad来生成SQL语句的解释计划:
用命令来生成SQL语句的解释计划:
先检查sys用户下是否有plan_table表(9i中已经有了这个表),如果没有,执行C:\oracle\product\10.2.0\db_1\rdbms\admin\utlxplan.sql脚本。
SQL>explain plan for SELECT e.empno, e.ename, d.deptno, d.loc
FROM scott.emp e, scott.dept d WHERE e.deptno = d.deptno;
注意要commit。
查询执行计划:
SQL>select lpad(' ',4*(level-2)) || operation || ' ' || options || ' ' || object_name "EXECUTION_PLAN" from plan_table start with id =0 connect by prior id = parent_id;
3. STATSPACK报告中的SQL语句性能
SQL ordered by Gets(按Gets排序的SQL语句)
SQL ordered by Reads(按Reads排序的SQL语句)
SQL ordered by Executions(按Executions排序的SQL语句)
SQL ordered by Parse Calls(按Parse Calls排序的SQL语句
4. Oracle优化方式
优化方式:基于rule和cost.
基于rule时的优化等级:根据语法和表结构优化
1 Single row by rowid
2 Single row by cluster join
3 Single row by hash cluster key with unique or primary key
4 Single row by unique or primary key
5 Cluster join
6 Hash cluster key
7 Indexed cluster key
8 Composite key
9 Single-column indexes
10 Bounded range search on indexed columns
11 Unbounded range search on indexed columns
12 Sort-merge join
13 MAX or MIN of indexed column
14 ORDER BY on indexed columns
15 Full table scan