zoukankan      html  css  js  c++  java
  • ORACLE学习笔记性能优化2

    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;

  • 相关阅读:
    ActivityLifecycleCallbacks 如何控制activity的生命周期
    ViewPage + Fragment 防止Fragment 重复加载问题
    RecyclerView 必知必会(转)
    如何简单的实现一个tab页title的动画效果
    onInterceptTouchEvent和onTouchEvent调用时序(转)
    Android Studio 2.3版本 Run项目不能自动启动APP的问题 (转)
    js-jQuery性能优化(一)
    js-权威指南学习笔记20
    js-权威指南学习笔记19.2
    js-权威指南学习笔记19
  • 原文地址:https://www.cnblogs.com/einyboy/p/2493519.html
Copyright © 2011-2022 走看看