欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

混合列壓縮(HCC)在OLAP及OLTP場(chǎng)景中的測(cè)試

作者:李敏,云和恩墨交付工程師。

創(chuàng)新互聯(lián)公司主要從事成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)岐山,十年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18980820575

Oracle Corp最先在11G R2中引入了EHCC(Exadata Hybrid Columnar Compression),早先限制較多,體現(xiàn)的方式是這里的E,指的是exadata一體機(jī)上才可以啟用這個(gè)特性。作為exadata上眾多優(yōu)秀特性里一個(gè)重要部分,和smart scan或者說cell offloading對(duì)比,雖然EHCC能帶來極大的空間壓縮,但是EHCC還是需要DBA額外做一些操作,甚至多個(gè)場(chǎng)景的評(píng)估來決定是否要采用。

EHCC(或者說后來因使用平臺(tái)更多,在除了exadata之外,在Oracle corp的zfssa、Pillar Axiom、SuperCluster、ODA上都支持了之后改成了叫做HCC)本質(zhì)上解決的問題是IO問題,也可以說,是為了在CPU及IO間平衡,拿算力換空間,目前看來在大部分場(chǎng)景下,這個(gè)交換是非常超值的,幾倍、十幾倍甚至幾十倍的壓縮率都很常見,如果這部分?jǐn)?shù)據(jù)是冷數(shù)據(jù),這個(gè)特性看起來是完美的。

但是有些時(shí)候不是這樣的。本文從HCC的多個(gè)方面選出一兩個(gè)點(diǎn)來簡(jiǎn)述這個(gè)特性給DBA帶來的第一個(gè)直觀感受。

混合列壓縮(HCC)在OLAP及OLTP場(chǎng)景中的測(cè)試

測(cè)試環(huán)境的DB版本

混合列壓縮(HCC)在OLAP及OLTP場(chǎng)景中的測(cè)試


首先,準(zhǔn)備環(huán)境

創(chuàng)建表空間,這里選擇多個(gè)小文件的方式。

CREATE SMALLFILE TABLESPACE EHCCTBS
    DATAFILE
        '/ehccfs/ORA19C/ora19pdb1/EHCCTBS_001.DBF' SIZE 10485760 AUTOEXTEND ON NEXT 1048576 MAXSIZE 10737418240 ,
        '/ehccfs/ORA19C/ora19pdb1/EHCCTBS_002.DBF' SIZE 10485760 AUTOEXTEND ON NEXT 1048576 MAXSIZE 10737418240 ,
        '/ehccfs/ORA19C/ora19pdb1/EHCCTBS_003.DBF' SIZE 10485760 AUTOEXTEND ON NEXT 1048576 MAXSIZE 10737418240 ,
        '/ehccfs/ORA19C/ora19pdb1/EHCCTBS_004.DBF' SIZE 10485760 AUTOEXTEND ON NEXT 1048576 MAXSIZE 10737418240
    BLOCKSIZE 8192
    FORCE LOGGING
    DEFAULT COLUMN STORE NO COMPRESS  NO INMEMORY
    ONLINE
    SEGMENT SPACE MANAGEMENT AUTO
    EXTENT MANAGEMENT LOCAL AUTOALLOCATE;
(左右滑動(dòng),查看完整代碼,下同)


這里選擇NO Compress方式創(chuàng)建表空間,不把壓縮作為表空間的屬性,而用CREATE TABLE的方式來指定壓縮屬性。

[ora19c@dm01db06 ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Sun Mar 24 10:07:02 2019
Version 19.2.0.0.0

Copyright (c) 1982, 2018, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.2.0.0.0

SQL> create user hr identified by welcome1 default tablespace ehcctbs;

User created.

SQL> grant dba to hr;

Grant succeeded.

SQL> create table hr.big_table_no_ehcc as select * from dba_objects;

Table created.

為了體現(xiàn)壓縮率的差距,我創(chuàng)建了一個(gè)360M的未壓縮表,來對(duì)比8種壓縮方式下的壓縮率。

[ora19c@dm01db06 ~]$ sqlplus hr/welcome1@ora19pdb1

SQL*Plus: Release 19.0.0.0.0 - Production on Sun Mar 24 10:07:28 2019
Version 19.2.0.0.0

Copyright (c) 1982, 2018, Oracle.  All rights reserved.

Last Successful login time: Sun Mar 24 2019 09:36:33 +08:00

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.2.0.0.0

SQL>

SQL> insert into BIG_TABLE_NO_EHCC select * from BIG_TABLE_NO_EHCC;

72360 rows created.

SQL> /

144720 rows created.

SQL> /

289440 rows created.

SQL> /

578880 rows created.

SQL> insert into BIG_TABLE_NO_EHCC select * from BIG_TABLE_NO_EHCC;

1157760 rows created.

SQL> commit;

SQL> select count(*) from BIG_TABLE_NO_EHCC;

  COUNT(*)
----------
   2315520

SQL> col OWNER for a15
SQL> col SEGMENT_NAME for a40
SQL> select OWNER,SEGMENT_NAME,BYTES/1048576 SIZE_MB  from dba_segments where SEGMENT_NAME like ('%EHCC%');

OWNER           SEGMENT_NAME                                SIZE_MB
--------------- ---------------------------------------- ----------
HR              BIG_TABLE_NO_EHCC                               360

之后基于這個(gè)基礎(chǔ)表,創(chuàng)建8個(gè)不同HCC壓縮方式的表。這里我timing on了,但是只做參考,因?yàn)閞edo是200M的,導(dǎo)致CTAS的時(shí)候有一次歸檔行為,IO受影響,可能有一次的時(shí)間受影響。

SQL> create table EHCC_QUERY_HIGH compress for query high tablespace ehcctbs as select * from big_table_no_ehcc ;

Table created.

Elapsed: 00:00:10.61
SQL> create table EHCC_QUERY_LOW compress for query low tablespace ehcctbs as select * from big_table_no_ehcc ;

Table created.

Elapsed: 00:00:21.33
SQL> create table EHCC_ARCHIVE_HIGH compress for archive high tablespace ehcctbs as select * from big_table_no_ehcc ;

Table created.

Elapsed: 00:00:38.75
SQL> create table EHCC_ARCHIVE_LOW compress for archive low  tablespace ehcctbs as select * from big_table_no_ehcc ;

Table created.

Elapsed: 00:00:11.07
SQL> create table EHCC_QUERY_HIGH_LOCKING compress for query high  row level locking tablespace ehcctbs as select * from big_table_no_ehcc ;

Table created.

Elapsed: 00:00:09.46
SQL> create table EHCC_QUERY_LOW_LOCKING compress for query low row level locking tablespace ehcctbs as select * from big_table_no_ehcc ;

Table created.

Elapsed: 00:00:12.35
SQL> create table EHCC_ARCHIVE_HIGH_LOCKING compress for archive high  row level locking tablespace ehcctbs as select * from big_table_no_ehcc ;

Table created.

Elapsed: 00:00:33.90
SQL> create table EHCC_ARCHIVE_LOW_LOCKING compress for archive low  row level locking tablespace ehcctbs as select * from big_table_no_ehcc ;

Table created.

Elapsed: 00:00:17.50


然后查看這些不同壓縮方式下的對(duì)象大小。注意這里的LOCKING,指的是row level locking。


混合列壓縮(HCC)在OLAP及OLTP場(chǎng)景中的測(cè)試

除了第一個(gè)基礎(chǔ)表之外,每?jī)蓚€(gè)相鄰對(duì)象的壓縮區(qū)別是row level locking方式的區(qū)別。

hr.BIG_TABLE_NO_EHCC這個(gè)表是基于PDB的dba_objects來創(chuàng)建的一個(gè)28列的表,實(shí)話說,這個(gè)表做HCC跑分測(cè)試并不適合,但是依然能在archive high模式下,達(dá)到驚人的360/15=24倍的壓縮率。


混合列壓縮(HCC)在OLAP及OLTP場(chǎng)景中的測(cè)試

那么,對(duì)未壓縮的基礎(chǔ)表強(qiáng)制全掃,再對(duì)最高壓縮的archive high的表做強(qiáng)制全掃的話,哪個(gè)快呢?


混合列壓縮(HCC)在OLAP及OLTP場(chǎng)景中的測(cè)試


多次測(cè)試,結(jié)果出乎意料。16秒跟1秒下的差距,這是沒在exadata上的結(jié)果,如果集合exadata的cell offloading,可以詳見OLAP下,HCC的表現(xiàn)了。

Oracle對(duì)自家產(chǎn)品間的協(xié)同和優(yōu)化令人目瞪狗呆。

14336,一級(jí)位圖塊
*** 2019-03-24T17:14:51.182266+08:00 (ORA19PDB1(3))
Start dump data blocks tsn: 6 file#:24 minblk 14336 maxblk 14336
............................
............................
............................
Dump of Second Level Bitmap Block
   number: 9       nfree: 1       ffree: 8      pdba:     0x06003802
   Inc #: 0 Objd: 72974 Flag: 3
  opcode:0

這里提示到:

   Second Level Bitmap block DBAs
   --------------------------------------------------------
   DBA 1:   0x06003801
二級(jí)位圖塊,正好是一級(jí)14336的下一個(gè)塊:

混合列壓縮(HCC)在OLAP及OLTP場(chǎng)景中的測(cè)試

下面是這個(gè)二級(jí)位圖塊的信息:

Dump of Second Level Bitmap Block
   number: 9       nfree: 1       ffree: 8      pdba:     0x06003802
   Inc #: 0 Objd: 72974 Flag: 3
  opcode:0
 xid:
  L1 Ranges :
  --------------------------------------------------------
   0x06003800  Free: 1 Inst: 1
   0x06003840  Free: 1 Inst: 1
   0x05803400  Free: 1 Inst: 1
   0x06003880  Free: 1 Inst: 1
   0x05803480  Free: 1 Inst: 1
   0x06003900  Free: 1 Inst: 1
   0x05803500  Free: 1 Inst: 1
   0x06003980  Free: 1 Inst: 1
   0x05803580  Free: 7 Inst: 1

  --------------------------------------------------------
End dump data blocks tsn: 6 file#: 24 minblk 14337 maxblk 14337

看樣子是沒什么東西。似乎是表太小沒用到。

14338塊信息不多。這里看14339塊。

block_row_dump:
tab 0, row 0, @0x30
tl: 8016 fb: --H-F--N lb: 0x0  cc: 1
nrid:  0x06003804.0
col  0: [8004]
Compression level: 04 (Archive High)
 Length of CU row: 8004
kdzhrh: ------PC- CBLK: 0 Start Slot: 00
 NUMP: 22
 PNUM: 00 POFF: 7774 PRID: 0x06003804.0
 PNUM: 01 POFF: 15790 PRID: 0x06003805.0
 PNUM: 02 POFF: 23806 PRID: 0x06003806.0
 PNUM: 03 POFF: 31822 PRID: 0x06003807.0
 PNUM: 04 POFF: 39838 PRID: 0x06003808.0
 PNUM: 05 POFF: 47854 PRID: 0x06003809.0
 PNUM: 06 POFF: 55870 PRID: 0x0600380a.0
 PNUM: 07 POFF: 63886 PRID: 0x0600380b.0
 PNUM: 08 POFF: 71902 PRID: 0x0600380c.0
 PNUM: 09 POFF: 79918 PRID: 0x0600380d.0
 PNUM: 10 POFF: 87934 PRID: 0x0600380e.0
 PNUM: 11 POFF: 95950 PRID: 0x0600380f.0
 PNUM: 12 POFF: 103966 PRID: 0x06003810.0
 PNUM: 13 POFF: 111982 PRID: 0x06003811.0
 PNUM: 14 POFF: 119998 PRID: 0x06003812.0
 PNUM: 15 POFF: 128014 PRID: 0x06003813.0
 PNUM: 16 POFF: 136030 PRID: 0x06003814.0
 PNUM: 17 POFF: 144046 PRID: 0x06003815.0
 PNUM: 18 POFF: 152062 PRID: 0x06003816.0
 PNUM: 19 POFF: 160078 PRID: 0x06003817.0
 PNUM: 20 POFF: 168094 PRID: 0x06003818.0
 PNUM: 21 POFF: 176110 PRID: 0x06003819.0
*---------
CU header:
CU version: 0   CU magic number: 0x4b445a30
CU checksum: 0xbdbe82d3
CU total length: 180160
CU flags: NC-U-CRD-OP
ncols: 26
nrows: 32759
algo: 0
CU decomp length: 175939   len/value length: 4332401
row pieces per row: 1
num deleted rows: 0
START_CU:

這部分信息較多,我按照個(gè)人的理解來說說。

tl: 8016 fb: –H-F–N這里的H是CUhead的意思。fb是flag byte,F(xiàn)是first的意思,P是previous,N是next。此外我沒有dump最后一個(gè)row piece,按道理來說,最后一個(gè)0x06003819塊上的fb會(huì)顯示L的,代表last。(事實(shí)上我事后dump了,顯示的LP)


nrid:   0x06003804.0這里nrid是next row piece id的意思,這里的數(shù)據(jù)是nrid:   0x06003804.0,換成10進(jìn)制是rdba: 0x6003804(100677636) file: 24 ,block : 14340,24號(hào)文件14340塊。


按照道理來說,14340塊上顯示的是類似PN,沒有H的tag。


Compression level: 04 (Archive High)是HCC壓縮格式。


NUMP: 22是代表這個(gè)CU里有多少個(gè)row piece,這里顯示的是22個(gè)row piece,而根據(jù)這個(gè)地址看,一個(gè)row piece就是一個(gè)block,我理解是代表,這個(gè)CU里有22個(gè)block。


CU checksum: 0xbdbe82d3是這個(gè)CU的校驗(yàn)值。


nrows: 32759,代表這個(gè)CU里存了32759行,這是一個(gè)非常大的數(shù)值。

接下來,我們dump那個(gè)第二個(gè)CU塊,14340塊。

Start dump data blocks tsn: 6 file#:24 minblk 14340 maxblk 14340
..........................
..........................
..........................
block_row_dump:
tab 0, row 0, @0x1f
tl: 8033 fb: ------PN lb: 0x0  cc: 1
nrid:  0x06003805.0
col  0: [8021]
Compression level: 04 (Archive High)
 Length of CU row: 8021
kdzhrh: ---------START_CU:

如上文標(biāo)識(shí)的一樣,這是PN。

這里將分別按照insert,update,delete這三個(gè)DML來測(cè)試在HCC情況下相關(guān)的可能的壓縮轉(zhuǎn)換情況,ROWID變化情況,鎖范圍情況來闡述。

在DML場(chǎng)景中,對(duì)比兩張表,非壓縮表和壓縮表。壓縮表的所有行,都在一個(gè)CU的一個(gè)塊里。

如下是創(chuàng)建的表,有一張普通表,一張archive high的表,以及一張row level locking的archive high表。他們分配的大小是一樣的,這不代表在extents內(nèi)占的空間是一樣大,而是因?yàn)楸沓跏挤峙涞膃xtents是8個(gè)block,每個(gè)block是8192 bytes。這個(gè)是ASSM的分配規(guī)律。

SQL> create table dml_test_no_ehcc as select * from dba_objects where rownum < 100;

Table created.

SQL> update dml_test_no_ehcc set OBJECT_ID=rownum;

99 rows updated.

SQL> commit;

Commit complete.

SQL> create table DML_TEST_ARCHIVE_HIGH compress for archive high tablespace ehcctbs as select * from dml_test_no_ehcc ;

Table created.

SQL> create table DML_TEST_ARCHIVE_HIGH_LOCKING compress for archive high  row level locking tablespace ehcctbs as select * from dml_test_no_ehcc ;

Table created.

col OWNER for a15
col SEGMENT_NAME for a40

SQL> select s.OWNER,s.SEGMENT_NAME,s.BYTES/1024 SIZE_MB,t.COMPRESS_FOR  from dba_segments s,dba_tables t where s.SEGMENT_NAME like ('DML_TEST_%') and s.owner=t.owner and s.segment_name =  t.table_name order by 2;

OWNER           SEGMENT_NAME                                SIZE_MB COMPRESS_FOR
--------------- ---------------------------------------- ---------- ----------------------------------
SYS             DML_TEST_ARCHIVE_HIGH                            64 ARCHIVE HIGH
SYS             DML_TEST_ARCHIVE_HIGH_LOCKING                    64 ARCHIVE HIGH ROW LEVEL LOCKING
SYS             DML_TEST_NO_EHCC          

接下來,需要證明這兩個(gè)HCC的表的所有行都在同一個(gè)CU里。

混合列壓縮(HCC)在OLAP及OLTP場(chǎng)景中的測(cè)試

混合列壓縮(HCC)在OLAP及OLTP場(chǎng)景中的測(cè)試

這個(gè)時(shí)候,除去一級(jí)和二級(jí)位圖塊,dump每個(gè)表的第四個(gè)塊,就是說DML_TEST_ARCHIVE_HIGH在24號(hào)文件的19203塊,和DML_TEST_ARCHIVE_HIGH_LOCKING在24號(hào)文件的19211塊,從dump信息中查看是否所有行在一個(gè)CU內(nèi)。

19203塊,信息如下,可以看到fb標(biāo)識(shí)為Head,有F,有L,代表這個(gè)CU既是first也是last的CU,并且這個(gè)CU里的nrows 是99行。這都跟構(gòu)造的環(huán)境一致。

data_block_dump,data header at 0x9b95a07c
===============
tsiz: 0x1f80
hsiz: 0x1c
pbl: 0x9b95a07c
     76543210
flag=-0------
ntab=1
nrow=1
frre=-1
fsbo=0x1c
fseo=0x1830
avsp=0x1814
tosp=0x1814
        r0_9ir2=0x0
        mec_kdbh9ir2=0x0
                      76543210
        shcf_kdbh9ir2=----------
                  76543210
        flag_9ir2=--R-----      Archive compression: Y
                fcls_9ir2[0]={ }
0x16:pti[0]     nrow=1  offs=0
0x1a:pri[0]     offs=0x1830
block_row_dump:
tab 0, row 0, @0x1830
tl: 1872 fb: --H-FL-- lb: 0x0  cc: 1
col  0: [1866]
Compression level: 04 (Archive High)
 Length of CU row: 1866
kdzhrh: --------- Start Slot: 00
*---------
CU header:
CU version: 0   CU magic number: 0x4b445a30
CU checksum: 0x24a713c2
CU total length: 1854
CU flags: NC-U-CRD-OP
ncols: 26
nrows: 99
algo: 0
CU decomp length: 1715   len/value length: 10614
row pieces per row: 1
num deleted rows: 0
START_CU:

同樣,另外一個(gè)表的19211塊也是得到一樣的構(gòu)造信息。

data_block_dump,data header at 0x7fda7a65e07c
===============
tsiz: 0x1f80
hsiz: 0x1c
pbl: 0x7fda7a65e07c
     76543210
flag=-0------
ntab=1
nrow=1
frre=-1
fsbo=0x1c
fseo=0x17c9
avsp=0x17ad
tosp=0x17ad
        r0_9ir2=0x0
        mec_kdbh9ir2=0x0
                      76543210
        shcf_kdbh9ir2=----------
                  76543210
        flag_9ir2=--R-----      Archive compression: Y
                fcls_9ir2[0]={ }
0x16:pti[0]     nrow=1  offs=0
0x1a:pri[0]     offs=0x17c9
block_row_dump:
tab 0, row 0, @0x17c9
tl: 1975 fb: --H-FL-- lb: 0x0  cc: 1
col  0: [1969]
Compression level: 04 (Archive High)
 Length of CU row: 1969
kdzhrh: --------L Start Slot: 00
num lock bits: 8
locked rows:
*---------
CU header:
CU version: 0   CU magic number: 0x4b445a30
CU checksum: 0x24a713c2
CU total length: 1854
CU flags: NC-U-CRD-OP
ncols: 26
nrows: 99
algo: 0
CU decomp length: 1715   len/value length: 10614
row pieces per row: 1
num deleted rows: 0
START_CU:

OLTP下的第一個(gè)場(chǎng)景測(cè)試,我們暫定為insert測(cè)試,這里只針對(duì)HCC的表做測(cè)試,分別測(cè)試append方式和常規(guī)插入方式在HCC表及row level locking的HCC表下的表現(xiàn)。

根據(jù)文檔顯示,對(duì)已經(jīng)HCC壓縮的表的插入,如果是常規(guī)插入,新插入的數(shù)據(jù)將不會(huì)被壓縮,只有以append等直接路徑的方式插入,才會(huì)繼續(xù)壓縮。這里除了需要驗(yàn)證這個(gè)事情之外,還需要驗(yàn)證下其他會(huì)話的并發(fā)插入會(huì)不會(huì)受影響,如果被阻塞,需要測(cè)試row level locking方式的HCC表是否受影響。

SQL> select distinct(sid) from v$mystat;

       SID
----------
       147

SQL> insert into DML_TEST_ARCHIVE_HIGH select * from DML_TEST_NO_EHCC;

99 rows created.

SQL> 

SQL> select distinct(sid) from v$mystat;

       SID
----------
       269

SQL> insert into DML_TEST_ARCHIVE_HIGH select * from DML_TEST_NO_EHCC;

99 rows created.

SQL> 

這個(gè)測(cè)試為了證明沒有row level locking屬性的HCC表的插入,不會(huì)鎖定單個(gè)CU。

但是,這個(gè)測(cè)試測(cè)下來,有一個(gè)問題,就是對(duì)于沒有使用append方式的插入,如果插入的數(shù)據(jù),當(dāng)前已經(jīng)壓縮的CU可以容下,那么插入的數(shù)據(jù)是會(huì)被壓縮的,如果以沒有append方式插入的數(shù)據(jù),當(dāng)前CU放置不下,那么在接下來的分配中,超出當(dāng)前CU的數(shù)據(jù)是特么的不會(huì)被壓縮的。

這個(gè)又一次出乎意料。

  COUNT(*) COMPRESSION_TYPE
---------- ---------------------------------------------------------------
        10 COMP_NOCOMPRESS
    323126 COMP_FOR_ARCHIVE_HIGH

SQL> 

OLTP下的第二個(gè)場(chǎng)景,我們測(cè)試DELETE,這個(gè)我也不知道測(cè)試什么,我暫且對(duì)HCC的表,做兩個(gè)會(huì)話的刪除測(cè)試。

我測(cè)試了兩次,如果這個(gè)表沒有被壓縮,我分別在兩個(gè)會(huì)話中,刪除object_id=1及2的數(shù)據(jù),不提交,是互相不會(huì)阻塞的。

但是,如果這個(gè)表是HCC壓縮,并且沒有開啟row level locking的話,如果在會(huì)話1刪除object_id=1的條目,在會(huì)話2中刪除object_id=2的條目,會(huì)話2的刪除,是會(huì)被會(huì)話1阻塞的。

混合列壓縮(HCC)在OLAP及OLTP場(chǎng)景中的測(cè)試

這也側(cè)面驗(yàn)證了,普通HCC表,鎖的最小單元是CU,而不是像普通表那樣,受影響的是被其他會(huì)話已經(jīng)影響到的行。不過仔細(xì)一想,道理似乎是一樣的。


那么,我前面鋪墊了那么多row level locking的HCC特性這個(gè)時(shí)候就發(fā)揮作用了。這個(gè)特性是在12c的HCC中引入了。Oracle corp可能發(fā)現(xiàn)對(duì)整個(gè)CU加鎖影響的范圍太大了,為了對(duì)OLTP友好,引入了row level locking的HCC的特性,雖然這可能帶來一點(diǎn)點(diǎn)的壓縮損耗,在前文能看到壓縮損耗的情況。


接下來,對(duì)那張創(chuàng)建好的row level locking的表做不同會(huì)話的object_id=1和object_id=2的記錄的刪除。

混合列壓縮(HCC)在OLAP及OLTP場(chǎng)景中的測(cè)試

混合列壓縮(HCC)在OLAP及OLTP場(chǎng)景中的測(cè)試

可以看到添加了row level locking屬性的HCC表的同個(gè)CU內(nèi)的刪除是互不影響的。

OLTP中,第三個(gè)場(chǎng)景測(cè)試,我們將測(cè)試update,據(jù)前文DELETE測(cè)試,可以顯然的知道,HCC中不帶row level locking的壓縮是會(huì)被其他update阻塞的。帶了的話,如果針對(duì)同一個(gè)CU內(nèi)不同記錄操作,是不會(huì)影響的。如果是同一個(gè)CU內(nèi)的相同記錄操作,那會(huì)是怎么樣呢:)。

UPDATE部分,這里重點(diǎn)測(cè)試的是rowid變化情況。

重新生成環(huán)境:

SQL> drop table DML_TEST_ARCHIVE_HIGH purge; 

Table dropped.

SQL> drop table DML_TEST_ARCHIVE_HIGH_LOCKING purge;

Table dropped.

SQL> drop table DML_TEST_NO_EHCC purge;

Table dropped.

這次表創(chuàng)建的更小。

SQL> create table dml_test_no_ehcc as select * from dba_objects where rownum < 10;

Table created.

SQL> create table DML_TEST_ARCHIVE_HIGH compress for archive high tablespace ehcctbs as select * from dml_test_no_ehcc ;

Table created.

SQL> create table DML_TEST_ARCHIVE_HIGH_LOCKING compress for archive high  row level locking tablespace ehcctbs as select * from dml_test_no_ehcc ;

Table created.

SQL> 
SQL> col OWNER for a15
SQL> col SEGMENT_NAME for a40
SQL> select s.OWNER,s.SEGMENT_NAME,s.BYTES/1024 SIZE_MB,t.COMPRESS_FOR  from dba_segments s,dba_tables t where s.SEGMENT_NAME like ('DML_TEST_%') and s.owner=t.owner and s.segment_name =  t.table_name order by 2;

OWNER           SEGMENT_NAME                                SIZE_MB COMPRESS_FOR
--------------- ---------------------------------------- ---------- ------------------------------------------------------------------------------------------
HR              DML_TEST_ARCHIVE_HIGH                            64 ARCHIVE HIGH
HR              DML_TEST_ARCHIVE_HIGH_LOCKING                    64 ARCHIVE HIGH ROW LEVEL LOCKING
HR              DML_TEST_NO_EHCC                                 64

SQL> 

查看其中HCC表的rowid及塊號(hào)分布情況。

SQL> select rowid,object_name,dbms_rowid.rowid_block_number(rowid) from DML_TEST_ARCHIVE_HIGH;

ROWID              OBJECT_NAME                              DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)
------------------ ---------------------------------------- ------------------------------------
AAAR0vAAWAAAEWLAAA I_FILE#_BLOCK#                                                          17803
AAAR0vAAWAAAEWLAAB I_OBJ3                                                                  17803
AAAR0vAAWAAAEWLAAC I_TS1                                                                   17803
AAAR0vAAWAAAEWLAAD I_CON1                                                                  17803
AAAR0vAAWAAAEWLAAE IND$                                                                    17803
AAAR0vAAWAAAEWLAAF CDEF$                                                                   17803
AAAR0vAAWAAAEWLAAG C_TS#                                                                   17803
AAAR0vAAWAAAEWLAAH I_CCOL2                                                                 17803
AAAR0vAAWAAAEWLAAI I_PROXY_DATA$                                                           17803

9 rows selected.

這里可以通過DBMS_COMPRESSION.GET_COMPRESSION_TYPE來確認(rèn)某行數(shù)據(jù)的壓縮方式:

SQL> select DBMS_COMPRESSION.GET_COMPRESSION_TYPE('HR','DML_TEST_ARCHIVE_HIGH','AAAR0vAAWAAAEWLAAA') from dual;

DBMS_COMPRESSION.GET_COMPRESSION_TYPE('HR','DML_TEST_ARCHIVE_HIGH','AAAR0VAAWAAAEWLAAA')
----------------------------------------------------------------------------------------
                                                                                      16

參考如下:

COMP_NOCOMPRESS CONSTANT NUMBER := 1;
COMP_FOR_OLTP CONSTANT NUMBER := 2;
COMP_FOR_QUERY_HIGH CONSTANT NUMBER := 4;
COMP_FOR_QUERY_LOW CONSTANT NUMBER := 8;
COMP_FOR_ARCHIVE_HIGH CONSTANT NUMBER := 16;
COMP_FOR_ARCHIVE_LOW CONSTANT NUMBER := 32;

COMP_RATIO_MINROWS CONSTANT NUMBER := 1000000;
COMP_RATIO_ALLROWS CONSTANT NUMBER := -1;

可以得知,16就是創(chuàng)建時(shí)候的ARCHIVE_HIGH壓縮方式。

之后,對(duì)這個(gè)表,進(jìn)行更新操作。

SQL> update DML_TEST_ARCHIVE_HIGH set OBJECT_NAME=OBJECT_NAME||'MINOR';

9 rows updated.


再次查看這個(gè)表的rowid及塊號(hào):


SQL> select rowid,object_name,dbms_rowid.rowid_block_number(rowid) from DML_TEST_ARCHIVE_HIGH;

ROWID              OBJECT_NAME                              DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)
------------------ ---------------------------------------- ------------------------------------
AAAR0vAAWAAAEWOAAA I_FILE#_BLOCK#MINOR                                                     17806
AAAR0vAAWAAAEWOAAB I_OBJ3MINOR                                                             17806
AAAR0vAAWAAAEWOAAC I_TS1MINOR                                                              17806
AAAR0vAAWAAAEWOAAD I_CON1MINOR                                                             17806
AAAR0vAAWAAAEWOAAE IND$MINOR                                                               17806
AAAR0vAAWAAAEWOAAF CDEF$MINOR                                                              17806
AAAR0vAAWAAAEWOAAG C_TS#MINOR                                                              17806
AAAR0vAAWAAAEWOAAH I_CCOL2MINOR                                                            17806
AAAR0vAAWAAAEWOAAI I_PROXY_DATA$MINOR                                                      17806

9 rows selected.

可以看到,rowid,block id,都發(fā)生了變化,所以證明對(duì)CU內(nèi)的數(shù)據(jù)更新,這里有解壓,移動(dòng)到別的block更新的操作。

那么更新后的數(shù)據(jù)還是壓縮的嗎?顯然,不是了。

SQL> select DBMS_COMPRESSION.GET_COMPRESSION_TYPE('HR','DML_TEST_ARCHIVE_HIGH',rowid) from DML_TEST_ARCHIVE_HIGH;

DBMS_COMPRESSION.GET_COMPRESSION_TYPE('HR','DML_TEST_ARCHIVE_HIGH',ROWID)
-------------------------------------------------------------------------
                                                                        1
                                                                        1
                                                                        1
                                                                        1
                                                                        1
                                                                        1
                                                                        1
                                                                        1
                                                                        1

9 rows selected.

壓縮為1,1代表的是COMP_NOCOMPRESS CONSTANT NUMBER := 1,不壓縮。所以,除了insert,update也會(huì)帶來解壓不壓縮的情況。在執(zhí)行update操作時(shí),db會(huì)將列壓縮的數(shù)據(jù),轉(zhuǎn)換為行來操作,并且在操作完成之后,并不會(huì)再次壓縮。

如果需要重新讓這些復(fù)蘇的數(shù)據(jù)重新壓縮,需要顯式的move這些表。

剛才注意到,更新會(huì)導(dǎo)致壓縮數(shù)據(jù)的rowid發(fā)生變化,那么,能不能不變化?答案是可以的。

隱含參數(shù):

混合列壓縮(HCC)在OLAP及OLTP場(chǎng)景中的測(cè)試

混合列壓縮(HCC)在OLAP及OLTP場(chǎng)景中的測(cè)試

然后我們復(fù)現(xiàn)上面的更新操作:

混合列壓縮(HCC)在OLAP及OLTP場(chǎng)景中的測(cè)試

第三部分,上面OLAP及OLTP的這么多測(cè)試均是單個(gè)場(chǎng)景的測(cè)試,那么HCC在實(shí)際場(chǎng)景下使用起來跟不帶HCC的環(huán)境對(duì)比起來怎么樣?這里想起了swingbench。

swingbench不多介紹。但是有個(gè)問題,swingbench的對(duì)象是自己程序生成的,不能人工干預(yù)創(chuàng)建對(duì)象用的參數(shù),除非你逐個(gè)去改那些腳本。

其實(shí)有個(gè)簡(jiǎn)單的辦法,就是創(chuàng)建測(cè)試表空間的時(shí)候,給表空間加上HCC參數(shù)。這里只做query high場(chǎng)景下不帶row level locking及帶row level locking跟非HCC場(chǎng)景下的壓力測(cè)試。考慮到客戶環(huán)境不是會(huì)串行的,所以我使用4個(gè)會(huì)話來測(cè)試。測(cè)試基準(zhǔn)數(shù)據(jù)量為0.5GB,要測(cè)三場(chǎng)。

首先生成三個(gè)承載表空間,一個(gè)是帶了HCC屬性,一個(gè)是帶了HCC的row level locking屬性,一個(gè)是不帶HCC屬性。

SQL> CREATE SMALLFILE TABLESPACE SOE_EHCC_TBS
  2      DATAFILE
  3          '/ehccfs/ORA19C/ora19pdb1/SOE_EHCC_TBS_001.DBF' SIZE 10485760 AUTOEXTEND ON NEXT 1048576 MAXSIZE 10737418240
  4      BLOCKSIZE 8192
  5      FORCE LOGGING
  6      DEFAULT COLUMN STORE COMPRESS FOR query HIGH NO INMEMORY
  7      ONLINE
  8      SEGMENT SPACE MANAGEMENT AUTO
  9      EXTENT MANAGEMENT LOCAL AUTOALLOCATE;

Tablespace created.


SQL> CREATE SMALLFILE TABLESPACE SOE_NO_EHCC_TBS
  2      DATAFILE
  3          '/ehccfs/ORA19C/ora19pdb1/SOE_NO_EHCC_TBS_001.DBF' SIZE 10485760 AUTOEXTEND ON NEXT 1048576 MAXSIZE 10737418240
  4      BLOCKSIZE 8192
  5      FORCE LOGGING
  6      DEFAULT COLUMN STORE COMPRESS FOR query HIGH NO INMEMORY
  7      ONLINE
  8      SEGMENT SPACE MANAGEMENT AUTO
  9      EXTENT MANAGEMENT LOCAL AUTOALLOCATE;

Tablespace created.

SQL> CREATE SMALLFILE TABLESPACE SOE_EHCC_ROW_LOCKING_TBS
  2      DATAFILE
  3          '/ehccfs/ORA19C/ora19pdb1/SOE_EHCC_ROW_LOCKING_TBS_001.DBF' SIZE 10485760 AUTOEXTEND ON NEXT 1048576 MAXSIZE 10737418240
  4      BLOCKSIZE 8192
  5      FORCE LOGGING
  6      DEFAULT COLUMN STORE COMPRESS FOR query HIGH ROW LEVEL LOCKING NO INMEMORY
  7      ONLINE
  8      SEGMENT SPACE MANAGEMENT AUTO
  9      EXTENT MANAGEMENT LOCAL AUTOALLOCATE;

Tablespace created.

混合列壓縮(HCC)在OLAP及OLTP場(chǎng)景中的測(cè)試

混合列壓縮(HCC)在OLAP及OLTP場(chǎng)景中的測(cè)試

最終能看到生成的數(shù)據(jù)如下:

混合列壓縮(HCC)在OLAP及OLTP場(chǎng)景中的測(cè)試

待數(shù)據(jù)生成完成之后,開始swingbench的測(cè)試。這里停止了測(cè)試。因?yàn)樵趕wingbench的默認(rèn)場(chǎng)景中,有大量的DML操作,而跟我上文測(cè)試的結(jié)果,隨著業(yè)務(wù)時(shí)間的推移,大部分表都會(huì)因DML而變成非壓縮表。所以DML測(cè)試的意義不大。唯一可能有測(cè)試意義的就是OLAP了。這個(gè)修改swingbench配置此處省略。

混合列壓縮(HCC)在OLAP及OLTP場(chǎng)景中的測(cè)試

本文名稱:混合列壓縮(HCC)在OLAP及OLTP場(chǎng)景中的測(cè)試
分享地址:http://aaarwkj.com/article14/ggpcge.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、營銷型網(wǎng)站建設(shè)、微信公眾號(hào)外貿(mào)網(wǎng)站建設(shè)、微信小程序、商城網(wǎng)站

廣告

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

網(wǎng)站優(yōu)化排名
亚洲一区二区三区小蜜桃| 国产高清自拍视频在线一区| 在线观看成人激情视频| 伊在人天堂亚洲香蕉精品区| 久久av天堂在线观看| 国产成人色污在线观看| 国产高清白丝免费在线观看| 欧美日韩专区一区二区三区| 亚洲国产精品二区三区| 快播av手机在线播放| 国产真人免费作爱视频网站 | 日韩精品在线第一视频| 国产麻豆剧传媒精品av| 亚洲综合色日本日b网| 亚洲精品一区国产精品av| 亚洲热妇热女久久精品| 婷婷久久五月综合激情| 亚洲日本一区二区高清在线| 男女裸体做爰一进一出视频| 日韩精品人妻一区二区三区免费| 欧美 日韩一区二区在线| 久久精品国产亚洲av高清一区| 午夜视频在线播放一区二区三区| 亚洲一区二区三区国色天香| 久久久国产精品视频一区| 少妇高潮毛片免费看高潮| 免费人成黄页网站在线播放国产| 日本人妻成人免费大片| 亚洲男人av天堂东京热| 成人午夜福利影院在线| 欧美精品一区影片在线观看| 亚洲精品午夜福利网| 国产亚洲理论片在线观看| 一区二区高清免费日本| 国产,欧美,日韩,日日骚| 在线观看免费视频成人播放| 国产剧情av一区在线观看| 日本不卡二区高清三区| 成人爱爱视频在线免费观看| 亚洲av在线观看午夜| 日本一区二区三区三州免费观看 |