成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

怎么理解Oracle中INITRANS和MAXTRANS參數(shù)

怎么理解Oracle中INITRANS和MAXTRANS參數(shù),很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

創(chuàng)新互聯(lián)建站長(zhǎng)期為千余家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為海州企業(yè)提供專業(yè)的網(wǎng)站設(shè)計(jì)、做網(wǎng)站,海州網(wǎng)站改版等技術(shù)服務(wù)。擁有10多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。

INITRANS:
INITRANS 指的是一個(gè) BLOCK 上初始預(yù)分配給并行交易控制的空間 (ITLs)
( 當(dāng) BLOCK 上某筆 ROW 被交易更新鎖定時(shí),會(huì)在 BLOCK header ITL allocate 一個(gè)鎖,當(dāng)下一個(gè)交易要更新同一筆 row 時(shí),就會(huì)發(fā)現(xiàn)他已經(jīng)被先前的交易持有鎖了,會(huì)先去檢查該交易是否 active? 如果是,后來(lái)的該筆交易就會(huì)被 blocking ,等待 ) 如果一個(gè)表格需要同時(shí)有大量交易存取,你應(yīng)該設(shè)定 INITRANS 大一點(diǎn),可以減少 ITL 還要?jiǎng)討B(tài)擴(kuò)充的 Overhead 。

For tables INITRANS defaults to 1 for indexes 2

MAXTRANS:
MAXTRANS 指的是如果 INITRANS 空間不夠用了,就會(huì)自動(dòng)擴(kuò)展 ITL ,直到最大值也就是 MAXTRANS 值為止,預(yù)設(shè)是 255 。但是,如果 BLOCK 空間已經(jīng)不足,也有可能無(wú)法持續(xù)擴(kuò)充到 255 個(gè) ITS 空間喔。

每個(gè)塊都有一個(gè)塊首部。這個(gè)塊首部中有一個(gè)事務(wù)表。事務(wù)表中會(huì)建立一些條目來(lái)描述哪些事務(wù)將塊上的哪些行/元素鎖定。這個(gè)事務(wù)表的初始大小由對(duì)象的INITRANS 設(shè)置指定。對(duì)于表,這個(gè)值默認(rèn)為1(索引的INITRANS 默認(rèn)為2)。事務(wù)表會(huì)根據(jù)需要?jiǎng)討B(tài)擴(kuò)展,最大達(dá)到MAXTRANS 個(gè)條目(假設(shè)塊上有足夠的自由空間)。所分配的每個(gè)事務(wù)條目需要占用塊首部中的23~24 字節(jié)的存儲(chǔ)空間。注意,對(duì)于Oracle 10g,MAXTRANS 則會(huì)忽略,所有段的MAXTRANS 都是255。

也就是說(shuō),如果某個(gè)事物鎖定了這個(gè)塊的數(shù)據(jù),則會(huì)在這個(gè)地方記錄事務(wù)的標(biāo)識(shí),當(dāng)然那個(gè)事務(wù)要先看一下這個(gè)地方是不是已經(jīng)有人占用了,如果有,則去看看那個(gè)事務(wù)是否為活動(dòng)狀態(tài)。如果不活動(dòng),比如已經(jīng)提交或者回滾,則可以覆蓋這個(gè)地方。如果活動(dòng),則需要等待(閂的作用)

所以,如果有大量的并發(fā)訪問(wèn)使用的這個(gè)塊,則參數(shù)不能太小,否則資源競(jìng)爭(zhēng)將導(dǎo)致系統(tǒng)并發(fā)性能下降。

測(cè)試了一下ORACLE 并發(fā)事務(wù)的時(shí)候的塊分配和ITL 管理,
略去大部分的測(cè)試過(guò)程,大概的結(jié)果小結(jié)如下:
1. INITRANS =1 時(shí) 并發(fā)多個(gè)INSERT 事務(wù)(本次測(cè)試最多5個(gè))的時(shí)候并不會(huì)由于ITL的爭(zhēng)用而等待組塞,ORACLE 采取的策略是每個(gè)INSERT事物已經(jīng)操作完成,屬于不活動(dòng)事物,只等待commit或者rollback,這樣各個(gè)會(huì)話之間就不會(huì)產(chǎn)生沖突,除非段沒(méi)有多余的塊(次種情況與本次的主題無(wú)關(guān)).

2.INITRANS =1 時(shí) 并發(fā)多個(gè)UPDATE事務(wù)(本次測(cè)試最多7個(gè))的時(shí)候也不會(huì)由于ITL的爭(zhēng)用而導(dǎo)致等待產(chǎn)生,此時(shí)ORACLE除了使用默認(rèn)的ITL之外,另外動(dòng)態(tài)擴(kuò)展所需要的ITL,緊緊在非常極端的情況下才會(huì)出現(xiàn)等待,(當(dāng)然應(yīng)用層面的死鎖或等待與本主題無(wú)關(guān))。
1) 該BLOCK沒(méi)有FREE空間了,注意FREE參數(shù)的設(shè)置不能太小。
2) 該塊使用的ITL總數(shù),超過(guò)該塊允許的ITL的最大值min(round(block_size*0.5/24) - 2 ,255) 。
   要達(dá)到這樣的極端情況實(shí)際的生產(chǎn)情況是很難的,應(yīng)該比業(yè)務(wù)SQL的死鎖出現(xiàn)的概率更小。

小結(jié):創(chuàng)建表的時(shí)候除非已經(jīng)清楚,大部分的情況下沒(méi)有必要調(diào)整INITRANS參數(shù),通常1-4以下足夠用了,INITRANS 設(shè)置非常大的時(shí)候ORACLE 有出現(xiàn)壞塊的BUG,另外FREE 參數(shù)倒是要注意不能隨意改小,除非你已經(jīng)很清楚更改的后果.


SQL>  create table xx (x number) storage(initial 64k next 64k) initrans 2;

Table created.

SQL>
SQL> create table a as select * from xx;

Table created.

SQL> select dbms_rowid.rowid_relative_fno(rowid) file#, dbms_rowid.rowid_block_number(rowid) block# from xx;

no rows selected

SQL> INSERT INTO XX SELECT 11 FROM DUAL;

1 row created.

SQL> select SEGMENT_NAME,EXTENT_ID,BLOCKS,BYTES from user_extents where segment_name ='XX';

SEGMENT_NAME     EXTENT_ID     BLOCKS      BYTES
--------------- ---------- ---------- ----------
XX                       0          8      65536

SQL> select TABLE_NAME,STATUS,PCT_FREE,PCT_USED,INI_TRANS,MAX_TRANS,INITIAL_EXTENT,NEXT_EXTENT,MIN_EXTENTS,MAX_EXTENTS,PCT_INCREASE from user_tables where table_name='XX';

TABLE_NAME                     STATUS     PCT_FREE   PCT_USED  INI_TRANS  MAX_TRANS INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS PCT_INCREASE
------------------------------ -------- ---------- ---------- ---------- ---------- -------------- ----------- ----------- ----------- ------------
XX                             VALID            10         40          2        255          65536       65536           1  2147483645

SQL>

SQL> INSERT INTO a SELECT 11 FROM DUAL;

1 row created.

SQL> commit;

Commit complete.

SQL> select TABLE_NAME,STATUS,PCT_FREE,PCT_USED,INI_TRANS,MAX_TRANS,INITIAL_EXTENT,NEXT_EXTENT,MIN_EXTENTS,MAX_EXTENTS,PCT_INCREASE from user_tables where table_name='A';

TABLE_NAME                     STATUS     PCT_FREE   PCT_USED  INI_TRANS  MAX_TRANS INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS PCT_INCREASE
------------------------------ -------- ---------- ---------- ---------- ---------- -------------- ----------- ----------- ----------- ------------
A                              VALID            10         40          1        255          65536     1048576           1  2147483645

SQL> select SEGMENT_NAME,EXTENT_ID,BLOCKS,BYTES from user_extents where segment_name ='A';

SEGMENT_NAME     EXTENT_ID     BLOCKS      BYTES
--------------- ---------- ---------- ----------
A                        0          8      65536


SQL>  INSERT INTO XX SELECT 12 FROM DUAL;

1 row created.

SQL> INSERT INTO a SELECT 12 FROM DUAL;

1 row created.

SQL> select x ,dbms_rowid.rowid_relative_fno(rowid) file#, dbms_rowid.rowid_block_number(rowid) block# from xx;

         X      FILE#     BLOCK#
---------- ---------- ----------
        11          1      94665
        12          1      94665

SQL> select x ,dbms_rowid.rowid_relative_fno(rowid) file#, dbms_rowid.rowid_block_number(rowid) block# from a;

         X      FILE#     BLOCK#
---------- ---------- ----------
        11          1     102801
        12          1     102801

SQL> INSERT INTO XX SELECT 13 from dual;

1 row created.

SQL> INSERT INTO a SELECT 13 FROM DUAL;

1 row created.

SQL>  select x ,dbms_rowid.rowid_relative_fno(rowid) file#, dbms_rowid.rowid_block_number(rowid) block# from xx;

         X      FILE#     BLOCK#
---------- ---------- ----------
        11          1      94665
        12          1      94665
        13          1      94665

SQL> select x ,dbms_rowid.rowid_relative_fno(rowid) file#, dbms_rowid.rowid_block_number(rowid) block# from a;

         X      FILE#     BLOCK#
---------- ---------- ----------
        11          1     102801
        12          1     102801
        13          1     102801

SQL> INSERT INTO XX SELECT 14 from dual;

1 row created.

SQL> INSERT INTO a SELECT 14  FROM DUAL;

1 row created.

SQL>  select x ,dbms_rowid.rowid_relative_fno(rowid) file#, dbms_rowid.rowid_block_number(rowid) block# from xx;

         X      FILE#     BLOCK#
---------- ---------- ----------
        11          1      94665
        12          1      94665
        13          1      94665
        14          1      94665

SQL>
SQL>  select x ,dbms_rowid.rowid_relative_fno(rowid) file#, dbms_rowid.rowid_block_number(rowid) block# from a;

         X      FILE#     BLOCK#
---------- ---------- ----------
        11          1     102801
        12          1     102801
        13          1     102801
        14          1     102801

SQL> commit;

Commit complete.

SQL> INSERT INTO XX SELECT 15 from dual;

1 row created.

SQL> INSERT INTO a SELECT 15 from dual;

1 row created.

SQL> INSERT INTO XX SELECT 16 from dual;

1 row created.

SQL> INSERT INTO a SELECT 16 from dual;

1 row created.

SQL> commit;

Commit complete.

SQL> select x ,dbms_rowid.rowid_relative_fno(rowid) file#, dbms_rowid.rowid_block_number(rowid) block# from xx;

         X      FILE#     BLOCK#
---------- ---------- ----------
        11          1      94665
        12          1      94665
        13          1      94665
        14          1      94665
        15          1      94665
        16          1      94665

6 rows selected.

SQL> select x ,dbms_rowid.rowid_relative_fno(rowid) file#, dbms_rowid.rowid_block_number(rowid) block# from a;

         X      FILE#     BLOCK#
---------- ---------- ----------
        11          1     102801
        12          1     102801
        13          1     102801
        14          1     102801
        15          1     102801
        16          1     102801

6 rows selected.

SQL>    
SQL> select x ,dbms_rowid.rowid_relative_fno(rowid) file#, dbms_rowid.rowid_block_number(rowid) block# from xx;

         X      FILE#     BLOCK#
---------- ---------- ----------
        11          1      94665
        12          1      94665
        13          1      94665
        14          1      94665
        15          1      94665
        16          1      94665
        21          1      94665
        22          1      94665
        23          1      94665
        24          1      94665
        25          1      94665

         X      FILE#     BLOCK#
---------- ---------- ----------
        26          1      94665
        31          1      94665
        32          1      94665
        33          1      94665
        34          1      94665
        35          1      94665
        36          1      94665

18 rows selected.

SQL> select x ,dbms_rowid.rowid_relative_fno(rowid) file#, dbms_rowid.rowid_block_number(rowid) block# from a;

         X      FILE#     BLOCK#
---------- ---------- ----------
        11          1     102801
        12          1     102801
        13          1     102801
        14          1     102801
        15          1     102801
        16          1     102801
        21          1     102801
        22          1     102801
        23          1     102801
        24          1     102801
        25          1     102801

         X      FILE#     BLOCK#
---------- ---------- ----------
        26          1     102801
        31          1     102801
        32          1     102801
        33          1     102801
        34          1     102801
        35          1     102801
        36          1     102801

18 rows selected.


另開(kāi)一個(gè)窗口插入:
INSERT INTO XX SELECT 21 from dual;
INSERT INTO XX SELECT 22 from dual;
INSERT INTO XX SELECT 23 from dual;
INSERT INTO XX SELECT 24 from dual;
INSERT INTO XX SELECT 25 from dual;
INSERT INTO XX SELECT 26 from dual;

INSERT INTO A SELECT 21 from dual;
INSERT INTO A SELECT 22 from dual;
INSERT INTO A SELECT 23 from dual;
INSERT INTO A SELECT 24 from dual;
INSERT INTO A SELECT 25 from dual;
INSERT INTO A SELECT 26 from dual;

commit;

再開(kāi)一個(gè)窗口插入:
INSERT INTO XX SELECT 31 from dual;
INSERT INTO XX SELECT 32 from dual;
INSERT INTO XX SELECT 33 from dual;
INSERT INTO XX SELECT 34 from dual;
INSERT INTO XX SELECT 35 from dual;
INSERT INTO XX SELECT 36 from dual;

INSERT INTO A SELECT 31 from dual;
INSERT INTO A SELECT 32 from dual;
INSERT INTO A SELECT 33 from dual;
INSERT INTO A SELECT 34 from dual;
INSERT INTO A SELECT 35 from dual;
INSERT INTO A SELECT 36 from dual;

commit;

查詢:
SQL> select x ,dbms_rowid.rowid_relative_fno(rowid) file#, dbms_rowid.rowid_block_number(rowid) block# from xx;

         X      FILE#     BLOCK#
---------- ---------- ----------
        11          1      94665
        12          1      94665
        13          1      94665
        14          1      94665
        15          1      94665
        16          1      94665
        21          1      94665
        22          1      94665
        23          1      94665
        24          1      94665
        25          1      94665

         X      FILE#     BLOCK#
---------- ---------- ----------
        26          1      94665
        31          1      94665
        32          1      94665
        33          1      94665
        34          1      94665
        35          1      94665
        36          1      94665

18 rows selected.

SQL> select x ,dbms_rowid.rowid_relative_fno(rowid) file#, dbms_rowid.rowid_block_number(rowid) block# from a;

         X      FILE#     BLOCK#
---------- ---------- ----------
        11          1     102801
        12          1     102801
        13          1     102801
        14          1     102801
        15          1     102801
        16          1     102801
        21          1     102801
        22          1     102801
        23          1     102801
        24          1     102801
        25          1     102801

         X      FILE#     BLOCK#
---------- ---------- ----------
        26          1     102801
        31          1     102801
        32          1     102801
        33          1     102801
        34          1     102801
        35          1     102801
        36          1     102801

18 rows selected.

SQL> select TABLE_NAME,STATUS,PCT_FREE,PCT_USED,INI_TRANS,MAX_TRANS,INITIAL_EXTENT,NEXT_EXTENT,MIN_EXTENTS,MAX_EXTENTS,PCT_INCREASE from user_tables where table_NAME IN('XX','A');

TABLE_NAME                     STATUS     PCT_FREE   PCT_USED  INI_TRANS  MAX_TRANS INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS PCT_INCREASE
------------------------------ -------- ---------- ---------- ---------- ---------- -------------- ----------- ----------- ----------- ------------
A                              VALID            10         40          1        255          65536     1048576           1  2147483645
XX                             VALID            10         40          2        255          65536       65536           1  2147483645

SQL>       
SQL> select OWNER,INDEX_NAME,TABLE_OWNER,TABLE_NAME,UNIQUENESS,INI_TRANS,MAX_TRANS,INITIAL_EXTENT,NEXT_EXTENT,MIN_EXTENTS,MAX_EXTENTS,PCT_INCREASE,PCT_FREE,STATUS from dba_indexes where table_owner='SYS' and table_name IN('XX','A');

OWNER      INDEX_NAME TABLE_OWNE TABLE_NAME UNIQUENES  INI_TRANS  MAX_TRANS INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS PCT_INCREASE   PCT_FREE STATUS
---------- ---------- ---------- ---------- --------- ---------- ---------- -------------- ----------- ----------- ----------- ------------ ---------- --------
SYS        IDX_XX     SYS        XX         NONUNIQUE          2        255          65536     1048576           1  2147483645                      10 VALID
SYS        IDX_A      SYS        A          NONUNIQUE          2        255          65536     1048576           1  2147483645                      10 VALID

SQL>    

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。

分享名稱:怎么理解Oracle中INITRANS和MAXTRANS參數(shù)
網(wǎng)頁(yè)地址:http://jinyejixie.com/article26/ppjgjg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、App開(kāi)發(fā)企業(yè)網(wǎng)站制作、動(dòng)態(tài)網(wǎng)站手機(jī)網(wǎng)站建設(shè)、標(biāo)簽優(yōu)化

廣告

聲明:本網(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í)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司
阿鲁科尔沁旗| 大宁县| 平谷区| 广元市| 邯郸市| 嘉善县| 丹阳市| 马公市| 平罗县| 崇信县| 永定县| 涿州市| 尼玛县| 富锦市| 宜君县| 乌拉特中旗| 抚顺市| 梧州市| 隆林| 长沙县| 高邑县| 武隆县| 牙克石市| 凯里市| 理塘县| 青神县| 息烽县| 贡嘎县| 高要市| 资兴市| 浏阳市| 泾川县| 成都市| 绥宁县| 屏南县| 通化县| 桓仁| 玛多县| 平远县| 襄城县| 乡宁县|