中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

增加db_block_size能否提高I/O性能

發布時間:2021-11-08 10:58:23 來源:億速云 閱讀:165 作者:柒染 欄目:建站服務器

本篇文章給大家分享的是有關增加db_block_size能否提高I/O性能,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

        在一次性能調優交流中,聽到某專家介紹,在缺省db_block_size=8K的環境下,增加額外db block size=32K的表空間,然后把需要進行全表掃描的表(FTS)或索引(FIS)移到該表空間上,能提高全表/索引掃描的I/O性能。

       咋聽起來,好像挺有道理,db block size增加了,每個block包含的數據增加了, 在db_file_multiblock_read_count不變的情況下,db_block_size * db_file_multiblock_count值增大,每次I/O讀取的數據增加,所以I/O性能提高了。事實上這個是錯誤的觀念。

     在jonathan lewis "CBO Foundation"  第二章節對tablescan介紹了很清楚,以下是基于AIX5.3平臺下的oracle 10.2.0.1環境下進行測試:

 一、基本介紹

1、FTS Cost = 1 + HWM/dbf_mbrc =>dbf_mbrc=HWM/(cost-1)

2、缺省db_file_multiblock_read_count=16, db_block_size=8

3、創建test_32K的表空間,表空間的段管理是手工方式

       SQL>alter system set db_cache_size =3034M; (減少)

       SQL>alter system set dba_32k_cache_size=512M;

       SQL>create tablespace test_32K datafile

                  '/home/XXXX/oracle/oradataXXXX/test_32K' size 200M

                   blocksize 32K segment space management manual;

二、實驗

1、在正常的block size =8k創建表t1

         SQL>create table t1
                       pctfree 99
                       pctused 1
                    as
                      with generator as (
                         select    --+ materialize
                         rownum     id
                         from    all_objects
                         where    rownum <= 3000
                          )
                    select
                          /*+ ordered use_nl(v2) */
                      rownum                    id,
                      trunc(100 * dbms_random.normal)        val,
                      rpad('x',100)                padding
                   from
                        generator    v1,
                        generator    v2
                  where
                      rownum <= 10000
                      ;

2、對表t1進行統計分析

              begin
                    dbms_stats.gather_table_stats(
                      user,
                        't1',
                       cascade=>true,
                        estimate_percent=>null,
                        method_opt=>'for all columns size 1'
                          );
                     end;
                   /

3、計算該平臺不同的db_file_multiblock_read_count所對應著dbf_mbrc值

 alter session set events '10053 trace name context forever, level 2';

 alter session set db_file_multiblock_read_count=2;
 select /*+ nocpu_costing */ count(*) from t1;
-- Cost_io: 3836
-- #Blks:  10143
-- adjusted dbf_mbrc=HWM/(cost-1)=10143/(3836-1)=2.645

alter session set db_file_multiblock_read_count=4;
select /*+ nocpu_costing */ count(*) from t1;
-- Cost_io: 2431
-- #Blks:  10143
-- adjusted dbf_mbrc= 10143/(2431-1)=4.174

alter session set db_file_multiblock_read_count=8;
select /*+ nocpu_costing */ count(*) from t1;
--Cost_io: 1541
--#Blks:  10143
--adjusted dbf_mbrc= 10143/(1541-1)=6.586

alter session set db_file_multiblock_read_count=16;
select /*+ nocpu_costing */ count(*) from t1;
--Cost_io: 977
--#Blks:  10143
----adjusted dbf_mbrc= 10143/(977-1)=10.392

alter session set db_file_multiblock_read_count=32;
select /*+ nocpu_costing */ count(*) from t1;
--Cost_io: 620
--#Blks:  10143
----adjusted dbf_mbrc= 10143/(620-1)=16.386

alter session set events '10053 trace name context  off';

db_file_multiblock_read_count             Adjusted dbf_mbrc

                           2                                                2.645

                           4                                                4.174

                           8                                                6.586

                          16                                               10.392

                          32                                               16.386

一次的I/O讀取的大小=8K*16=128K

4、在db_block_size=32K的表空間創建測試表t1_32k

SQL> create table t1_32k
                pctfree 99
                pctused 1
           tablespace test_32K
           as
            with generator as (
                select    --+ materialize
                 rownum     id
                 from    all_objects
               where    rownum <= 3000
                )
            select
                 /*+ ordered use_nl(v2) */
                  rownum                    id,
                 trunc(100 * dbms_random.normal)        val,
                rpad('x',100)                padding
             from
                generator    v1,
                generator    v2
              where
                 rownum <= 10000
                ;

5、對t1_32k進行統計分析

6、計算全表掃描下的dbf_mrbc值

alter session set db_file_multiblock_read_count=16;
alter session set events '10053 trace name context forever, level 2';
select /*+ nocpu_costing */ count(*) from t1_32K;
alter session set events '10053 trace name context  off';

--Cost_io: 1199
--#Blks:  5000
--adjusted dbf_mbrc= 5000/(1199-1)=4.174

我們發現在db_block_size=32K的表中dbf_mbrc值等于步驟3 db_file_multiblock_read_count=4中的dbf_mbrc,這就意味著其執行塊讀取的時候不是db_file_multiblock_read_count=16而是值4。所以每次讀取的I/O應該是32K*4=128K,與db_block_size=8K db_file_multiblock_read_count=16每次I/O讀取的大小是一致的,并不會提高I/O。

另外,設置不同db block size主要的目的是為了數據遷移,并不是用于提高性能。

更新:

       瀏覽  http://richardfoote.wordpress.com/2008/03/20/store-indexes-in-a-larger-block-tablespace-the-multiblock-read-myth-part-ii-the-fly/ 中的comment部分,發現Richard Foote和Jonathan Lewis贊成將索引遷移更大的Block Size 表空間不會提高性能,Donald K.Burleson則反之。爭論相當激烈。

以上就是增加db_block_size能否提高I/O性能,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

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

AI

阜阳市| 偃师市| 临城县| 道孚县| 惠州市| 商城县| 信阳市| 怀远县| 交城县| 陇西县| 孝昌县| 漾濞| 通山县| 大名县| 蓬安县| 巴马| 舒兰市| 安阳市| 应城市| 汉寿县| 惠水县| 温宿县| 汉中市| 万山特区| 江山市| 安乡县| 阿巴嘎旗| 英山县| 交城县| 屏山县| 阿荣旗| 沙河市| 紫金县| 鸡泽县| 耒阳市| 板桥市| 犍为县| 农安县| 濮阳市| 哈巴河县| 平原县|