对B-tree索引认识的几个常见误区误区1:除非新插入的索引值与被删除的值完全一样,否则索引中被删除条目所占的空间不会被重用。这是我们常听到的,关于索引的第一个误解。我们还是通过实验来证明这个说法是错误的:图 155如上图所示,我们创建了一个测试表和测试索引,其结构与我们之前做的实验是类似的。故这里不再赘述。查看该索引的树形结构:图 156如上图所示,该索引有3层。我们的测试在将第2个叶子块(le
如何优化索引分裂索引分裂由于其特殊性,分裂行为是无法避免的,更多的优化方案是减少分裂,或降低索引分裂对数据库整体性能的影响。当然还有设置较小的block_size或创建反向索引等优化方案,还需要具体问题具体分析。以下几种是的优化索引分裂的常用手段。1 分区索引大量的索引分裂的优化场景是采用索引分区来解决,特别是HASH索引可以有效的降低分裂块的争用,其原理就是通过HASH分散争用块,可以并发操作索
索引的分裂行为当某个索引块中要插入新的索引条目,但其中又没有可用空间时,就会发生索引的分裂。根据分裂发生所在的索引块类型的不同,可以分为在根块上发生的分裂,在分支块上发生的分裂和在叶子块上发生的分裂。下面,就这三种情况做分别介绍。从前面的实验中,我们已经看到,大约每个索引块中可以放下13个索引条目。所以,我们通过以下SQL,创建了新的测试表和索引:图 98查看此时的索引树形结构信息,如下图所示:图
DML操作时索引的更新行为我们再来看一下做更新时,索引又是如何做的?执行如下SQL,对以’990’结尾的字符串进行更新,更新后的值为以’997’结尾的字符串。图 90由前边对索引根块的分析(请参见图84)可知,更新后的值,也仍然应落在最后一个叶子块上。查看最后一个叶子块中的数据情况:图 91如上图所示,从“kdxconro 6”来看,索引条目数仍为6,和更新前是一样的。图 92如上图所示,我们发现
DML操作时索引的删除行为当我们将表中原有的一行记录时删除后,相应列上的索引又会怎么做呢?执行删除C1列以’985’结尾的记录的操作后,观察叶子块中的数据的变化情况:图 88如上图所示,我们可以看到表示叶子块中的索引条目数的kdxconro值,仍然为6,即表示此刻该叶子块中,仍然有6条索引条目。而且,表示索引块中可用空间多少的kdxcoavs的值,也没有变化。但是,我们所删除的那一行记录,所对应的
DML操作时索引的维护当我们对表进行DML(增、删、改操作)操作时,已存在的索引是如何同步维护的呢?当我们了解并理解了其工作原理后,在对索引进行管理和维护工作时,就可以避免一些对索引认识的错误,从而导致做了一些无用的,甚至是弊大于利的工作。首先,我们先创建测试用表和索引,如下所示:图 80如上所示,我们创建了一个名为tab_dml表,该表由两列构成。其中c1列做为测试索引的索引列,其数据类型为ch
索引的访问方法之跳跃扫描索引跳跃扫描(INDEX SKIP SCAN)是一种只会在组合索引(也称联合索引)上发生的索引访问方法。当我们在A、B两列(也可以更多,但至少要有两列)上创建组合索引后,假设A列在前,B列在后。当我们在SQL的WHERE子句没有用到A列做为过滤条件时,就有可能发生索引的跳跃扫描。之所以称之为“跳跃扫描”,有两种说法:一种是说这种访问方法,好像是“跳“过了前导列A,故名跳跃扫
索引的访问方法之全扫描索引全扫描(INDEX FULL SCAN)虽然与索引快速全扫描只差了“快速”(FAST),但其访问方法却与后者有明显差别:其一,索引全扫描是单块读,而索引快速全扫描是多块读。其二,索引全扫描是按叶子块的逻辑顺序,依序读取的,所以,它可以保证读取的值是有序的。而索引快速全扫描不能保证。第三,索引全扫描会沿着索引树形结构中定位最左侧(或最右侧)叶子块的路径,访问相关的索引根块和
索引的访问方法之快速全扫描索引快速全扫描(INDEX FAST FULL SCAN)是索引的各种扫描方法中,唯一会以多块读的方式来访问索引。如果把索引想象为表,则其行为类似于全表扫描。下面,我们继续沿用索引范围扫描中创建的索引,来构建索引快速全扫描的行为并观察之。图 51我们还是用10200 event来跟踪对索引块访问的次序,为节省篇幅,详细的操作步骤这里不再重复,操作方法与索引唯一扫描中的相应
索引的访问方法之范围扫描索引范围扫描(INDEX RANGE SCAN)可以发生在唯一索引之上,也可以发生在非唯一索引之上。索引范围扫描也是我们最常见到的索引访问方法。索引范围扫描时,并不会像索引唯一扫描那样,一找到满足相关条件的索引条目后即停止,不会再有尝试扫描后续索引条目的动作。而是会一直扫描到第一条不满足相关条件的索引条目后才会停止。这可能是称之为范围扫描的重要原因。而且,当访问的索引不是唯
索引的访问方法之唯一扫描2.1 跟踪索引的访问方法如何跟踪索引在使用过程中,是如何实现的索引的唯一扫描,范围扫描、快速全扫描,全扫描和跳跃扫描的呢?这里,我们需要借助Oracle提供的一个专门用于跟踪一致性读(逻辑读)的内部事件—10200 event。该事件可以通过在会话级别设置ALTER SESSION SET EVENTS,来跟踪当前会话中,在哪些数据块上发生了一致性读,以及发生的次序。下面
1.3 B-tree索引的物理结构B-tree索引的物理结构,也即索引是如何在数据块中存储的。因此,我们就要了解,根块,分支块和叶子块中的内容都有什么。而为了可以观察到这一结构,我们需要借助和使用Oracle提供的数据块DUMP方法,将指定的数据块内容,输出到跟踪文件中。我们从跟踪文件中观察和了解数据块的内容和结构,进而了解索引的物理结构。1.3.1 观察索引数据块和索引树形结构的基本方法1、DU
问题概述在分析客户环境的一条SQL时,发现了无法做谓词推入的现象。造成视图中的大表访问比较低效。故此对案例做了进一步分析及测试。以确定问题原因。问题SQL:SELECT SUM("A2"."PREM") FROM ((SELECT "A5"."AGENT_ID", SUM("A5"."PREM") "PREM" FROM QUERY_DES "A5"
B-tree索引的逻辑结构1.1 B-tree索引依据不同的维度,我们可以对索引进行相应的分类。比如,根据索引键值是否允许有重复值,可以分为唯一索引和非唯一索引;根据索引是由单个列,还是由多个列构成,又可以分为单列索引和组合索引(也称之为联合索引);而从索引的数据组织结构上来分类,则最常见的是B-tree索引和位图(Bitmap)索引。B-tree索引(为简化起见,以下提及的,未加其它修饰的“索引
概念描述oracle数据库根据每16个CPU分一股strand,每一股独立从log_buffer和redo logfile中分配一块空间,当其中一股log_buffer空间写满,会要求继续从redo logfile中分配一个空间,如果没有剩余空间可以用,则redo会发生切换。所以log_buffer设置不当也会是引起日志切换过快,并且归档日志碎片化的原因。详情解释log_buffer和redo l
一、什么是重做日志? 恢复操作最关键的结构是重做日志,它由两个或多个预先分配的文件组成,在数据库发生更改时这些文件存储所有更改。Oracle数据库的每个实例都有一个相关的重做日志,以在实例故障情况下保护数据库。1.重做线程 在多数据库实例的环境中,每个数据库实例的重做日志也被称为一个重做线程。 在典型的配置中,只有一个数据库实例访问Oracle数据库,因此只有一个线程存在。然而,在Oracl
问题概述客户XXX数据库服务器掉电,数据库 startup启动数据库遇到ORA-01200错误,信息如下:SQL> startup; ORACLE instance started. Total System Global Area 997953536 bytes Fixed Size 2259400 bytes Variable Size
概述Primary Database主库处于open状态对外提供服务,用户在Primary Database 上进行操作,操作被记录在联机日志和归档日志中。需要设置 logging force 模式:即使在归档模式下,也可能会有一些有nologging的操作不产生redo,这在DG下是不允许的,因此必须启用数据库强制记录redo。Standby Database备库处于恢复状态,接收并应用主库传递
方案概述在使用goldengate进行正式迁移实施时,都有一个环节是对迁移表的数据进行全量比对,保证数据不会有任何丢失。因为这个比对动作是发生在正式实施阶段,如果此时比对有数据丢失,这时再进行数据补救可能会影响到割接的时间,所以这里介绍一个小技巧,可以在平时的动态同步时,对数据进行全量比对,提早发现数据不一致的问题。实施步骤1. 首先暂时停止目标端的replicat进程R_TEST1,并查看该进程
最近ogg遇到个队列文件损坏故障,之前的文档是通过跳过事务实现的可在某些情况下不能够跳过事务,本次重新指定scn号抽取,scn就按照时间最早的scn去抽取。2022-12-15 10:10:25 ERROR OGG-02191 Incompatible record 104 in /OGG_DATA/ogg/dirdat/mod/cp000181953, rba 31,813 when g
1、Oracle 11g、12C体系概述oracle 11G-体系结构oracle 12C体系结构2、openguass体系结构逻辑结构3、 Oracle VS openguassoracle 12C开始支持线程服务器模式,通过设置初始化参数thread_execution,可以启用或关闭多线程模式,该参数缺省值为false,设置为TRUE启用12C的这个新特性:SQL> show para
环境:oracle 数据库: 192.168.22.201 端口号6666 操作系统:RHEL 7.6postgresql 数据库: 192.168.22.20 端口号5432 操作系统:RHEL 7.6pg数据库配置1、修改 pg_hba.conf 文件host all lanmc 192.168.22.201/24
问题概述在某套数据库升级迁移后,系统内的其他数据库收到了一些错误:Fri Nov 25 08:00:47 2022 Errors in file /oracle/app/oracle/diag/rdbms/resdb/resdb2/trace/resdb2_reco_3277084.trc: ORA-02062: distributed recovery received DBID ee3f103
在oracle数据库访问mysql数据库数据环境Oracle 数据库: 192.168.22.6 端口1521 操作系统:RHEL 7.6MYSQL 数据库: 192.168.22.9 端口3306 操作系统:RHEL 7.6 用户:lanmc,密码:lanmc123 ,数据库 lanmcORACLE 数据库配置1、oracle服务端安装mysql odbcmysql od
一.explain plan forselect * from t1,t2 where t1.id=t2.id and t1.id in(5,6); select * from table(dbms_xplan.display());优点无需真正执行,快捷方便缺点1.没有输出运行时的相关统计信息(产生多少逻辑读,多少次物理读,多少次递归调用等);2.无法判断是处理了多少行;3.无法判断表被访问
Oracle Database - Enterprise Edition - Version 12.1.0.2 and later1.问题描述客户需求:Oracle数据库里面能不能实现这么一个功能,让符合条件的用户可以看到表里面的所有数据,而另外一些人(比如权限低的用户)虽然能查询表,但是对某些敏感数据全部用星号加密了。效果如下图所示:=>2. 问题分析我们可以依靠oralce data r
概念描述# 能使用dd从asmcmd中抽取数据文件,在前2个AU(AU0和AU1)被完全破坏的情况下,需要磁盘组asm的元数据FDIR完整 # 同样的功能,AMDU也能实现 # 使用dd,可以模拟asmcmd的cp,解析amdu的抽取过程,更加直观的了解数据文件在磁盘组中的底层组织结构测试验证# 本次模拟测试步骤: # 1 使用3个磁盘组成的Normal磁盘组,再添加一块磁盘(raw4)之后,进行
我们知道Oracle的最小的数据存储单位是块(block),ITL事务槽就是位于块头的一部分,它的作用是记录该数据块所发生的事务,一个被使用的ITL事务槽对应当前数据块的一条事务,ITL事务槽的初始数量由initrans参数控制(最小值为1,但实际默认分配两个ITL事务槽),最大数量由maxtrans参数控制(Oracle 10g及以上版本此参数固定为255,不可变更),当事务提交时事务槽可以被重
备份备份CDB容器数据库(CDB)的备份本质上与非容器数据库相同。要记住的是,通过对CDB进行完全备份,也在对所有pdb进行完全备份。[oracle@tst03 ~]$ rman target / Recovery Manager: Release 19.0.0.0.0 - Production on Wed Jan 11 09:03:11 2023 Version 19.3.0.0.0 Co
概念描述Oracle官方手册12.2关于rownum描述如下:For each row returned by a query, the ROWNUM pseudocolumn returns a number indicating the order in which Oracle selects the row from a table or set of joined rows. The f
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号