Oracle高水位的知识

一、准备知识:ORACLE的逻辑存储管理。

ORACLE在逻辑存储上分4个粒度: 表空间, 段, 区 和 块。

(1)块: 是粒度最小的存储单位,现在标准的块大小是8K,ORACLE每一次I/O操作也是按块来操作的,也就是说当ORACLE从数据文件读数据时,是读取多少个块,而不是多少行。  每一个Block里可以包含多个row。

(2)区: 由一系列相邻的块而组成,这也是ORACLE空间分配的基本单位,举个例子来说,当我们创建一个表Dave时,首先ORACLE会分配一区的空间给这个表,随着不断的INSERT数据到Dave,原来的这个区容不下插入的数据时,ORACLE是以区为单位进行扩展的,也就是说再分配多少个区给Dave,而不是多少个块。

(3)段: 是由一系列的区所组成, 一般来说, 当创建一个对象时(表,索引),就会分配一个段给这个对象。 所以从某种意义上来说,段就是某种特定的数据。如CREATE TABLE Dave,这个段就是数据段,而CREATE INDEX ON Dave(NAME), ORACLE同样会分配一个段给这个索引,但这是一个索引段了。查询段的信息可以通过数据字典: SELECT * FROM USER_SEGMENTS来获得。

(4)表空间: 包含段,区及块。表空间的数据物理上储存在其所在的数据文件中。一个数据库至少要有一个表空间。

当我们创建了一个表,即使我没有插入任何一行记录, ORACLE还是给它分配了8个块。 当然这个跟建表语句的INITIAL 参数及MINEXTENTS参数有关。 如:

STORAGE

INITIAL 64K

MINEXTENTS 1

MAXEXTENTS UNLIMITED

);

也就是说,在这个对象创建以后,ORACLE至少给它分配一个区,初始大小是64K,一个标准块的大小是8K,刚好是8个BLOCK.

二、高水线(High Water Mark)

1、官网说明如下

http://download.oracle.com/docs/cd/E11882_01/server.112/e16508/logical.htm#CNCPT89022

To manage space, Oracle Database tracks the state of blocks in the segment. The high water mark (HWM) is the point in a segment beyond which data blocks are unformatted and have never been used.

MSSM uses free lists to manage segment space. At table creation, no blocks in the segment are formatted. When a session first inserts rows into the table, the database searches the free list for usable blocks. If the database finds no usable blocks, then it preformats a group of blocks, places them on the free list, and begins inserting data into the blocks. In MSSM, a full table scan reads all blocks below the HWM.

ASSM does not use free lists and so must manage space differently. When a session first inserts data into a table, the database formats a single bitmap block instead of preformatting a group of blocks as in MSSM. The bitmap tracks the state of blocks in the segment, taking the place of the free list. The database uses the bitmap to find free blocks and then formats each block before filling it with data. ASSM spread out inserts among blocks to avoid concurrency issues.

Every data block in an ASSM segment is in one of the following states:

(1)Above the HWM

These blocks are unformatted and have never been used.

(2)Below the HWM

These blocks are in one of the following states:

(1)Allocated, but currently unformatted and unused

(2)Formatted and contain data

(3)Formatted and empty because the data was deleted

Figure 12-23 depicts an ASSM segment as a horizontal series of blocks. At table creation, the HWM is at the beginning of the segment on the left. Because no data has been inserted yet, all blocks in the segment are unformatted and never used.

Figure 12-23 HWM at Table Creation

Suppose that a transaction inserts rows into the segment. The database must allocate a group of blocks to hold the rows. The allocated blocks fall below the HWM. The database formats a bitmap block in this group to hold the metadata, but does not preformat the remaining blocks in the group.

In Figure 12-24, the blocks below the HWM are allocated, whereas blocks above the HWM are neither allocated or formatted. As inserts occur, the database can write to any block with available space. The low high water mark (low HWM) marks the point below which all blocks are known to be formatted because they either contain data or formerly contained data.

Figure 12-24 HWM and Low HWM

In Figure 12-25, the database chooses a block between the HWM and low HWM and writes to it. The database could have just as easily chosen any other block between the HWM and low HWM, or any block below the low HWM that had available space. In Figure 12-25, the blocks to either side of the newly filled block are unformatted.

Figure 12-25 HWM and Low HWM

The low HWM is important in a full table scan. Because blocks below the HWM are formatted only when used, some blocks could be unformatted, as in Figure 12-25. For this reason, the database reads the bitmap block to obtain the location of the low HWM. The database reads all blocks up to the low HWM because they are known to be formatted, and then carefully reads only the formatted blocks between the low HWM and the HWM.

Assume that a new transaction inserts rows into the table, but the bitmap indicates that insufficient free space exists under the HWM. In Figure 12-26, the database advances the HWM to the right, allocating a new group of unformatted blocks.

Figure 12-26 Advancing HWM and Low HWM

When the blocks between the HWM and low HWM are full, the HWM advances to the right and the low HWM advances to the location of the old HWM. As the database inserts data over time, the HWM continues to advance to the right, with the low HWM always trailing behind it. Unless you manually rebuild, truncate, or shrink the object, the HWM never retreats.

时间: 2024-12-01 16:18:42

Oracle高水位的知识的相关文章

Oracle高水位的测试实例

一.相关测试 (1)创建测试表 SQL> create table tt (id number): Table created. 此时表没有分析,是原始的数据,即8个数据块. SQL>SELECT segment_name,segment_type,blocks FROM dba_segments  WHERE segment_name='TT'; SEGMENT_NAME    SEGMENT_TYPE     BLOCKS --------------- --------------- -

ORACLE空间管理实验(五)块管理之ASSM下高水位的影响--删除和查询

高水位概念: 所有的oracle段(segments,在此,为了理解方便,建议把segment作为表的一个同义词) 都有一个在段内容纳数据的上限,我们把这个上限称为"high water mark"或HWM.这个HWM是一个标记,用来说明已经有多少没有使用的数据块分配给这个segment.HWM原则上HWM只会增大,不会缩小,即使将表中的数据全部删除,HWM还是为原值,由于这个特点,使HWM很象一个水库的历史最高水位,这也就是HWM的原始含义. 这个概念百度下一大把,可以参考: htt

MySQL DBA技术难度低为什么工资比Oracle高?

编辑手记:前几天在知乎上出现了一个很热的帖子,话题是"MySQL DBA技术难度低为什么工资比oracle高?",这个话题很快引起了热烈的讨论.从回帖的情况来看,大部分人几乎都默认了MySQL DBA工资的确高这个事实,那么原因是什么,我们节选MySQL专家刘伟的回帖跟大家分享. 以下是他回帖的原文: 主要有以下两个原因: 1.市场供需关系 2.技术要求相对高 这两个因素一直没有得到改善,导致现在市场的行情是:招MySQL DBA难,招称心的MySQL DBA就更难. 先说一个工资议价

明明技术难度更低,为何MySQL DBA工资比Oracle高?

前几天在知乎上出现了一个很热的帖子,话题是"MySQL DBA技术难度低为什么工资比oracle高?",这个话题很快引起了热烈的讨论.从回帖的情况来看,大部分人几乎都默认了MySQL DBA工资的确高这个事实,那么原因是什么,我们节选MySQL专家刘伟的回帖跟大家分享.以下是他回帖的原文: 原因分析 主要有以下两个原因: 市场供需关系 技术要求相对高 这两个因素一直没有得到改善,导致现在市场的行情是:招MySQL DBA难,招称心的MySQL DBA就更难.先说一个工资议价的常识,工资

Oracle高并发系列2:事务日志写入引发的Redo log风波

作者介绍 王鹏冲,平安科技数据库技术专家,浸淫数据库行业十多年,对Oracle数据库有浓厚兴趣,也对MySQL.MongoDB.Redis等数据库有一定架构和运维经验,目前正沉迷在PostgreSQL数据库与Oracle数据库的PK之中,重点在关系型数据库的分布式架构研究.   引言   关系型数据库强调事务的ACID特性,对于事务的持久性,主流的关系型数据库都是通过写事务日志来实现的.写数据是随机IO,写日志是顺序IO,常规的机械磁盘,随机IO比顺序IO要昂贵很多.所以虽然写日志同样要刷到磁盘

Oracle Data Guard 理论知识

Oracle Data Guard 理论知识   来源:Linux社区 作者:tianlesoftware       RAC,Data Gurad,Stream是Oracle高可用性体系中的三种工具,每个工具即可以独立应用,也可以相互配合.他们各自的侧重点不同,适用场景也不同.   RAC它的强项在于解决单点故障和负载均衡,因此RAC方案常用于7*24的核心系统,但RAC方案中的数据只有一份,尽管可以通过RAID等机制可以避免存储故障,但是数据本身是没有冗余的,容易形成单点故障.   Data

查找Oracle高消耗语句的方法

 这篇文章主要介绍了查找Oracle高消耗语句的方法,需要的朋友可以参考下 在运行下面的脚本之前需要先用生成AWR报告的SQL(程序脚本一般保存在$ORACLE_HOME下的rdbms/admin中,名称为awrrpt.sql,需要输入生成AWR报告的天数范围)找到开始和结束的snapshot编号:begin_snap和end_snap.  代码如下: <span style="font-size:18px;">set line 1000  set linesize 200

使用DB2DART降低DB2数据库管理表空间高水位标记

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;本文介绍如何通过使用 DB2DART 工具降低 DB2 数据库管理表空间的高水位标记.      对于 DB2 数据库管理(DMS)表空间的高水位标记(HWM)是指该表空间曾经使用到的最大数据页数.如果使用: db2 list tablespaces show detail 看到某个 DMS 表空间的已用页数低于高水位标记,则有可能通过如下方法降低高水位标记: 重组表

Oracle高可用概述(HA与RAC的关系解惑)

看到leonarding大神总结的有关Oracle高可用性的概述,之前开会的时候,有人也提到过Oracle HA.RAC等等,当时这些概念不是特别清楚,下来查过后感觉HA是一个概念,像RAC.Stream Replication等是一种HA的实现手段,现在又碰巧看到这篇总结,更加确信了这一点,凡事都要讲实力,都需要积累. 转自http://www.itpub.net/thread-1802376-1-1.html Oracle 高可用概述 1.你如何理解高可用的概念?         所谓的高可