問題背景
某核心資源系統業務2021年遷移到國產數據庫OceanBase最早使用的版本是OceanBase 2.2.76,因OceanBase次版本不支持split partition功能只能順序的add分區,每次添加拆分分區操作都是先刪除max分區然后add partition,在把max分區也add上,但是這種添加分區的方式不適合復合分區的情況,列入region+時間的復合RANGE分區,分區里有多個部分地市的max分區。
這樣就不能通過刪除中間的max分區在add分區了,為此在遷移前oracle庫提前拆到2022年全年的分區,遷移到ob庫不用在處理分區,現在到了22年年底需要添加新的分區保障業務正常運行,OceanBase開發了新版本支持復合分區的add分區功能,此版本包括OceanBase 2.2.77(OceanBase 2.0的最終版本)和OceanBase 3.2.3.2,在新版本的測試環境測試驗證分區的add功能。測試步驟如下,希望能有參考意義。
解釋:
分區技術(Partitioning)是 OceanBase 非常重要的分布式能力之一,它能解決大表的容量問題和高并發訪問時的性能問題,主要思想就是將大表拆分為更多更小的結構相同的獨立對象,即分區。普通的表只有一個分區,可以看作分區表的特例。每個分區只能存在于一個節點內部,分區表的不同分區可以分散在不同節點上。
測試過程
用ROOT租戶進入查看 _enable_add_between_range_partitions參數,默認狀態為FALSE,使用如下語句:
select b.tenant_name,a.* from
__all_virtual_tenant_parameter_info a,__all_tenant b where
name = _enable_add_between_range_partitions and
b.tenant_id > 1000 and a.tenant_id=b.tenant_id order by
1,zone;,
結果如下圖:
同樣也是在root租戶下執行。
執行命令:
alter system set _enable_add_between_range_partitions = True tenant=obzy02;
注意事項:
tenant為上面查詢的結果,根據需要修改;處理完畢后將參數修改回 False。
執行如圖:
obclient[root]>alter system set
_enable_add_between_range_partitions = True
tenant=obzy02;
Query OK, 0 rows affected (0.01 sec)
步驟3:再次查詢參數值,確認已經修改成功
同樣也是在root租戶下執行。
執行命令:
select * from __all_virtual_tenant_parameter_info where name
= _enable_add_between_range_partitions and tenant_id >
1001;
或是步驟1里的語句,當結果data_type字段改為true說明功能啟用可以add復合分區,可以執行add 分區命令驗證add分區。
結果如下圖:
因add分區的功能當max分區有數據時,可能會造成數據的遷移(數據可能會保留在max分區,沒有遷移到拆除的分區,這個需要驗證,測試發現數據到了新加的分區上符合期望的情況)和全局索引的失效。
在root 租戶驗證max分區是否有數據,這個語句不完全準確,部分max分區沒有查詢到,需要手工統計或是ob優化下視圖便于按分區名查詢(在root租戶只能查到分區的id不能查到分區的名稱)。
查詢語句:
SELECT /*+READ_CONSISTENCY(WEAK),query_tzyeout(100000000)*/
c.tenant_name,
d.database_name,
b.table_name,
a.partition_id,
a.row_count,
round(a.required_size / 1024 / 1024 / 1024, 2) table_size_GB
from
(select tenant_id,table_id,max(partition_id) partition_id from __all_virtual_meta_table group by tenant_id,table_id) m,
__all_virtual_meta_table a,
__all_virtual_table b,
__all_tenant c,
__all_virtual_database d
WHERE a.ROLE = 1
AND instr(a.member_list, a.svr_ip) > 0
and m.tenant_id=a.tenant_id
and m.table_id=a.table_id
and m.partition_id=a.partition_id
AND a.tenant_id = b.tenant_id
AND a.table_id = b.table_id
AND b.tenant_id = c.tenant_id
AND b.database_id = d.database_id
and m.partition_id>17
and d.database_name not in(PRO_MUSER)
and b.table_name in(
CS_ZYEI_CUR,
CS_REC_ECASHLOAN_LOG,
ZY_ASYN_TASK,
ZY_ASYN_TASKHIS,
ZY_ASYN_TASK_BLOCK,
ZY_ASYN_TASK_BLOCKHIS,
ZY_ASYN_TASK_LOCK,
ZY_ASYN_TASK_PARAMTER)
ORDER BY c.tenant_name, b.table_name, partition_id;
查詢結果:
此操作在業務租戶的業務用戶,或是業務租戶的sys用戶下執行。
驗證按月分區,按地市+月份分區類型的表,步驟如下:
1)驗證按月分區的表
obclient[SYS]>select t.table_owner,t.table_name,t.partition_name from dba_tab_partitions t where t.table_name=ZY_IF_CTRM_ORDER_HIS;
+-------------+-----------------------+----------------+
| TABLE_OWNER | TABLE_NAME | PARTITION_NAME |
+-------------+-----------------------+----------------+
| ZY | ZY_IF_CTRM_ORDER_HIS | P_202201 |
| ZY | ZY_IF_CTRM_ORDER_HIS | P_202202 |
| ZY | ZY_IF_CTRM_ORDER_HIS | P_202203 |
| ZY | ZY_IF_CTRM_ORDER_HIS | P_202204 |
| ZY | ZY_IF_CTRM_ORDER_HIS | P_202205 |
| ZY | ZY_IF_CTRM_ORDER_HIS | P_202206 |
| ZY | ZY_IF_CTRM_ORDER_HIS | P_202207 |
| ZY | ZY_IF_CTRM_ORDER_HIS | P_202208 |
| ZY | ZY_IF_CTRM_ORDER_HIS | P_202209 |
| ZY | ZY_IF_CTRM_ORDER_HIS | P_202210 |
| ZY | ZY_IF_CTRM_ORDER_HIS | P_202211 |
| ZY | ZY_IF_CTRM_ORDER_HIS | P_202212 |
| ZY | ZY_IF_CTRM_ORDER_HIS | P_MAX |
+-------------+-----------------------+----------------+
13 rows in set (0.87 sec)
obclient[SYS]>
2)驗證max分區是否有數據
select count(1) from ZY.ZY_IF_CTRM_ORDER_HIS partition (P_MAX);
obclient[SYS]>select count(1) from ZY.ZY_IF_CTRM_ORDER_HIS partition (P_MAX);
+----------+
| COUNT(1) |
+----------+
| 0 |
+----------+
1 row in set (0.00 sec)
3)執行分區添加語句
alter table ZY.ZY_IF_CTRM_ORDER_HIS add partition P_202301
values less than (TO_DATE(202302, YYYYMM,
NLS_CALENDAR=GREGORIAN)) ;
obclient[SYS]>alter table ZY.ZY_IF_CTRM_ORDER_HIS add
partition P_202301 values less than (TO_DATE(202302,
YYYYMM, NLS_CALENDAR=GREGORIAN)) ;
Query OK, 0 rows affected (0.20 sec)
4)通過語句驗證添加的分區
obclient[SYS]>select t.table_owner,t.table_name,t.partition_name from dba_tab_partitions t where t.table_name=ZY_IF_CTRM_ORDER_HIS;
+-------------+-----------------------+----------------+
| TABLE_OWNER | TABLE_NAME | PARTITION_NAME |
+-------------+-----------------------+----------------+
| ZY | ZY_IF_CTRM_ORDER_HIS | P_202201 |
| ZY | ZY_IF_CTRM_ORDER_HIS | P_202202 |
| ZY | ZY_IF_CTRM_ORDER_HIS | P_202203 |
| ZY | ZY_IF_CTRM_ORDER_HIS | P_202204 |
| ZY | ZY_IF_CTRM_ORDER_HIS | P_202205 |
| ZY | ZY_IF_CTRM_ORDER_HIS | P_202206 |
| ZY | ZY_IF_CTRM_ORDER_HIS | P_202207 |
| ZY | ZY_IF_CTRM_ORDER_HIS | P_202208 |
| ZY | ZY_IF_CTRM_ORDER_HIS | P_202209 |
| ZY | ZY_IF_CTRM_ORDER_HIS | P_202210 |
| ZY | ZY_IF_CTRM_ORDER_HIS | P_202211 |
| ZY | ZY_IF_CTRM_ORDER_HIS | P_202212 |
| ZY | ZY_IF_CTRM_ORDER_HIS | P_202301 |
| ZY | ZY_IF_CTRM_ORDER_HIS | P_MAX |
+-------------+-----------------------+----------------+
14 rows in set (0.82 sec)
obclient[SYS]>
步驟6:在操作完檢查失效的索引
此步業務用戶下檢查,此命令可以查出失效索引和創建索引的的ddl命令,因為ob暫時不支持失效索引的rebuild命了,索引失效了只能drop了重建。索引檢查失效索引并重建這一步是非常重要的檢查步驟。
使用命令:
select /*+ rule */t.owner,t.table_name,drop index ||t.owner||.||t.index_name||;,select
dbms_metadata.get_ddl(||INDEX||,||T.INDEX_NAME||,||||T.OWNER||) FROM DUAL UNION ALL
FROM Dba_Indexes t WHERE t.status =UNUSABLE;
此命令在root租戶下執行,驗證語句同步驟1:
alter system set _enable_add_between_range_partitions = False tenant=obzy02;
至此ob庫分區添加共用驗證完。
1)此次分區add功能只是通過add partition命令實現了類似split partition的功能,完善了符合分區不能add分區的情況,但是還不能支持split partition 功能,希望后期支持。
2)Ob的失效索引不支持rebuild命令,這個導致索引失效后操作較復雜,既增加了操作時間(不能編譯分區失效索引),又增加了操作難度(獲取建索引語句,并刪除索引重建難免有遺漏的可能帶來了sql效率降低的風險),建議后期增加此功能。
oceanbase處于發展階段,部分功能還不完善,希望后期越做越好。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/129091.html
摘要:端基于生成列進行內部分區,不侵入業務。總結天貓雙全球狂歡節成交額超過億,成功經受住了考驗,全面支撐了支付寶核心鏈路,平穩抗住時的峰值壓力,夯實三年戰略百萬支付的底盤能力。 小螞蟻說: 你們都很關心的 OB雙11大促實戰分享 專題來啦!本系列將為你系統性的介紹OceanBase支撐螞蟻雙11背后的技術原理和實戰分享。從平臺到架構,再到實現,一起來探索螞蟻雙11這場神秘的技術之旅吧! sh...
閱讀 3733·2023-01-11 11:02
閱讀 4244·2023-01-11 11:02
閱讀 3050·2023-01-11 11:02
閱讀 5180·2023-01-11 11:02
閱讀 4733·2023-01-11 11:02
閱讀 5533·2023-01-11 11:02
閱讀 5312·2023-01-11 11:02
閱讀 3986·2023-01-11 11:02