天天看點

驚喜與局限并存,12c Sharding内測報告搶先看!

2017年3月,我們終于迎來了oracle 12cr2,作為國内首批beta測試使用者,我們在2016年1月應邀進行oracle 12c sharding 技術測試,并于去年10月完成了12cr2 sharding 預研報告。由于受oracle新技術釋出限制,直至今日才釋出與各位分享。

一、oracle 12c sharding簡介

在oracle 12cr2之前的版本中, oracle分區表的所有分區都是在一套資料庫中,而sharding技術,則是使用新的分片技術可以将不同的分區部署到不同的資料庫(後面稱之為分片節點),而這些資料庫都是互相獨立且沒有地理位置的限制。oracle宣稱這種分片架構具有以下特性:

支援資料水準分片,支援資料海量擴充

支援按地理分布、内網部署、公有雲或混合雲部署方案

支援全面故障隔離

每個分片節點具有獨立的硬體資源(cpu、記憶體、硬碟等)

支援彈性擴充和自動重分布(auto rebalancing)

自動部署(auto deployment)

二、oracle 12c sharding體系結構

驚喜與局限并存,12c Sharding内測報告搶先看!

oracle sharding技術下的sdb架構(shared database architecture),包括:shard directors(分片路由器gsm)、shard catalog(分片目錄庫)、shardgroup(分片組)。

1. shard catalog目錄庫主要作用

存儲sdb的中繼資料

協調資料庫

分片表的中繼資料定義和複制表存儲

2. shard director分片導向器主要作用

提供從應用層到分片連接配接請求的路由導向

跨資料庫服務故障切換和管理

連接配接時負載均衡

3. oracle routing(兩種模式)

session-based routing

所有的事務都隻連接配接到一個單一的shard進行操作。

cross-shard 模式

适用于報表類的查詢

事務需要跨多個shard執行操作

4. sdb模式下oracle的連接配接請求方式分為兩種

ucp:帶shard key的連接配接請求,sdb資料庫是依據shard key來劃分shard的,當我們使用shard key進行操作的時候,連接配接池會将該連結請求發送到正确的shard庫中并建立連結。

如果沒有sharding key,sdb會将連接配接請求交給catalog庫,它會将目标sql解析并路由請求到正确的shard庫。

三、oracle 12c sharding測試環境搭建部署步驟

環境準備:測試環境使用三台虛拟機進行測試,分别為:shard0(gsm和shardcate),shard1(sh1),shard2(sh2)。

軟體要求:12.2.0.0.3及以上版本。

1. gsm軟體部署

第一步修改環境變量如下:

[oracle@shard0   ~]$ env |grep ora

oracle_base=/u01/app/oracle

oracle_home=/u01/app/oracle/product/12.2.0/gsmhome_1

第二步解壓縮gsm.zip包并且執行runinstaller腳本(這裡使用了圖形化界面)

驚喜與局限并存,12c Sharding内測報告搶先看!

直接點下一步(檢查作業系統是否符合安裝條件):

驚喜與局限并存,12c Sharding内測報告搶先看!

點next下一步:

驚喜與局限并存,12c Sharding内測報告搶先看!

點選install,這樣gsm包就安裝完成了。

後續的資料庫軟體安裝就不展開介紹了,選擇no-cdb選項即可。其他均與之前版本沒有任何差別。

2. shardcate庫上使用者及相關權限操作

ssh   shard0

su   – oracle

sqlplus   / as sysdba

alter   user gsmcatuser account unlock; --解鎖gsm使用者

alter   user gsmcatuser identified by passwd_gsmcatuser; --修改gsm使用者密碼

create   user mygdsadmin identified by passwd_mygdsadmin; --建立管理使用者mygdsadmin

grant   connect, create session to mygdsadmin;--賦權限給mygdsadmin

grant   gsmadmin_role to mygdsadmin;--把gsm管理者角色賦予mygdsadmin

grant   inherit privileges on user sys to gsmadmin_internal;

3. shardcate上配置remote scheduler

su   - oralce

set   echo on

set   termout on

set   time on

spool   /u01/stage/labs/config_remote_scheduler.lst  --設定配置輸出的日志

execute   dbms_xdb.sethttpport(8080);--指定scheduler所使用的端口号

commit;

@?/rdbms/admin/prvtrsch.plb

exec   dbms_scheduler.set_agent_registration_pass('welcome');  --設定遠端shard節點注冊到shardcate庫所需的密碼               

spool   off

4. 分片庫資訊注冊

ssh   shard1

schagent   –stop --停止shard庫上的守護程序

schagent   –start --停止shard庫上的守護程序

schagent   –status –檢視shard庫上的守護程序的狀态

echo   welcome |schagent -registerdatabase shard0 8080 –注冊到遠端shardcate庫分别是密碼、主機名、端口号

cd   /data/oracle

mkdir   oradata –建立shard庫的資料檔案存放位置

mkdir   fast_recovery_area --建立shard庫的快速恢複區的位置

ssh   shard2

schagent   -stop

schagent   -start

schagent   -status

echo   welcome |schagent -registerdatabase shard0 8080

mkdir   oradata

mkdir   fast_recovery_area

5. 配置gsm

su   – oracle    --oracle使用者

gdsctl    --進入gsm互動界面

create   shardcatalog -database shard0:1521:orcl -chunks 12 -user   mygdsadmin/passwd_mygdsadmin -sdb cust_sdb -region region1

--建立shardcatalog庫 –database ip(主機名):監聽端口号:執行個體名 –chunks chunk的數量

-user   使用者/密碼 –sdb sdb名   –region  主端,備端

add   gsm -gsm sharddirector1 -listener 1571 -pwd passwd_gsmcatuser -catalog   shard0:1521:orcl –region -trace_level 16

--添加gsm –gsm gsm名 –listener 監聽端口号 –pwd gsmcatuser使用者密碼 –catalog catalog庫基本資訊 ip(主機名):監聽端口号:執行個體名   –region 指定是哪個region –trace_level 指定trace的級别位置log_destination參數控制

start   gsm -gsm sharddirector1 –啟動gsm

set   _event 17

modify   catalog -agent_password welcome –修改 catalog庫守護程序密碼為welcome

add   credential -credential oracle_cred -osaccount oracle -ospassword oracle --   specify the operating system user that the extproc agent impersonates when   running a subprogram stored in the library

gdsctl   –進入gsm指令互動模式

set   gsm -gsm sharddirector1 –設定目前分片目錄為sharddirector1

connect   mygdsadmin/passwd_mygdsadmin –建立連接配接

add   shardgroup -shardgroup shgrp1 -deploy_as primary -region region1 –添加主分片組

add   invitednode shard1

create   shard -shardgroup shgrp1  -destination  shard1 -credential   oracle_cred –-不同的shard庫添加到不同的分片組裡

add   invitednode shard2

create   shard -shardgroup shgrp2  -destination shard2 -credential   oracle_cred –-不同的shard庫添加到不同的分片組裡

deploy   一鍵部署。

此時一套測試的sdb搭建成功,由于環境有限這裡沒有做容災,oracle提供了ogg和adg兩種方式對shard節點做容災并且也支援一鍵部署。

四、sharding适用場景限制

根據oracle官方對sharding的應用場景介紹描述,oracle分片技術主要适用以下場景:

面向 oltp 應用場景

為了優化性能應用程式應該使用分片鍵

業務場景中 80% 的事務都基于單個分片操作

跨分片操作目前版本支援并不完善

對于已知的分片技術使用場景限制,結合浙江移動的業務特點,最後選擇客戶中心做為本次的測試模型,由于存儲資源有限我們選擇了資料量相對較小的湖州地市作為測試地市。

五、sharding測試模型和測試結果

客戶中心業務簡介:

1. 客戶中心儲存的資料來源于原crm系統中的三戶資訊和使用者訂購資訊,承載的是客戶管理業務;

2. 三戶資訊的核心是使用者資訊表,其中使用者資訊表的業務入口是bbb_id,在擷取bbb_id和uuu_id的對應關系後,後續都是以uuu_id為主,查詢到相應的uuu_id對應的ccc_id/aaa_id的資訊,再根據ccc_id和aaa_id的值去查詢對應的客戶和帳戶資訊,而使用者的訂購資訊都是根據uuu_id來查詢的;

3. 對所有前台或使用者發起的針對單使用者的業務中,基本能保證這些業務都是在同一個分片内操作;

4. 使用者資訊會随着系統承載的使用者量的增加有所增長,但這種增長的速度不是海量的擴充速度。

測試結果:所有的業務操作大緻可以分為以下這三類:

單分片查詢

duplicate表查詢

跨分片查詢

針對基于單分片的分片表查詢,相比于傳統的資料庫查詢速度提升不明顯,因為uuu_id列本身加了索引查詢速度已經夠快了。但是當時資料庫的壓力提升以後,多個分片節點的sdb帶來的優勢預計會有一定的展現,因為所有的資料庫操作被均勻地負載到多台實體主機上面,由于硬體限制我們沒有做性能測試,對于duplicate表的查詢本身設計就是從catalog庫上通過物化視圖到各個shard庫裡,是以對查詢的速度提升沒有實質的提升作用。

最後的跨分片查詢我們在測試過程中發現oracle不支援where條件用in或者or,我們大部分的應用都會用到這種條件的查詢,是以跨分片的查詢目前版本支援并不完善。

六、sharding測試過程中的問題解決

1. 環境部署

軟體的版本需要12.2.0.0.3及以上的版本

在配置gsm的時候報錯資訊不會很直覺的展示出來,這對于安裝部署有很大阻礙。

2. 資料導入

duplicate表的資料導入是從catalog庫導入,分片表的導入可以從各個shard庫導入進去(由于環境有限暫時12.2.0.0.3從catalog庫導入還未來得及測試)。

12.2.0.0.3版本以前分片表直接從catalog庫導入會報ora-600錯誤,而且這些錯誤也沒有相應的psu修複。

通過dblink用create table as select的方式建立會報不支援的操作類型的錯誤。

3. 業務測試

跨分片查詢在 12.2.0.0.3版本支援并不完善,例如用in或者or 的查詢oracle會直接報錯。我們已将改進建議提給oracle,可能會在正式釋出版本中得到解決。

所有的連接配接都經過catalog庫,當連接配接請求并發上去後catalog将成為瓶頸,需建立多個catalog庫分擔壓力。

同一schema下的各個分片表必須要有主外鍵關系。

 原文釋出時間為:2017-03-06

本文來自雲栖社群合作夥伴dbaplus