Oracle12.2怎樣啟用數(shù)據(jù)庫對象的In-Memory轉(zhuǎn)換填充

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

通江網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。成都創(chuàng)新互聯(lián)公司于2013年創(chuàng)立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)公司。

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

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

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

將磁盤上現(xiàn)有數(shù)據(jù)轉(zhuǎn)換為列格式的填充與通常所說的列式填充不同,后者只是將新數(shù)據(jù)加載到IM列存儲中。 因?yàn)镮MCU是只讀結(jié)構(gòu),所以當(dāng)行更改時(shí),Oracle數(shù)據(jù)庫不會自動填充它們。而前者,則是數(shù)據(jù)庫記錄事務(wù)日志中的行修改記錄,然后創(chuàng)建新的IMCU作為IM的一部分。

列式轉(zhuǎn)換填充的原理

可以指定數(shù)據(jù)庫在實(shí)例啟動時(shí)或訪問INMEMORY對象時(shí)填充IM列存儲中的對象。列式轉(zhuǎn)換填充算法在單實(shí)例數(shù)據(jù)庫和RAC中有所區(qū)別。

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

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

1、按需填充

默認(rèn)情況下,INMEMORY PRIORITY參數(shù)設(shè)置為NONE。 在這種情況下,數(shù)據(jù)庫僅在通過全表掃描訪問對象時(shí)填充該對象。 如果對象永遠(yuǎn)不被訪問,或者只有通過索引掃描訪問或者通過rowid進(jìn)行訪問,則不會發(fā)生轉(zhuǎn)換。

2、基于優(yōu)先級的填充

當(dāng)PRIORITY設(shè)置為非NONE值時(shí),Oracle數(shù)據(jù)庫將使用內(nèi)部管理的優(yōu)先級隊(duì)列自動填充對象。 在這種情況下,全掃描不是填充的必要條件。

基于優(yōu)先級的填充過程如下:

a、在數(shù)據(jù)庫實(shí)例重新啟動后,自動填充IM列中的柱狀數(shù)據(jù)

b、基于指定優(yōu)先級的INMEMORY對象的隊(duì)列人口

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

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

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

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

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

Oracle 12.2怎樣啟用數(shù)據(jù)庫對象的In-Memory轉(zhuǎn)換填充

2、顯示查詢的執(zhí)行計(jì)劃:

Oracle 12.2怎樣啟用數(shù)據(jù)庫對象的In-Memory轉(zhuǎn)換填充

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

Oracle 12.2怎樣啟用數(shù)據(jù)庫對象的In-Memory轉(zhuǎn)換填充

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

Oracle 12.2怎樣啟用數(shù)據(jù)庫對象的In-Memory轉(zhuǎn)換填充

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

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

Oracle 12.2怎樣啟用數(shù)據(jù)庫對象的In-Memory轉(zhuǎn)換填充

6、查詢游標(biāo)顯示數(shù)據(jù)庫執(zhí)行完整掃描并訪問IM列存儲:

Oracle 12.2怎樣啟用數(shù)據(jù)庫對象的In-Memory轉(zhuǎn)換填充

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

Oracle 12.2怎樣啟用數(shù)據(jù)庫對象的In-Memory轉(zhuǎn)換填充

8、DBA_FEATURE_USAGE_STATISTICS視圖確認(rèn)數(shù)據(jù)庫使用IM列存儲來檢索結(jié)果:

Oracle 12.2怎樣啟用數(shù)據(jù)庫對象的In-Memory轉(zhuǎn)換填充

后臺進(jìn)程如何填充IMCU

在填充期間,數(shù)據(jù)庫以其行格式從磁盤讀取數(shù)據(jù),樞轉(zhuǎn)行以創(chuàng)建列,然后將數(shù)據(jù)壓縮為內(nèi)存中壓縮單元(IMCU)。

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

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

列式填充控制

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

INMEMORY子句

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

要啟用或禁用IM列存儲的對象,請?jiān)谝韵氯魏握Z句中指定INMEMORY子句:

1、CREATE TABLESPACE or ALTER TABLESPACE

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

2、CREATE TABLE or ALTER TABLE

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

3、CREATE MATERIALIZED VIEW or ALTER MATERIALIZED VIEW

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

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

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

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

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

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

使用LONG或LONG RAW數(shù)據(jù)類型的列

擴(kuò)展數(shù)據(jù)類型列

對表進(jìn)行列式填充

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

列式填充的優(yōu)先級選項(xiàng)

為IM列存儲啟用數(shù)據(jù)庫對象時(shí),可以啟用Oracle數(shù)據(jù)庫來控制對象在IM列存儲中的填充(默認(rèn)),也可以指定確定對象的優(yōu)先級。

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

下表說明了支持的優(yōu)先級。

Oracle 12.2怎樣啟用數(shù)據(jù)庫對象的In-Memory轉(zhuǎn)換填充

看完上述內(nèi)容,你們對Oracle 12.2怎樣啟用數(shù)據(jù)庫對象的In-Memory轉(zhuǎn)換填充有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。

網(wǎng)站名稱:Oracle12.2怎樣啟用數(shù)據(jù)庫對象的In-Memory轉(zhuǎn)換填充
新聞來源:http://muchs.cn/article2/picsic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、App設(shè)計(jì)、網(wǎng)站導(dǎo)航ChatGPT、網(wǎng)站排名外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)