惊喜与局限并存,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体系结构

 
 

 

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脚本(这里使用了图形化界面)

 

 

直接点下一步(检查操作系统是否符合安装条件):

 

 

点next下一步:

 

 

点击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

 

ssh   shard0

su   - oralce

sqlplus   / as sysdba

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

su   – oracle

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

su   – oracle

schagent   -stop

schagent   -start

schagent   -status

echo   welcome |schagent -registerdatabase shard0 8080

cd   /data/oracle

mkdir   oradata

mkdir   fast_recovery_area

 

5. 配置GSM

 

ssh   shard0

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

ssh   shard0

su   – oracle

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

相关文章
|
4月前
|
关系型数据库 MySQL 大数据
DataX:数据同步的超音速英雄!阿里开源工具带你飞越数据传输的银河系,告别等待和故障的恐惧!快来见证这一数据工程的奇迹!
【8月更文挑战第13天】DataX是由阿里巴巴开源的一款专为大规模数据同步设计的工具,在数据工程领域展现强大竞争力。它采用插件化架构,支持多种数据源间的高效迁移。相较于Apache Sqoop和Flume,DataX通过并发写入和流处理实现了高性能同步,并简化了配置流程。DataX还支持故障恢复,能够在同步中断后继续执行,节省时间和资源。这些特性使其成为构建高效可靠数据同步方案的理想选择。
380 2
|
消息中间件 缓存 数据库
好家伙!阿里最新版高并发系统设计涵盖了“三高”所有骚操作
为啥都爱面高并发? 首先为啥面试官喜欢问高并发、性能调优相关的问题,我想有两点原因: 第一,本身互联网区别于传统软件行业的特点之一就是海量请求。传统软件公司每秒用户几个、几十个的请求很常见,但是互联网公司哪怕一个二线的 App,后端接口请求一天几个亿也很正常。业务特点导致对候选人在海量请求相关的技术上考察的会比较多。 第二、高并发性能调优等方面的问题相当于高考试卷里的难题部分。CRUD 谁都会,xx 培训机构培训上三个月,出来都能写。但是对于高性能、高并发这没几把刷子真会玩不起来的。通过这个来区分候选人水平的高低(招人肯定选水平高的)。
107 1
|
消息中间件 缓存 分布式计算
真牛!阿里最新发布这份《亿级高并发系统设计手册》涵盖所有操作
前言 我们知道,高并发代表着大流量,高并发系统设计的魅力就在于我们能够凭借自己的聪明才智设计巧妙的方案,从而抵抗巨大流量的冲击,带给用户更好的使用体验。这些方案好似能操纵流量,让流量更加平稳得被系统中的服务和组件处理。 那我们改如何应对大流量的三种方式? 第一种方法:Scale-out。 第二种方法:使用缓存提升性能 第三种方法:异步处理 面试京东,阿里这些大厂遇到这些问题改怎么办? 秒杀时如何处理每秒上万次的下单请求? 如何保证消息仅仅被消费一次? 如何降低消息队列系统中消息的延迟?
|
Java 开发者
Alibaba刚上线的JDK源码整合手册,瞬间遭受百万源码开发者追捧
随着JDK的不断迭代更新,国内的一些一线互联网大厂都安耐不住了,都开始了自己内部的JDK源码内卷,其中最受大家关注的阿里最先发布了一份号称21年最新的JDK源码整合手册,瞬间受到大批的源码开发者追捧一时风头无两!!!!
|
机器学习/深度学习 缓存 SpringCloudAlibaba
假期做了一项调研:大厂为啥都自研RPC?结果合乎情理!
五一假期过的可真快,今天开始,又要搬砖了。在五一假期当中,冰河做了一项调研,感觉结果还是挺合乎情理的。
384 0
假期做了一项调研:大厂为啥都自研RPC?结果合乎情理!
淘宝预售“买崩”程序员20分钟修复,全靠这份亿级流量并发手册
朋友们,今年双11电商大促即将到达,感受到四面八方激动的心情没有? 去年天猫淘宝在双十一中订单可是破了58.3万笔/秒,预测一波今年成交额又会打破去年记录。作为一名互联网民工,我关心的不是订单有多少,而是系统竟然没崩!以及这背后为了抗住这巨大的并发量的程序员同胞们……
【开发随记】【提效】工作习惯那些事系列之五——任务处理
【开发随记】【提效】工作习惯那些事系列之五——任务处理
101 0
|
数据管理 OceanBase
特别的儿童节,OceanBase 送上一份特别的惊喜
特别的儿童节,OceanBase 送上一份特别的惊喜
149 0
特别的儿童节,OceanBase 送上一份特别的惊喜
|
存储 数据可视化 中间件