溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Oracle 12.2怎樣啟用數據庫對象的In-Memory轉換填充

發布時間:2021-11-29 10:30:35 來源:億速云 閱讀:270 作者:柒染 欄目:數據庫

今天就跟大家聊聊有關Oracle 12.2怎樣啟用數據庫對象的In-Memory轉換填充,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

所謂數據庫的列式轉換填充,就是數據庫從磁盤讀取現有的行格式數據,將其轉換為列格式,然后再存儲到IM列存儲中的過程。將數據庫對象填充到列式存儲會極大地提高訪問效率。只有具有In-Memory屬性的對象才能夠做轉換填充。

啟用對象的列式填充的目的

IM列存儲不會自動將數據庫中的所有對象加載到IM列存儲中。如果不使用DDL將任何對象指定為INMEMORY,則IM列存儲將保持為空。 將用戶指定的In-Memory對象的行轉換為列格式是必需的,以便它們可用于分析查詢。

將磁盤上現有數據轉換為列格式的填充與通常所說的列式填充不同,后者只是將新數據加載到IM列存儲中。 因為IMCU是只讀結構,所以當行更改時,Oracle數據庫不會自動填充它們。而前者,則是數據庫記錄事務日志中的行修改記錄,然后創建新的IMCU作為IM的一部分。

列式轉換填充的原理

可以指定數據庫在實例啟動時或訪問INMEMORY對象時填充IM列存儲中的對象。 列式轉換填充算法在單實例數據庫和RAC中有所區別。

DDL語句包括一個INMEMORY PRIORITY子句,為子句隊列提供更多的控制。

優先級設置適用于整個表,分區或子分區,而不適用于不同的列子集。 在對象上設置INMEMORY屬性意味著此對象是IM列存儲中的填充的候選項。 這并不意味著數據庫會立即填充該對象。 Oracle數據庫管理優先級如下:

1、按需填充

默認情況下,INMEMORY PRIORITY參數設置為NONE。 在這種情況下,數據庫僅在通過全表掃描訪問對象時填充該對象。 如果對象永遠不被訪問,或者只有通過索引掃描訪問或者通過rowid進行訪問,則不會發生轉換。

2、基于優先級的填充

當PRIORITY設置為非NONE值時,Oracle數據庫將使用內部管理的優先級隊列自動填充對象。 在這種情況下,全掃描不是填充的必要條件。

基于優先級的填充過程如下:

a、在數據庫實例重新啟動后,自動填充IM列中的柱狀數據

b、基于指定優先級的INMEMORY對象的隊列人口

例如,使用INMEMORY PRIORITY CRITICAL更改的表優先于使用INMEMORY PRIORITY HIGH更改的表,該表依次優先于使用INMEMORY PRIORITY LOW更改的表。 如果IM列存儲空間不足,則Oracle數據庫在空間可用之前不會填充其他對象。

c、等待從ALTER TABLE或ALTER MATERIALIZED VIEW語句返回,直到對象的更改記錄在IM列存儲中

在IM列存儲中填充一個段后,數據庫僅在段被刪除或移動時才將其推離,或者使用NO INMEMORY屬性更新段。 可以手動或通過ADO策略驅逐細分。

在完成此示例之前,必須為數據庫啟用IM列存儲。

1、以管理員身份登錄數據庫,然后查詢客戶表,如下所示:

Oracle 12.2怎樣啟用數據庫對象的In-Memory轉換填充

2、顯示查詢的執行計劃:

Oracle 12.2怎樣啟用數據庫對象的In-Memory轉換填充

3、在IM列存儲中啟用sh.customers表的填充:

Oracle 12.2怎樣啟用數據庫對象的In-Memory轉換填充

4、要確定sh.customers表中的數據是否已在IM列存儲中填充,請執行以下查詢(包括樣本輸出):

Oracle 12.2怎樣啟用數據庫對象的In-Memory轉換填充

在這種情況下,由于sh.customers表尚未被掃描,因此在IM列存儲中不會填充任何片段。

5、使用與步驟1中相同的語句查詢sh.customers:

Oracle 12.2怎樣啟用數據庫對象的In-Memory轉換填充

6、查詢游標顯示數據庫執行完整掃描并訪問IM列存儲:

Oracle 12.2怎樣啟用數據庫對象的In-Memory轉換填充

7、再次查詢V$IM_SEGMENTS(包括樣本輸出):

Oracle 12.2怎樣啟用數據庫對象的In-Memory轉換填充

8、DBA_FEATURE_USAGE_STATISTICS視圖確認數據庫使用IM列存儲來檢索結果:

Oracle 12.2怎樣啟用數據庫對象的In-Memory轉換填充

后臺進程如何填充IMCU

在填充期間,數據庫以其行格式從磁盤讀取數據,樞轉行以創建列,然后將數據壓縮為內存中壓縮單元(IMCU)。

工作進程(Wnnn)填充IM列存儲中的數據。 每個工作進程在對象的數據庫塊的子集上運行。 人口是一種流式傳輸機制,同時壓縮數據并將其轉換為柱狀格式。

INMEMORY_MAX_POPULATE_SERVERS初始化參數指定要用于IM列存儲群體的***工作進程數。 默認情況下,該設置是CPU_COUNT的一半。 將此參數設置為適合您的環境的值。 更多的工作進程導致填充增長,但會占用更多的CPU資源。 更少的工作進程導致人口減少,這降低了CPU開銷。

列式填充控制

使用數據定義語言(DDL)語句中的INMEMORY子句來指定哪些對象有資格進入IM列存儲。 可以啟用表空間,表,分區和物化視圖。

INMEMORY子句

INMEMORY是一個段級屬性,而不是列級屬性。 但是可以將INMEMORY屬性應用于特定對象中的列的子集。

要啟用或禁用IM列存儲的對象,請在以下任何語句中指定INMEMORY子句:

1、CREATE TABLESPACE or ALTER TABLESPACE

默認情況下,表空間中的所有表和實例化視圖都對IM列存儲啟用。 表空間中的單個表和實例化視圖可能具有不同的INMEMORY屬性。 單個數據庫對象的屬性將覆蓋表空間的屬性。

2、CREATE TABLE or ALTER TABLE

默認情況下,IM列存儲填充表中的所有非虛擬列。 您可以指定表的全部或一部分列。 例如,您可以將oe.product_information中的weight_class和catalog_url列從資格中排除。 對于分區表,您可以填充IM列存儲中的全部或一部分分區。 默認情況下,對于分區表,所有表分區都將繼承INMEMORY屬性。

3、CREATE MATERIALIZED VIEW or ALTER MATERIALIZED VIEW

對于分區實體化視圖,可以填充IM列存儲中的所有或一部分分區。

DBA_TABLES視圖中的INMEMORY列指示哪些表具有INMEMORY屬性設置(ENABLED)或未設置(DISABLED)。

以下對象不符合IM列存儲中的填充資格:

索引;索引組織表;哈希集群;由SYS用戶擁有并存儲在SYSTEM或SYSAUX表空間中的對象。

如果為IM列存儲啟用了表,并且它包含以下任何類型的列,則這些列將不會在IM列存儲中填充:

行列(varrays,嵌套表列和行外LOB)

使用LONG或LONG RAW數據類型的列

擴展數據類型列

對表進行列式填充

假設以用戶sh連接到數據庫。 可以使用默認壓縮級別FOR QUERY LOW(參見“內存中壓縮”),為IM列存儲中的用戶表啟用客戶表:

列式填充的優先級選項

為IM列存儲啟用數據庫對象時,可以啟用Oracle數據庫來控制對象在IM列存儲中的填充(默認),也可以指定確定對象的優先級。

Oracle SQL包括一個INMEMORY PRIORITY子句,為群體提供了對隊列的更多控制。 例如,在填充其他數據庫對象的數據之前,填充數據庫對象的數據可能更重要或更不重要。

下表說明了支持的優先級。

Oracle 12.2怎樣啟用數據庫對象的In-Memory轉換填充

看完上述內容,你們對Oracle 12.2怎樣啟用數據庫對象的In-Memory轉換填充有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女