动态网站制作指南 [  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教程 ]的信息



本月文章推荐
.一些常用的计划脚本(2).
.Oracle 9i修改数据表结构.
.Oracle Forms Server Troublesho.
.在不同字符集的数据库之间导入数.
.Oracle数据库恢复管理器及特殊包.
.Oracle数据库中通过ADO数据存取分.
.自动备份Oracle数据库.
.ORACLE7.0到ORACLE8.1的新特性比.
.在Oracle中实现数据库的复制.
.oracle日期处理完全版.
.用PL/SQL产生随机数.
.ORACLE8的分区管理.
.Oracle数据库软件包远程溢出漏洞.
.oracle数据库 SQLPlus 使用技巧.
.Oracle 10g 新特性之虚拟专用数据.
.本地分区索引如何确定表空间(1).
.用Pro*C开发多线程应用程序.
.Oracle9i新特点:SPFILE的使用--.
.Daemon是怎样练成的.
.ORACLE9I中建立自增字段的方法.

ORACLE学习笔记--性能优化一

发表日期: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  ); 可以发现执行计划恢复正常。
上一篇:oracle性能优化心得 人气:687
下一篇:分析数据库性能的SQL 人气:351
浏览全部Oracle教程的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-7-24 Sablog-X v2.0 预览版
2008-7-24 帝国备份王EmpireBak 2008 正式版
2008-7-24 网趣网上购物系统时尚版 v8.2
2008-7-24 纵横B2B电子商务系统XYECS!B2B v
2008-7-24 e路小说小偷 v1.2.0723
2008-7-24 凌风美女图片站程序 v2.2
2008-7-24 TOM15电影收索程序
2008-7-24 清风信息自动采集生成系统 v1.0
2008-7-24 QQ邮箱编辑器 v1.0 (小小菜刀ASP
2008-7-19 UltraEdit 简体中文增强版 14.10
2008-7-19 CentOS 5.2 i386 LiveCD
2008-7-19 Snapture多功能相机 v1.4
2008-7-19 iAcces中文输入法 v1.0Build016
2008-7-19 Cookbook烹饪秘籍 v2.5
2008-7-19 苹果专用DVD转换工具 v1.1.59汉化
2008-7-19 Modem修复软件ZiPhone修改版04.0
2008-7-19 AgileMessenger即时通讯工具美化
2008-7-19 Sketches画图软件 v0.7b6破解版


  发表评论
姓 名: 验证码:
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵