`
houzhh
  • 浏览: 30640 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

OracleDBA之路Index(一)

 
阅读更多

标识未用索引
要开始监视索引的使用,请执行以下语句
ALTER INDEX index_name MONITORING USAGE
要停止监视索引的使用,请执行以下语句
ALTER INDEX index_name UNMONITORING USAGE
可以在V$OBJECT_USAGE试图中查看那个index是否被使用
INDEX_NAME:索引名
TABLE_NAME:对应的表
MONITORING:指示监视是 ON 还是 OFF
USED:指示 YES 或 NO,即在监视时间内是否使用了索引
START_MONITORING:索引监视的开始时间
END_MONITORING:索引监视的结束时间

删除Index
DROP INDEX index_name

下列情况应删除索引:
• 应用程序不再需要索引时,可将索引删除。
• 执行批量加载前,索引可能已删除。在大量加载数据前,先删除索引,加载后再重新创建索引,这样做的好处有:
– 提高加载性能
– 更有效地使用索引空间
• 仅定期使用的索引无需不必要的维护,尤其在基于易失表时更是如此。这是 OLTP 系统中的通常情况,在该系统中,年末或季度末会生成特殊的查询,以收集在总结会上使用的信息。
• 当在某种类型的操作(如加载)期间出现例程失败时,可能会将索引标记为INVALID。在这种情况下,需要删除并重建索引。
• 索引已损坏。
不能删除约束所需的索引,因此,必须先禁用或删除相关的约束。


分析索引
ANALYZE INDEX index_name VALIDATE STRUCTURE;
可在INDEX_STATS这个表中查看
SQL> analyze index index_t1 validate structure;
 
Index analyzed.
SQL> SELECT blocks, pct_used, distinct_keys lf_rows, del_lf_rows FROM index_stats;
 
    BLOCKS   PCT_USED    LF_ROWS DEL_LF_ROWS
---------- ---------- ---------- -----------
         8         47       1000           0
 
SQL>
如果索引中已删除行的比例很高,请重新组织该索引。例如:当DEL_LF_ROWS 占
LF_ROWS 的比率超过 30% 时
SQL> select count(*) from t;
 
  COUNT(*)
----------
       700
 
SQL> analyze index index_t1 validate structure;
 
Index analyzed.
 
SQL> SELECT blocks, pct_used, distinct_keys lf_rows, del_lf_rows FROM index_stats;
 
    BLOCKS   PCT_USED    LF_ROWS DEL_LF_ROWS
---------- ---------- ---------- -----------
         8         47       1000         300
 
SQL>


合并索引
ALTER INDEX index_name COALESCE;
SQL> ALTER INDEX index_t1 COALESCE;
 
Index altered.
 
SQL> analyze index index_t1 validate structure;
 
Index analyzed.
 
SQL> SELECT blocks, pct_used, distinct_keys lf_rows, del_lf_rows FROM index_stats;
 
    BLOCKS   PCT_USED    LF_ROWS DEL_LF_ROWS
---------- ---------- ---------- -----------
         8         44        700           0
 
SQL>

重建索引
索引重建具有以下特点:
• 将现有索引作为数据源建立新索引。
• 使用现有索引建立索引时无需排序,从而使性能更佳。
• 在建立新索引后,删除旧索引。在重建期间,各自的表空间内需要有足够的空间以容
纳新旧索引。
• 结果索引不包括任何已删除的项。因此,该索引可以更有效地使用空间。
• 在建立新索引的过程中,查询可继续使用现有索引。
在下列情况下应重建索引:
• 需要将现有索引移到另外的表空间中。如果索引和表在同一表空间中或者需要跨磁盘重新分布对象时,可能需要执行此操作。
• 索引中包含很多已删除的项。这是滑动索引(如订单表中的订单号上的索引)存在的典型问题,完成的订单已被删除,并将具有更高订单号的新订单添加到表中。如果有几个旧订单未完成,则可能有若干个索引叶块包含除几个已删除项之外的全部项。
• 需要将现有正常索引转换成反向键索引。在从Oracle 服务器的早期发行版移植应用程序时,可能会出现这种情况。
• 已通过 ALTER TABLE..MOVE TABLESPACE 命令将索引表移至其它表空间。
ALTER INDEX ...REBUILD 命令不能用于将位图索引更改为 B 树索引,反之亦然。
使用下列命令重建索引:
ALTER INDEX [schema.] index REBUILD
[ TABLESPACE tablespace ]
[ PCTFREE integer ]
[ INITRANS integer ]
[ MAXTRANS integer ]
[ storage-clause ]
[ LOGGING| NOLOGGING ]
[ REVERSE | NOREVERSE ]
联机重建索引
ALTER INDEX index_name REBUILD ONLINE;
SQL> delete from t where id > 650;
 
50 rows deleted.
 
SQL> commit;
 
Commit complete.
 
SQL> analyze index index_t1 validate structure;
 
Index analyzed.
 
SQL> SELECT blocks, pct_used, distinct_keys lf_rows, del_lf_rows FROM index_stats;
 
    BLOCKS   PCT_USED    LF_ROWS DEL_LF_ROWS
---------- ---------- ---------- -----------
         8         44        700          50

SQL> alter index index_t1 REBUILD ONLINE;
 
Index altered.
 
SQL> analyze index index_t1 validate structure;
 
Index analyzed.
 
SQL> SELECT blocks, pct_used, distinct_keys lf_rows, del_lf_rows FROM index_stats;
 
    BLOCKS   PCT_USED    LF_ROWS DEL_LF_ROWS
---------- ---------- ---------- -----------
         8         41        650           0

offline rebuild index

ALTER INDEX index_name REBUILD;
SQL> delete from t where id >600;
 
50 rows deleted.
 
SQL> commit;
 
Commit complete.
 
SQL> analyze index index_t1 validate structure;
 
Index analyzed.
 
SQL> SELECT blocks, pct_used, distinct_keys lf_rows, del_lf_rows FROM index_stats;
 
    BLOCKS   PCT_USED    LF_ROWS DEL_LF_ROWS
---------- ---------- ---------- -----------
         8         41        650          50
 
 
SQL> alter index index_t1 rebuild;
 
Index altered.
 
SQL> analyze index index_t1 validate structure;
 
Index analyzed.
 
SQL> SELECT blocks, pct_used, distinct_keys lf_rows, del_lf_rows FROM index_stats;
 
    BLOCKS   PCT_USED    LF_ROWS DEL_LF_ROWS
---------- ---------- ---------- -----------
         8         38        600           0
 
SQL>

分享到:
评论

相关推荐

    oracle dba日常管理

    Oracle数据库是全球广泛使用的数据库系统之一,尤其在企业级应用中占据主导地位。Oracle DBA的日常管理工作涉及多个方面,包括但不限于性能监控、故障排查、数据备份与恢复、安全性管理以及数据库优化。 一、性能...

    Oracle DBA认证题库

    Oracle DBA(数据库管理员)认证是Oracle公司提供的一项专业资格认证,旨在证明持证者具有管理和维护Oracle数据库系统的专业知识和技能。这个题库包含了Oracle DBA认证考试中可能遇到的各种问题,涵盖了数据库管理的...

    Oracle DBA 脚本

    4. 数据库备份与恢复:RMAN(恢复管理器)是Oracle提供的一个强大工具,DBA可以通过RMAN脚本进行数据库备份、增量备份、归档日志管理等操作。了解如何编写RMAN脚本进行完整备份、增量备份和恢复策略至关重要。 5. ...

    Oracle数据库DBA面试题50道及答案.pdf

    Oracle数据库DBA(Database Administrator)是负责Oracle数据库系统运行管理的专业技术人员。在准备面试Oracle数据库管理员岗位时,掌握相关的技术知识和处理问题的能力是非常重要的。以下是针对给定的Oracle数据库...

    oracle dba 面试题目及答案

    ### Oracle DBA 面试题目及答案解析 #### 1. 数据库正常启动过程中的几个状态 **知识点概述:** 在Oracle数据库中,数据库的启动过程分为三个主要阶段:`STARTUP NOMOUNT`、`STARTUP MOUNT` 和 `STARTUP OPEN`。 ...

    oracle dba宝典14

    B*树索引是最常用的索引类型之一,它采用倒排树结构来加速对表中行的访问。这种索引结构能够确保查询时快速定位到所需的数据行。如图14-1所示,B*树索引通过层级结构将数据组织起来,顶部为根节点,中间为分支节点,...

    Oracle DBA 笔试题

    【Oracle DBA 笔试题详解】 一、Database 1. 创建用户时,需要赋予`CONNECT`权限,使得新用户能够连接到数据库。 2. 重构索引通常涉及重建索引,可以通过`ALTER INDEX REBUILD`命令实现,或者在索引碎片过多时,...

    ORACLE DBA学习笔记(约100万字)

    ### ORACLE DBA 学习笔记关键知识点解析 #### 一、限制用户访问进程数量 在Oracle数据库管理中,为了防止因某个用户的异常操作导致整个数据库性能下降甚至挂起,通常需要对用户的连接数进行限制。这可以通过设置...

    oracle dba quan gong lue

    - **备份与恢复**:定期备份数据库并确保能够快速恢复是DBA的重要职责之一。 - **性能监控与调优**:通过监控工具识别瓶颈,调整参数以优化系统性能。 - **安全配置**:确保数据安全,包括设置访问控制、加密数据...

    ORACLE数据库DBA面试集锦

    简介: 希望可以给面试DBA的朋友有所帮助,里面文件压缩包里有面试相关的题目与数据库概念;如:一:SQL tuning 类  1:列举几种表连接方式  hash join/merge join/nest loop(cluster join)/index join  2:不...

    Oracle DBA Tables

    Oracle DBA Tables是Oracle数据库中的一个核心视图,它提供了关于Oracle数据库中所有表的信息,包括但不限于表的所有者、表空间名称、聚簇名称等。这些信息对于数据库管理员(DBA)来说至关重要,因为它可以帮助他们...

    ORACLE DBA常用SQL语句

    在Oracle数据库管理(DBA)工作中,SQL语句扮演着至关重要的角色,它们是DBA进行数据查询、数据库维护和性能优化的主要工具。以下是一些ORACLE DBA常用的SQL语句,这些语句涵盖了数据库管理和优化的核心方面: 1. *...

    oracle DBA

    #### 一、Oracle DBA角色与职责 Oracle数据库管理员(DBA)负责管理和维护Oracle数据库系统,确保其稳定运行、高效性和安全性。DBA的主要职责包括但不限于数据库的设计、安装、配置、性能调优、备份与恢复、安全控制...

    oracle dba每日工作

    Oracle DBA(数据库管理员)的日常工作涉及众多方面,包括但不限于监控数据库健康状态、优化性能、保证数据安全性以及处理故障。本文将重点介绍如何利用shell脚本自动化这些日常任务,并回顾一些常用的Unix命令。 ...

    Oracle数据库DBA面试题50道及答案

    在Oracle数据库领域,DBA(数据库管理员)的职责包括设计、实施、维护和优化数据库系统。以下是Oracle数据库DBA面试中可能遇到的知识点: 1. 数据库备份类型及优缺点 热备份是在数据库处于归档模式下,并且数据库在...

    Oracle DBA学习笔记

    ### Oracle DBA 学习笔记知识点总结 #### 一、限制用户访问进程数量 在Oracle数据库管理中,可能会遇到因为连接池的问题导致某些用户的连接数超出预期,甚至达到数据库进程的最大值的情况。为了应对这种情况,可以...

    oracle dba必备sql语句列表

    ### Oracle DBA必备SQL语句列表详解 #### 监控索引是否被使用 - **命令**: - `ALTER INDEX &index_name MONITORING USAGE;` - `ALTER INDEX &index_name NOMONITORING USAGE;` - `SELECT * FROM V$OBJECT_USAGE...

    Oracle数据库DBA面试题

    ### Oracle数据库DBA面试题详解 #### 1. 解释冷备份和热备份的不同点以及各自的优点 - **冷备份**:这是一种简单的物理文件复制方式,通常在数据库完全关闭的情况下进行。冷备份适用于所有模式的数据库,无论是...

    阿里巴巴的Oracle DBA笔试题参考答案

    SQL Tuning是数据库管理员(DBA)最常见的任务之一。它涉及到SQL语句的优化,以提高数据库的性能。以下是SQL Tuning中的一些重要知识点: 1. 表连接方式:hash join、merge join、nest loop(cluster join)、index...

Global site tag (gtag.js) - Google Analytics