婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > oracle分區表之hash分區表的使用及擴展

oracle分區表之hash分區表的使用及擴展

熱門標簽:外呼線路外顯本地號碼 word地圖標注方向 征服者火車站地圖標注 美圖秀秀地圖標注 阿爾巴尼亞地圖標注app 人工智能地圖標注自己能做嗎 百度地圖標注素材 開封智能外呼系統廠家 征服眼公司地圖標注

Hash分區是通過對分區鍵運用Hash算法從而決定數據的分區歸屬。使用Hash分區有什么優點呢?

常用的分區表所具有的優點:如提高數據可用行,減少管理負擔,改善語句性能等優點,hash分區同樣擁有。此外,由于Hash分區表是按分區鍵的hash計算結果來決定其分區的,而特定的分區鍵其hash值是固定的,也就是說Hash分區表的數據是按分區鍵值來聚集的,同樣的分區鍵肯定在同一分區。
比如,在證券行業,我們經常查詢某一只股票的K線,
假設表的結構如下:

復制代碼 代碼如下:

create table equity
(
id number,
trade_date date,
……);

Equity表可能會很大,對equity表的查詢通常都是指定id,查詢某一交易日期或者某段時期內的其他信息。這種情況下我們需要如何為equity表選擇分區呢?
單從表本身結構來看,似乎trade_date列很適合被選擇用來作范圍分區。但如果我們這樣分區的話,前面需求中的查詢:指定某一id,查詢其某一范圍內的交易信息,比如看1年內的K線,則這種查詢常常需要跨分區。我們知道,對分區表作跨分區查詢,很多時候其性能并不會太好,特別是這種查詢很可能還要跨很多分區。
你也可能會說,我們再在id, trade_date列上建個索引不就行了,仔細想想是不是這樣呢?這時候的equity表中的數據是按trade_date值來聚集的,同樣trade_date值的數據常常在一個數據塊中,這樣前面需求中所描述的查詢即使通過索引訪問,最終讀表時也常常是去讀離散的數據塊,即每一條記錄需要對應讀一個表數據塊。
如果建成Hash分區表,則數據按hash分區鍵聚集,就更適合需求中描述的查詢,因為同樣id的記錄必定在同一分區,同時,同樣 id值的記錄落在同一數據塊的幾率也增大了,從而“一定程度上”減少了IO。
上面對hash分區減少IO的描述加了引號,因為僅依靠Hash分區表試圖實現大范圍減少IO操作是不現實的,特別是當equity表中記錄的股票數非常多時,同一股票發生在不同交易日的記錄在物理上也很難聚集到相同數據塊中。實際上,如果我們在Hash分區的基礎上再對equity表采用IOT表的組織方式,則前面描述的查詢性能就可大為提高。IOT表不在該文討論的范圍之內,這里就不作進一步討論了。
當我們決定使用Hash表之前,我們還需要確定我們的所選擇的分區鍵值是連續分布的,或者接近連續分區,此外,分區的個數需要是2的整數冪,比如2,4,8… 這些要求是由Hash函數的特點決定的,這樣我們分區表的各個分區所包含的數據量才會比較平均。

Hash分區表的擴展:

Hash分區表是通過add partition命令來增加分區的。Oracle推薦分區的個數是2的冪,比如,2,4,8..等等,這樣可以確保數據在各個分區中分布比較均勻。當然,如前所述,還需要分區鍵值是連續分布的,或接近連續分布。
增加新分區時,需要將一些原有的數據從舊的分區劃分到新的分區中,那么這種數據劃分時來源分區選擇遵循什么原則呢?
要點如下:如果要增加的分區是第N個分區,大于等于N的最小2的整數冪為M,則當增加第N個分區時,這個分區的數據來源于分區N-M/2。
比如,現在有個Hash分區表共有100個分區,我們想為其增加一個分區,則它是101個分區,即上面公式中的N為101,而大于101的最小2的整數冪為128,則M為128,于是,這個101分區的數據來源就應該是101-128/2=37分區。
換個角度來說,當我們在增加第101分區的時候,是需要鎖定37分區的,因為我們需要將該分區中的部分數據插入到新的101分區中。
下面,我們用一個實例來驗證上面的說法,同時看看在實際操作中有什么需要注意的事項:
Commodity表是我們系統中的一個大表,幾年前在為該表創建Hash分區表時,當時的DBA在選擇分區數時指定了100個分區:

復制代碼 代碼如下:

select TABLE_NAME,PARTITION_POSITION,PARTITION_NAME,NUM_ROWS from user_tab_partitions where table_name=\'COMMODITY' order by PARTITION_POSITION;
TABLE_NAME PARTITION_POSITION PARTITION_NAME NUM_ROWS
-------------- ------------------ ---------------------- ----------
COMMODITY 1 COT_IND01_P1 4405650
COMMODITY 2 COT_IND01_P2 5046650
COMMODITY 3 COT_IND01_P3 5107550
……
COMMODITY 36 COT_IND01_P36 5718800
COMMODITY 37 COT_IND01_P37 9905200
COMMODITY 38 COT_IND01_P38 10118400
COMMODITY 39 COT_IND01_P39 10404950
COMMODITY 40 COT_IND01_P40 9730850
COMMODITY 41 COT_IND01_P41 9457300
COMMODITY 42 COT_IND01_P42 9717950
COMMODITY 43 COT_IND01_P43 9643900
COMMODITY 44 COT_IND01_P44 11138000
COMMODITY 45 COT_IND01_P45 9381300
COMMODITY 46 COT_IND01_P46 10101150
COMMODITY 47 COT_IND01_P47 8809950
COMMODITY 48 COT_IND01_P48 10611050
COMMODITY 49 COT_IND01_P49 10010600
COMMODITY 50 COT_IND01_P50 8252600
COMMODITY 51 COT_IND01_P51 9709900
COMMODITY 52 COT_IND01_P52 8983200
COMMODITY 53 COT_IND01_P53 9012750
COMMODITY 54 COT_IND01_P54 9310650
COMMODITY 55 COT_IND01_P55 8966450
COMMODITY 56 COT_IND01_P56 8832650
COMMODITY 57 COT_IND01_P57 9470600
COMMODITY 58 COT_IND01_P58 8932450
COMMODITY 59 COT_IND01_P59 9994850
COMMODITY 60 COT_IND01_P60 9617450
COMMODITY 61 COT_IND01_P61 10278850
COMMODITY 62 COT_IND01_P62 9277600
COMMODITY 63 COT_IND01_P63 8136300
COMMODITY 64 COT_IND01_P64 10064600
COMMODITY 65 COT_IND01_P65 3710900
……
COMMODITY 99 COT_IND01_P99 5273800
COMMODITY 100 COT_IND01_P100 5293350
100 rows selected.

查詢各個分區的數據分布,我們可以看到,從分區37 ~ 64的28個分區的記錄數大概是其他分區的兩倍。由于100不是2的整數冪,所以Oracle的hash函數是無法保證數據是平均分布的。我們為該表添加一個新的分區COT_IND01_P101:

復制代碼 代碼如下:

alter table nts_commodity_ts add partition COT_IND01_P101;
Table altered.
Elapsed: 00:06:58.52

收集統計信息后查詢新的分區記錄數:

復制代碼 代碼如下:

select TABLE_NAME,PARTITION_POSITION,PARTITION_NAME,NUM_ROWS from user_tab_partitions where table_name=\'COMMODITY' and partition_name in (\'COT_IOT_IND01_P37',\'COT_IOT_IND01_P101');

TABLE_NAME PARTITION_POSITION PARTITION_NAME NUM_ROWS
------------------ ------------------ --------------------- ----------
COMMODITY 37 COT__IND01_P37 4905200
COMMODITY 101 COT_IND01_P101 5107550

這時,我們可以看到,分區37中的數據被接近于平分到了分區37和101中。
監控增加分區過程中session鎖的情況,我們發現期間有兩個對象被以exclusive模式鎖定了:

復制代碼 代碼如下:

SQL> select * from v$lock where sid=1239 and type=\'TM' and LMODE=6 order by sid,lmode;
ADDR                KADDR          SID TY ID1    ID2 LMODE REQUEST CTIME BLOCK
---------------- ---------------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------
FFFFFFFF7D764828 FFFFFFFF7D764888 1239 TM 4004126 0  6 0 72 2
FFFFFFFF7D764828 FFFFFFFF7D764888 1239 TM 4004063 0  6 0 72 2
它們分別是什么對象呢?
select OBJECT_NAME,SUBOBJECT_NAME,OBJECT_ID from user_objects where object_id in (4004126,4004063)
OBJECT_NAME SUBOBJECT_NAME OBJECT_ID
--------------------- ------------------------------ ----------
COMMODITY COT_IND01_P100 4004126
COMMODITY COT_IND01_P37 4004063


可以看到,分區37和100都被鎖定了。鎖定37分區是意料中的事,因為要從該表轉移數據。那為什么要鎖定第100個分區,也就是最后一個分區呢?
我的理解是:新增加分區的位置101是由原分區表的分區數100確定的,如果在增加分區的過程中允許對原表最后一個分區100作DDL操作,如coalesce操作,則新加的101分區就不一定是從原來的分區37分配數據了,101分區本身應該是新的第100分區,這樣就引起混亂了。到這里,你可能會說,按這理解,是不是其他的分區也應該鎖定呢?其實不用,因為hash分區表是不支持drop partition操作的,而只支持coalesce操作來實現類似的操作,但coalesce只能從最后一個分區開始收縮。
了解了增加hash表分區過程中鎖信息的實際指導意義是什么呢?
繼續上例中的討論,由于分區37和最后一個分區100會被排他鎖定,因此在添加分區過程中這兩個分區是不能作DML操作的,因為DML操作需要在分區上申請共享鎖(mode為3)。也就是操作這兩個分區的應用會受到影響。
Hash表增加分區不會像其他類型分區表,如range分區那樣能夠迅速完成,因為這里添加分區的過程中是要有IO操作的,要轉移數據到新的分區。其實這還不是最主要的,由于Hash表是根據分區鍵Hash函數值來決定分區的,添加分區的主要時間其實是花在了計算hash值上。在上面的測試中,添加新分區操作的消耗時間是6分58秒,從下面的10046統計信息可以看到,其中6分鐘都是花在了CPU操作上,相信主要是Hash運算引起的。

[code]
OVERALL TOTALS FOR ALL RECURSIVE STATEMENTS
 call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse      328      0.17       0.27          0          0        148           0
Execute   1520    360.14     396.30     456820   11416202      26357    11565252
Fetch     1767      5.42      21.18      21421      26540          0        2862
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total     3615    365.73     417.76     478241   11442742      26505    11568114

該測試案例中分區COT_IND01_P37中共有接近1千萬條數據,耗時接近7分鐘,假設分區數據達到了1億條,則耗時應該在1個小時以上。如果我們的Hash分區數按Oracle的建議為2的整數冪,則我們在增加分區時是要增加原有分區一倍的新分區,比如原分區為128個,擴展的時候需要增加128個分區,乘以每次添加分區需要的時間,則為Hash表增加分區將是一個很恐怖的操作。
總之,Hash分區有其優勢,但也有嚴重的缺陷,比如這里描述的分區擴展問題。因此在項目設計之初,我們就需要慎重選擇分區數。但是隨著數據量的增加,我們又很難避免為分區表增加分區的操作,這種操作是很耗資源的操作,操作過程中由于鎖的問題會影響對原有某些分區的操作。但如果我們因為畏懼前面存在的問題拖著不作分區擴展,則越是往后,隨著數據量的增加,這種增加分區的操作越難以實施。

您可能感興趣的文章:
  • Oracle查詢當前的crs/has自啟動狀態實例教程

標簽:六安 海北 孝感 宜春 淮南 泰安 葫蘆島 酒泉

巨人網絡通訊聲明:本文標題《oracle分區表之hash分區表的使用及擴展》,本文關鍵詞  oracle,分區表,之,hash,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《oracle分區表之hash分區表的使用及擴展》相關的同類信息!
  • 本頁收集關于oracle分區表之hash分區表的使用及擴展的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲三级在线免费观看| 国产精品18久久久久久久久久久久| 韩国成人在线视频| 亚洲视频在线观看三级| 欧美一级精品在线| 在线免费观看日本一区| 国产成人夜色高潮福利影视| 亚洲一区二区三区四区在线观看| 2023国产一二三区日本精品2022| 欧美视频中文一区二区三区在线观看| 韩国欧美国产1区| 日本欧美一区二区| 五月综合激情日本mⅴ| 亚洲欧洲另类国产综合| 欧美一级高清片| 色欧美日韩亚洲| 日本韩国视频一区二区| 色综合中文综合网| 欧美一区二区播放| 成人av片在线观看| 国产成人99久久亚洲综合精品| 日本中文字幕不卡| 日韩—二三区免费观看av| 亚洲成人中文在线| 天堂一区二区在线| 免费成人性网站| 久久久久国产一区二区三区四区| 日本成人在线电影网| 亚洲一区在线观看网站| 日韩毛片精品高清免费| 久久免费视频色| 欧美一区二区女人| 日韩一区二区在线观看视频| 欧美日韩国产一级二级| 欧美日韩中文一区| 欧美日韩一区二区在线观看| av色综合久久天堂av综合| av网站一区二区三区| 欧美午夜精品久久久| 欧美午夜一区二区三区 | 国产精品久久久久aaaa樱花| 中文字幕乱码一区二区免费| 久久久久久综合| 亚洲免费色视频| 天堂av在线一区| 国内成人免费视频| 成人免费看片app下载| 成人动漫一区二区| 久久精品噜噜噜成人88aⅴ| 国产呦萝稀缺另类资源| 粉嫩绯色av一区二区在线观看| 国产成人av一区二区三区在线 | 欧美日韩国产成人在线91| 美脚の诱脚舐め脚责91 | 国产成人8x视频一区二区| 中文字幕乱码日本亚洲一区二区 | 自拍偷拍欧美激情| 亚洲精品欧美综合四区| 石原莉奈一区二区三区在线观看| 国产一区在线不卡| 欧美午夜影院一区| 国产精品久久看| 日韩电影一区二区三区四区| jlzzjlzz国产精品久久| 日韩欧美一级二级| 亚洲精品久久嫩草网站秘色| 另类小说视频一区二区| av中文字幕不卡| 欧美变态tickle挠乳网站| 亚洲欧美日韩成人高清在线一区| 日韩电影在线一区二区三区| 99久久精品一区| 久久一区二区三区国产精品| 亚洲国产美女搞黄色| 成人精品国产免费网站| 日韩视频在线你懂得| 亚洲品质自拍视频| 成人午夜视频网站| 久久综合久久鬼色| 久久精品久久综合| 欧美日韩久久久一区| 一区二区三区中文字幕精品精品 | 成人午夜电影久久影院| 久久久亚洲午夜电影| 激情国产一区二区 | 国产精品欧美久久久久无广告| 奇米影视在线99精品| 欧美一区午夜精品| 综合精品久久久| 国产v综合v亚洲欧| 日韩一区二区电影网| 亚洲一区二区视频在线观看| 99久久国产综合精品麻豆| 欧美精彩视频一区二区三区| 久久福利资源站| 奇米精品一区二区三区四区| 欧美日韩国产精品成人| 日韩av二区在线播放| 欧美撒尿777hd撒尿| 亚洲va韩国va欧美va| 精品视频一区二区不卡| 天堂影院一区二区| 日韩一级片网址| 蜜臀久久久久久久| 精品电影一区二区| 狠狠色丁香婷婷综合久久片| 欧美mv和日韩mv国产网站| 国产一区二区三区视频在线播放| 久久看人人爽人人| 色综合中文字幕| 亚洲一二三四区不卡| 欧美日韩在线免费视频| 喷白浆一区二区| 中日韩av电影| 欧美自拍偷拍午夜视频| 免费人成网站在线观看欧美高清| 欧美一区二区三区不卡| 国产伦精品一区二区三区视频青涩 | 国产二区国产一区在线观看 | 亚洲1区2区3区视频| 91精品国产高清一区二区三区| 卡一卡二国产精品| 国产精品欧美经典| 欧美日韩一区二区在线视频| 激情深爱一区二区| 伊人色综合久久天天人手人婷| 欧美亚州韩日在线看免费版国语版| 日本欧美大码aⅴ在线播放| 国产日本亚洲高清| 欧美视频在线播放| 国模大尺度一区二区三区| 中文字幕国产一区| 5月丁香婷婷综合| 成人黄色一级视频| 日本三级亚洲精品| 久久亚洲综合色一区二区三区| 99麻豆久久久国产精品免费| 亚洲在线视频网站| 精品黑人一区二区三区久久| 一本一本大道香蕉久在线精品| 蜜臀精品久久久久久蜜臀 | 国产拍欧美日韩视频二区| 色综合天天综合在线视频| 日本午夜精品一区二区三区电影 | 日韩欧美电影在线| 成人动漫在线一区| 色一区在线观看| 国产激情偷乱视频一区二区三区| 日韩二区三区四区| 久久无码av三级| 日本高清免费不卡视频| 国产一区二区三区视频在线播放| 亚洲综合成人在线视频| 精品国产a毛片| 日韩一区二区在线观看视频播放| 色综合中文综合网| 丁香六月久久综合狠狠色| 久久精品男人天堂av| 国产九色精品成人porny | 亚洲欧美另类图片小说| 日韩一区二区精品| 91麻豆免费看片| 国产99久久久国产精品| 日本91福利区| 午夜精品久久久久久不卡8050| 欧美激情综合五月色丁香小说| 欧美精品777| 欧美日韩国产首页| 94色蜜桃网一区二区三区| 国产成人综合视频| 蜜臀va亚洲va欧美va天堂| 亚洲电影视频在线| 亚洲欧美另类小说视频| 欧美国产禁国产网站cc| 久久精品夜色噜噜亚洲aⅴ| 精品噜噜噜噜久久久久久久久试看 | bt欧美亚洲午夜电影天堂| 国产成人午夜视频| 国产成人精品免费一区二区| 久久99最新地址| 蜜臀av在线播放一区二区三区| 日本aⅴ免费视频一区二区三区 | 欧美极品另类videosde| 国产欧美精品一区aⅴ影院| 久久精品亚洲一区二区三区浴池| 精品sm在线观看| 国产亚洲女人久久久久毛片| 久久精品人人做人人综合| 国产精品久久影院| 国产精品福利一区| 亚洲影院免费观看| 日日夜夜一区二区| 狠狠色狠狠色综合系列| 成人性视频免费网站| 本田岬高潮一区二区三区| 97久久人人超碰| 在线观看一区日韩| 日韩欧美国产综合在线一区二区三区| 精品免费国产二区三区 | 在线免费一区三区|