對分割槽表匯入匯出的水平,垂直切分

2021-06-28 08:42:00 字數 2156 閱讀 2940

在工作中有時候碰到一些分割槽表,業務資料量很大,可能幾百g,上t的規模,而且做資料的匯入匯出的時候,會感覺到exp/expdp的時候生成的dump檔案太大了,做匯入的時候也是很重的負擔。比如500g的dump,你在使用imp做匯入的時候,別無選擇,只能看著日誌裡partition裡的資料乙個乙個被匯入。impdp可能稍微好點,還能指定個並行,但是問題又來了,乙個500g的dump。impdp是在最後才做commit。對於資料空間和undo,cpu資源都是挑戰。

分割槽表有乙個地方和普通表不同,對於每個分割槽可以單獨做dml,不會影響其他的分割槽,當然了,你得指定分割槽名。

基於以上的情況,我寫了乙個指令碼來完成exp/expdp,把乙個很大的分割槽表按照分割槽生成對應的dump檔案,如果分割槽有100個分割槽,那麼就會有100個dump檔案。在資料匯入的時候,也可以分割槽匯入,以分割槽的形式單獨做匯入,相當於把乙個大的事物分成很多小的部分。可以看做是垂直切分

比如說表big_table有100個分割槽,生成了100個dump,匯出的時候一般比較快,匯入的時候問題就來了。如果開啟100個單獨的程序去匯入,系統負載不一定能接受,undo的大小肯定不能保證這麼多的大事務,很可能會有undo空間的問題。

這個時候可以考慮開啟幾個並行的程序來做資料匯入,比如開啟5個程序來做資料匯入,每個程序包含20個分割槽,這樣會對系統的負載減輕不少,同時也能提高速度。可以看做是水平切分

查詢含有long型別欄位的表

select distinct a.table_name fromdba_tab_columns a,dba_segments b where a.table_name=b.segment_name and b.owner='bill' and a.data_type in ('long') and b.segment_type='table'order by 1;

檢視分割槽表大小:

sql>select segment_name,sum(bytes)/1024/1024/1024 from dba_segments where owner='bill'andsegment_name in(select distinct table_name from dba_tables where partitioned = 'yes' and owner='bill') group bysegment_name;

每個分割槽生成乙個dmp檔案

setline 300 pagesize 49999

select'exp bill/bisys3#$ buffer=209715200 direct=y constraints=no triggers=noindexes=no statistics=none recordlength=65535file='||table_name||'_'||partition_name||'.dmplog='||table_name||'_'||partition_name||'.logtables='||table_name||':'||partition_name||'' from dba_tab_partitions wheretable_owner='bill' and table_name='dailysession_table';

set line 300 pagesize 49999

select 'imp bill/bill buffer=209715200 feedback=100000ignore=y recordlength=65535 file='||table_name||'_'||partition_name||'.dmp log=imp_'||table_name||'_'||partition_name||'.logtables='||table_name||':'||partition_name||'' from dba_tab_partitions wheretable_owner='bill' and table_name='dailysession_table';

對分割槽表的詳解分析

對分割槽表的分析 硬碟是由多個盤體組成的,盤體又是有無數碟片組成,當然有人會問 不是存在單碟硬碟嗎?沒錯,單碟硬碟是雙面可讀的硬碟,當然也相當於兩個碟片。每個碟片又分為許多磁軌,每個磁軌有63個扇區,扇區是硬碟儲存的基本單位,這是乙個理想化的模型,之所以將硬碟用乙個理想化的模型是為了對硬碟的研究更方...

hive分割槽表匯出mysql hive 分割槽表

1 分割槽表 partitioned by col name data type comment col comment 1.1 分割槽表 在建表時,指定了partitioned by 這個表稱為分割槽表 partitioned by 以什麼分割槽 1.2 分割槽概念 mr 在maptask輸出ke...

對分割槽表的一些總結

分割槽表分為 範圍分割槽 partition by range 列表分割槽 partition by list hash分割槽 partition by hash 有多少個分割槽就有多少個segment 其實hash分割槽最大的好處在於,將資料根據一定的hash演算法,均勻分布到不同的分割槽中去,避...