动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Oracle教程 ]的信息

本月文章推荐
.处理Oracle数据库中一张有效的Dr.
.Debian Sarge 上安装 Oracle 10g.
.Oracle9i初始化参数中文说明(15).
.ZT-Statspack安装配置使用说明二.
.利用Oracle的Job Queue实现定时操.
.内部错误,hostdef扩展名不存在.
.关于用户进程,服务进程,后台进.
.oracle sqlplus 格式化输出的命令.
.oracle自定义函数的执行时间.
.Linux的IP设置技巧.
.ORACLE之常用FAQ V1.0二(构架体系.
.Oracle数据库日常维护手册.
.chapter5:管理 Oracle 例程.
.ORACLE在HP-UX下的系列问题处理(.
.如何选购Linux可以搭配的机器之D.
.如何在Oracle里用存储过程定期分.
.ORACLE关系数据库设计.
.Oracle Database 10 g : 为 DBA .
.ORACLE性能诊断―学习statspack笔.
.Oracle 10i数据库创建过程.

ORACLE学习笔记--性能优化(1)

发表日期:2008-2-9 |


1. 查询正在执行语句的执行计划(也就是实际语句执行计划)

select * from v$sql_plan where hash_value = (select sql_hash_value from v$session where sid = 1111);

其中id和parent_id表示了执行数的结构,数值最大的为最先执行 比如 ID  PARENT_ID   

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

0

1 0

2 1

3 2

4 3

5 4

6 3   则执行计划树为

0

1

2

3

6     4 

5

2.如何设置自动跟踪

用system登录

执行$Oracle_HOME/rdbms/admin/utlXPlan.sql创建计划表

执行$ORACLE_HOME/sqlplus/admin/plustrce.sql创建plustrace角色

假如想计划表让每个用户都能使用,则

SQL>create public synonym plan_table for plan_table;

SQL> grant all on plan_table to public; 假如想让自动跟踪的角色让每个用户都能使用,则

SQL> grant plustrace to public;

通过如下语句开启/停止跟踪

SET AUTOTRACE ON OFF ON EXPLAIN ON STATISTICS TRACEONLY TRACEONLY EXPLAIN 3.如何跟踪自己的会话或者是别人的会话

跟踪自己的会话很简单

Alter session set sql_trace truefalse

Or

Exec dbms_session.set_sql_trace(TRUE); 假如跟踪别人的会话,需要调用一个包

exec dbms_system.set_sql_trace_in_session(sid,serial#,truefalse) 跟踪的信息在user_dump_dest 目录下可以找到或通过如下脚本获得文件名称(适用于Win环境,假如是unix需要做一定修改)

SELECT p1.value'\'p2.value'_ora_'p.spid'.ora' filename

FROM

v$process p,

v$session s,

v$parameter p1,

v$parameter p2

WHERE p1.name = 'user_dump_dest'

AND p2.name = 'db_name'

AND p.addr = s.paddr

AND s.audsid = USERENV ('SESSIONID')

最后,可以通过Tkprof来解析跟踪文件,如

Tkprof 原文件 目标文件 sys=n 4.怎么设置整个数据库系统跟踪

其实文档上的alter system set sql_trace=true是不成功的,但是可以通过设置事件来完成这个工作,作用相等

alter system set events

'10046 trace name context forever,level 1'; 假如关闭跟踪,可以用如下语句

alter system set events

'10046 trace name context off'; 其中的level 1与上面的8都是跟踪级别

level 1:跟踪SQL语句,等于sql_trace=true

level 4:包括变量的具体信息

level 8:包括等待事件

level 12:包括绑定变量与等待事件 5.怎么样根据OS进程快速获得DB进程信息与正在执行的语句

有些时候,我们在OS上操作,象TOP之后我们得到的OS进程,怎么快速根据OS信息获得DB信息呢?

我们可以编写如下脚本:

$more whoit.sh

#!/bin/sh

sqlplus /nolog 100,cascade=> TRUE);

dbms_stats.gather_table_stats(User,TableName,degree => 4,cascade => true);
这是对命令与工具包的一些总结

<1>、对于分区表,建议使用DBMS_STATS,而不是使用Analyze语句。

 a) 可以并行进行,对多个用户,多个Table

 b) 可以得到整个分区表的数据和单个分区的数据。

 c) 可以在不同级别上Compute Statistics:单个分区,子分区,全表,所有分区

 d) 可以倒出统计信息

 e) 可以用户自动收集统计信息

<2>、DBMS_STATS的缺点

 a) 不能Validate StrUCture

 b) 不能收集CHAINED ROWS, 不能收集CLUSTER TABLE的信息,这两个仍然需要使用Analyze语句。

 c) DBMS_STATS 默认不对索引进行Analyze,因为默认Cascade是False,需要手工指定为True

<3>、对于oracle 9里面的External Table,Analyze不能使用,只能使用DBMS_STATS来收集信息。 6.怎么样快速重整索引

通过rebuild语句,可以快速重整或移动索引到别的表空间

rebuild有重建整个索引数的功能,可以在不删除原始索引的情况下改变索引的存储参数

语法为

alter index index_name rebuild tablespace ts_name

storage(......); 假如要快速重建整个用户下的索引,可以用如下脚本,当然,需要根据你自己的情况做相应修改

SQL> set heading off

SQL> set feedback off

SQL> spool d:\index.sql

SQL> SELECT 'alter index ' index_name ' rebuild '

'tablespace INDEXES storage(initial 256K next 256K pctincrease 0);'

FROM all_indexes

WHERE ( tablespace_name != 'INDEXES'

OR next_extent != ( 256 * 1024 )

)

AND owner = USER

SQL>spool off 另外一个合并索引的语句是

alter index index_name coalesce 这个语句仅仅是合并索引中同一级的leaf block,消耗不大,对于有些索引中存在大量空间浪费的情况下,有一些作用。 7.如何使用Hint提示

在select/delete/update后写/*+ hint */

如 select /*+ index(TABLE_NAME INDEX_NAME) */ col1... 注重/*和+之间不能有空格,如用hint指定使用某个索引

select /*+ index(cbotab) */ col1 from cbotab;

select /*+ index(cbotab cbotab1) */ col1 from cbotab;

select /*+ index(a cbotab1) */ col1 from cbotab a; 其中

TABLE_NAME是必须要写的,且假如在查询中使用了表的别名,在hint也要用表的别名来代替表名;

INDEX_NAME可以不必写,Oracle会根据统计值选一个索引;

假如索引名或表名写错了,那这个hint就会被忽略; 8.怎么样快速复制表或者是插入数据

快速复制表可以指定Nologging选项

如:Create table t1 nologging

as select * from t2; 快速插入数据可以指定append提示,但是需要注重noarchivelog模式下,默认用了append就是nologging模式的。 在archivelog下,需要把表设置程Nologging模式。

如insert /*+ append */ into t1

select * from t2 注重:假如在9i环境中并设置了FORCE LOGGING,则以上操作是无效的,并不会加快,当然,可以通过如下语句设置为NO FORCE LOGGING。

Alter database no force logging;

是否开启了FORCE LOGGING,可以用如下语句查看

SQL> select force_logging from v$database; 9.怎么避免使用特定索引

在很多时候,Oracle会错误的使用索引而导致效率的明显下降,我们可以使用一点点技巧而避免使用不该使用的索引,如:

表test,有字段a,b,c,d,在a,b,c上建立联合索引inx_a(a,b,c),在b上单独建立了一个索引Inx_b(b)。 在正常情况下,where a=? and b=? and c=?会用到索引inx_a,where b=?会用到索引inx_b,但是,where a=? and b=? and c=? group by b会用到哪个索引呢?在分析数据不正确(很长时间没有分析)或根本没有分析数据的情况下,oracle往往会使用索引inx_b。通过执行计划的分析,这个索引的使用,将大大耗费查询时间。
当然,我们可以通过如下的技巧避免使用inx_b,而使用inx_a。 where a=? and b=? and c=? group by b'' --假如b是字符

where a=? and b=? and c=? group by b+0 --假如b是数字 通过这样简单的改变,往往可以是查询时间提交很多倍

当然,我们也可以使用no_index提示,相信很多人没有用过,也是一个不错的方法:

select /*+ no_index(t,inx_b) */ * from test t

where a=? and b=? and c=? group by b 举例:

本来在CM_USER上有索引IDX_CM_USER4(ACC_ID)和IDX_CM_USER8(BILL_ID),可是执行如下语句的时候很慢。

select * from CM_USER where  acc_id =1200007175

and user_status>0 and bill_id like '13%' order by acc_id,bill_id 用explain分析,发现执行计划是用IDX_CM_USER8.如下查询

select * from user_indexes where table_name ='CM_USER' 发现IDX_CM_USER8没有分析过。 用下面语句执行计划改变

select /*+INDEX(CM_USER IDX_CM_USER4)*/* from CM_USER where  acc_id =1200007175 and user_status>0 and bill_id like '13%' order by acc_id,bill_id 或者分析索引

exec dbms_stats.gather_index_stats(ownname => 'QACS1',indname => 'IDX_CM_USER8',estimate_percent => 5 );

可以发现执行计划恢复正常。


10.Oracle什么时候会使用跳跃式索引扫描

这是9i的一个新特性跳跃式索引扫描(Index Skip Scan).

例如表有索引index(a,b,c),当查询条件为where b=?的时候,可能会使用到索引index(a,b,c),如,执行计划中出现如下计划:

INDEX (SKIP SCAN) OF 'TEST_IDX' (NON-UNIQUE) Oracle的优化器(这里指的是CBO)能对查询应用Index Skip Scans至少要有几个条件:

<1> 优化器认为是合适的。

<2> 索引中的前导列的唯一值的数量能满足一定的条件(如重复值很多
上一篇:教你如何截获Oracle数据库连接密码 人气:536
下一篇:如何查看正在运行的过程? 人气:610
浏览全部Oracle教程的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-9-5 Coppermine Photo Gallery v1.4.
2008-9-5 清松网络日记本 v2.4
2008-9-5 AyWeb企业网站管理系统 v2.3 bui
2008-9-5 美女写真小偷程序联盟 v3.0 buil
2008-9-5 老Y文章管理系统 v2.1
2008-9-5 SiteDynamic企业网站管理系统 v1
2008-9-5 MyCOM企业网站管理系统 v1.0 Bui
2008-9-5 乐风CMS影视版 2008
2008-9-5 幻影电影视频系统TvsCms v1.3 伪
2008-8-23 Mini WinMount V0.4
2008-8-23 Vista优化大师3.11正式版
2008-8-23 Wine 1.13
2008-8-23 KlipFolio 5.0 Build 5899-80
2008-8-23 Windows Sysinternals Desktops
2008-8-23 OneTap Movies1.2破解版
2008-8-23 AnnotaterPDF阅读1.1.503 破解版
2008-8-23 SoundMeter分贝测量仪 v1.0汉化破
2008-8-23 iDrum音乐节拍1.0破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | Html转换js | js/vbs加密 | md5加密 | 进制转换
实用工具:汉字翻译拼音 | 符号对照表 | 个税计算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵