深入了解oracle的高水位 HWM

2021-06-05 11:41:41 字數 1840 閱讀 3211

說到

hwm,

我們首先要簡要的談談

oracle

的邏輯儲存管理

.我們知道

,oracle

在邏輯儲存上分

4個粒度

:表空間,段

,區和塊

.(1)塊:

是粒度最小的儲存單位

,現在標準的塊大小是

8k,oracle

每一次i/o

操作也是按塊來操作的

,也就是說當

oracle

從資料檔案讀資料時

,是讀取多少個塊

,而不是多少行.

(2)區:

由一系列相鄰的塊而組成

,這也是

oracle

空間分配的基本單位

,舉個例子來說

,當我們建立乙個表

pm_user時,

首先oracle

會分配一區的空間給這個表

,隨著不斷的

insert

資料到pm_user,

原來的這個區容不下插入的資料時

,oracle

是以區為單位進行擴充套件的

,也就是說再分配多少個區給

pm_user,

而不是多少個塊.

(3)段

:是由一系列的區所組成

,一般來說

,當建立乙個物件時(表

,索引),就會分配乙個段給這個物件

.所以從某種意義上來說

,段就是某種特定的資料.如

create table pm_user,

這個段就是資料段,而

create index on pm_user(name),oracle

同樣會分配乙個段給這個索引

,但這是乙個索引段了

.查詢段的資訊可以通過資料字典

:select

*from

user_segments

來獲得,

(4)表空間

:包含段

,區及塊

.表空間的資料物理上儲存在其所在的資料檔案中

.乙個資料庫至少要有乙個表空間

.ok,

我們現在回到

hwm上來,那麼

,什麼是高水位標記呢

?這就跟

oracle

的段空間管理相關了.(

一)oracle

用hwm

來界定乙個段中使用的塊和未使用的塊

.舉個例子來說

,當我們建立乙個表

:pt_sche_detail

時,oracle

就會為這個物件分配乙個段

.在這個段中

,即使我們未插入任何記錄

,也至少有乙個區被分配

,第乙個區的第乙個塊就稱為段頭

(segment heade),

段頭中就儲存了一些資訊,基中

hwm的資訊就儲存在此.此時

,因為第乙個區的第一塊用於儲存段頭的一些資訊

,雖然沒有儲存任何實際的記錄

,但也算是被使用,此時

hwm是位於第2個塊

.當我們不斷插入資料到

pm_user後,

第1個塊已經放不下後面新插入的資料,此時

,oracle

將高水位之上的塊用於

儲存新增資料,同時

,hwm

本身也向上移

.也就是說

,當我們不斷插入資料時

,hwm

會往不斷上移,這樣

,在hwm之下的

,就表示使用過的塊

,hwm

之上的就表示已分配但從未使用過的塊

.

深入了解css的行高Line Height屬性

什麼是行間距?古時候我們使用印刷機來出來文字。印刷出來的每個字,都位於獨立的乙個塊中。行間距,即傳說中控制兩行文字垂直距離的東東。在css中,line height被用來控制行與行之間垂直距離。不過,行間距與半行間距,還是取決於css中的line height。那麼,如何來使用line height...

js typeof 的深入了解

我們都知道,typeof的作用是辨別傳入值的型別 我們需要注意的是 typeof的返回值統一都是全小寫的字串 下面列舉了typeof函式可以識別的型別以及場景 話不多說,直接進入 undefined 1 未定義物件將會被識別為underfined 2 乙個函式沒有返回值 boolean false ...

ORACLE的高水位線

這幾天一直在看乙個問題,乙個統計程式突然統計的資料量不正常了,從頭查到尾,覺得程式和配置都沒有問題,但就是統計出的結果不對,但發現有乙個程式的入庫檔案還存留很多,推斷可能是資料還沒入庫完全,但是什麼導致的呢,以為是那部分檔案太大,入庫太慢,但後來發現還是資料庫的問題,乙個temp表查詢空表都花費很長...