GaussDB国庆献礼】GaussDB 100 HA架构技术建议书(2)

网友投稿 1141 2022-05-29

3      数据库功能

3.1      表和索引

3.1.1        表的存储:segemnt和extent

(1)Segment对应一个表或索引,如果分区,则对应一个最小分区。

(2)Extent是一段连续的磁盘空间,当Segment没有空闲空间时,向表空间申请一个空闲的extent。

(3)Extent的默认大小为64K,使用大的extent可以提升全表扫描的效率。930版本支持动态extent。

3.1.2        表的存储:Page

页由Page head、tail校检码、row dir、row组成。

Ø  Page head:页面ID、Last SCN、size、ITL count、extent链表前驱和后驱节点。

Ø  Page tail:CRC校检码,用于完整性校检

Ø  Row directory:Slot偏移地址字典,可以通过slot id查找slot在页中的位置。

Ø  Row:数据行,对应表中的一条数据。

Rowid = File ID + Page ID + Slot ID,通过Rowid可以定位到一行数据。

3.1.3        表的分类

表的类型

类型说明

样例

普通表(Heap)

数据全局可见,存储在普通表空间,支持分区和lob类型

会话级全局临时表

数据会话级可见,存储在temp表空间,不支持分区和lob类型

create      global temporary table t1

(

sql_id                                   varchar(100) primary key,

sql_text                                 varchar(1000)

)

on commit      preserve rows

事务级全局临时表

数据事务级可见,存储在temp表空间,不支持分区和lob类型

create      global temporary table t2

(

sql_id                                   varchar(100) primary key,

sql_text                                 varchar(1000)

)

on commit      delete rows

本地临时表

表结构会话级可见,存储在temp表空间,不支持分区和lob类型,表名必须以#为前缀

create      temporary table #t3

(

sql_id                                   varchar(100) primary key,

sql_text                                 varchar(1000)

)

Nologging表

数据全局可见,存储在temp2空间,支持分区和lob类型

create      table t4

(

sql_id                                   varchar(100) primary key,

sql_text                                 varchar(1000)

)

nologging

3.1.4        B树索引的结构

Ø  只支持B-Tree索引,不支持Hash、位图等其他类型的索引

Ø  树的顶层是根页,根页面存放下一层每个树枝节点的最小key值

Ø  Key的顺序为升序,页面内升序搜索使用二分查找

Ø  树干节点的每个key值保存指向下层节点的指针(page id)

Ø  叶子节点每个key值存放指向数据行的指针(row id),所有key都保存索引字段值

Ø  扫描到叶子层后的横向扫描,是为了支持范围扫描

Ø  与Oracle不同,高斯的B-Tree索引中包含key为null的数据

3.2      常用数据库对象

对象

使用限制

比Oracle多的能力

1.索引列的定义长度最大为3900字节

2.不支持二级分区

3.不支持分区的合并、置换等高级能力

4.varchar最大长度是8000字节

1.不仅支持序列,还支持自增列

2.支持MySQL的二级制类型binary、varbinary和longblob

3.支持bool类型

4.支持数组、JSON类型

触发器

1.不支持语法referenceing new as new

1.支持在会话级disable所有触发器

存储过程

1.不支持自定义类型、hash表

2.930版本开始支持package

NA

视图

1.不支持对视图做DML操作

NA

序列

NA

NA

Job

1.不支持修改Job的内容,需要重建

NA

时区

1.只支持数字形式时区'+12:00'

NA

咨询锁

NA

1.不仅支持会话级,还支持事务级咨询锁

2.支持排他和共享咨询锁

同义词

NA

NA

3.3      常用系统函数&操作符

参见<<开发者指南>>。

3.4      常用高级包

包名

描述

DBMS_DEBUG

用于对存储过程(含自定义函数,触发器)的运行过程调试。

DBMS_LOB

用于处理LOB类型数据。

DBMS_LOCK

用于提供锁管理服务。

DBMS_JOB

用于执行定时任务功能。

DBMS_OUTPUT

用于调试存储过程、函数,或者在zsql命令中显示信息。

DBMS_RAFT

用于GS-Paxos主备维护的包。

DBMS_RANDOM

提供的内置随机数生成器,用于生成随机的数字、字符。

DBMS_SQL

用于执行SQL语句的包。

DBMS_STANDARD

标准包,用于事务管理、异常处理。

DBMS_STATS

用于优化统计的包。

DBMS_UTILITY

用于数据类型处理和计算的包。

3.5      常用性能视图

3.5.1        实例

视图名

视图说明

别名

DV_SYS_STATS

实例级性能数据的累计值,包括SQL的每个步骤的执行时间、产生的redo、逻辑读、物理读等数据。

V$SYSSTAT

DV_SYS_EVENTS

实例级等待事件的累计值,等待事件是重要的性能指标,一段时间的Top 等待时间反映了该时间段的性能瓶颈

V$SYSTEM_EVENT

DV_SYSTEM

当前操作系统的CPU/MEM使用情况,该数据直接从操作系统读取,包括CPU使用和虚拟内存换入换出的累计值

V$SYSTEM

DV_WAIT_STATS

data buffer       中各类型的block的等待,对应buffer busy wait等待事件

V$WAITSTAT

3.5.2        内存

视图名

视图说明

别名

DV_BUFFER_POOL_STATS

当前BUFFER_POOL的使用统计情况,显示空闲页、常驻页、脏页等数量

V$BUFFER_POOL_STATISTICS

DV_GMA

当前申请的内存信息,高斯内存是预分配,和配置的参数一致

V$SGA

DV_GMA_STATS

当前SGA内存的统计项,包括shared pool和large pool的详细统计

V$SGASTAT

DV_DC_POOLS

当前DC池的情况

V$DC_POOL

DV_PL_MANAGER

存储过程加载到内存的情况

V$PL_MANAGER

DV_LIBRARY_CACHE

共享池中SQL语句的管理信息

V$LIBRARYCACHE

DV_TEMP_POOLS

当前TEMP_POOL的分配情况

V$TEMP_POOL

DV_VM_FUNC_STACK

未释放VM申请时的函数堆栈信息,当系统发生疑似VM泄露时,可以配置_MAX_VM_FUNC_STACK_COUNT,启动该视图能力

V$VM_FUNC_STACK

3.5.3        会话、连接和事务

视图名

视图说明

别名

DV_SESSIONS

当前所有的会话情况

V$SESSION

DV_SESSION_EVENTS

会话的所有的等待事件

V$SESSION_EVENT

DV_SESSION_WAITS

会话当前的等待事件

V$SESSION_WAIT

DV_OPEN_CURSOR

当前打开的游标状态

V$OPEN_CURSOR

DV_REACTOR_POOLS

连接池和对应工作线程池信息

V$REACTOR_POOL

DV_SPINLOCKS

当前所有会话对SPINLOCK的使用情况,spin_lock是自旋锁,锁住的语句太长开销比较大 一般是控制一个结构体变量在修改时不被别人修改

V$SPINLOCK

DV_TRANSACTIONS

当前的事务信息

V$TRANSACTION

3.5.4        SQL

视图名

视图说明

别名

DV_SQLS

SQL的DML语句执行情况

V$SQLAREA

DV_SQL_POOL

当前系统SQLPOOL使用情况

V$SQLPOOL

DV_LONG_SQL

长SQL的日志

V$LONGSQL

3.5.5        锁

视图名

视图说明

别名

DV_LOCKS

当前锁资源情况

V$LOCK

DV_LOCKED_OBJECTS

锁对象的信息

V$LOCKED_OBJECT

DV_USER_ADVISORY_LOCKS

使用中的会话级咨询锁信息

V$USER_ADVISORY_LOCKS

DV_LATCH

当前结构锁的使用情况,latch一般是结构锁,有共享锁,排他锁之分,粒度大

V$LATCH

3.5.6        Segment

视图名

视图说明

别名

DV_SEGMENT_STATS

数据库中的heap和index等对象的使用情况

V$SEGMENT_STATISTICS

DV_UNDO_SEGMENTS

undo      segment队列的实时状态信息

V$UNDO_SEGMENT

DV_TEMP_UNDO_SEGMENT

所有temp      undo segment队列的实时状态信息

V$TEMP_UNDO_SEGMENT

3.5.7        HA

视图名

视图说明

别名

DV_ARCHIVE_GAPS

备用数据库上的存档间隙的信息

V$ARCHIVE_GAP

3.6      常用SQL语法

参见<<开发者指南>>。

4      应用开发

4.1      用户表空间和schema

Ø  表空间EXTENTS参数

一个extent里包含的页面数。不指定EXTENTS时,默认一个extent包含8个页面。

增大单个extent的页面数量可以提高IO性能,但如果表空间下存在小表(数据量未达到一个extent大小),会导致空间浪费。

说明:930版本会实现动态extent,那么就不用设置该参数了。

Ø  表空间AUTOEXTEND

如果使用自动扩展,对大批量的insert会有一定程度的性能损失,如果对性能要求很高,建议不使用自动扩展。

Ø  ALL-IN-MEMORY表空间

默认表空间都是页面通过databuff的hash寻址方式访问,带页面淘汰和加载的机制;内存表空间为了加速访问,把数据全部pin在内存不进行盘交换,并且使用pageid进行基于偏移的直接寻址。除系统表空间之外的所有表空间在创建时都支持指定ALL-IN-MEMORY属性。

Ø  schema默认表空间

创建schema要指定默认表空间,schema和表空间最好一一对应,方便按照表空间物理备份,不强制要求。

技术建议:

1.EXTENT对IO影响非常大,如果使用的版本未实现动态EXTENT,建议调大表的EXTENT。

2. AUTOEXTEND对大批量的INSERT会有一定程度的性能损失,建议提前扩展好。

3.内存表需要指定ALL-IN-MEMORY表空间。

4.禁止使用SYSTEM表空间保存业务对象。

4.2      表的设计

4.2.1        表的设计一般原则

设计点

建议方案

可能产生的问题

单表(非分区表)的规模

数据量<5000万,空间占用<100G

表过大会导致数据非常离散,根据索引扫描数据时物理读高,并且索引的层高也会变大

表/分区的数量

总数量<10万

Segment过多会产生大量的统计信息,系统表空间会增大,同时share pool的DC占用也会变多,buffer pool需要保存Segment头,内存消耗会增大

约束

唯一、非空约束由数据库约束保证

如果由业务保证唯一和非空约束比较麻烦,容易产生垃圾数据

列的类型

1.时间类型用日期类型,不要使用字符串

2.长字符串使用clob,而不要用varchar

时间类型使用字符串占用的空间多,处理也容易出错;列中包括长字符串容易出现行迁移和行链接

列的个数和长度

个数<200,行长度<8000字节

列过长容易出现行迁移和行链接,并且每个数据只能保留几条数据,索引扫描的效率会比较低

Extent的大小

当前还不支持动态extent,对于大表,Extent设置为1M或8M

默认extent是64K,对大表做全表扫描时IO效率低,增大extent,一次IO可以扫描更多的数据块,减少IO次数

数据的更新

避免数据更新后变长,避免大量并发更新同一个数据块,避免对索引列的大量更新

如果把数据更新后变长,容易出现行迁移和ITL等待,需要调大PCTFREE;并发更新同一个数据块可能产生大量的buffer busy wait等待;大量更新索引列也会产生大量空块和索引倾斜,update效率也会降低

数据的删除

大批量数据的删除使用删除分区的方式,而不要用delete的方式

如果使用delete方式删除大量数据,不仅效率低,而且可能导致索引产生大量空块和索引倾斜的问题

4.2.2        分区的设计

分区类型

类型说明

适用场景

示例

Range

用户创建分区,分区键大小从小到大,不能往中间插入新分区,分区键一般是date或number类型

适用日志、流水类大表,需要根据时间删除历史数据

CREATE      TABLE WSR$_LONGSQL1

(

SNAP_ID       BINARY_INTEGER             NOT NULL,

CTIME                               DATE

)

PARTITION      BY RANGE(SNAP_ID)

(PARTITION      P_0 VALUES LESS THAN (1))

Interval

用户只需要设定分区间隔和初始分区键值,根据插入的数据自动生成对应的分区,分区键一般是date或number类型

同Range分区,比Range分区使用更方便,用户不用提前创建分区,并且可以有数据时再创建分区而不用创建空分区

CREATE TABLE      WSR$_LONGSQL2

(

SNAP_ID           BINARY_INTEGER        NOT NULL,

CTIME                               DATE

)

PARTITION      BY RANGE(SNAP_ID) INTERVAL(1)

(PARTITION      P_0 VALUES LESS THAN (1))

List

分区键是离散值,分区需要用户创建

适用在分区键是离散值的场景

CREATE      TABLE WSR$_LONGSQL3

(

SNAP_ID           BINARY_INTEGER        NOT NULL,

CTIME                               DATE

)

PARTITION      BY LIST (SNAP_ID)

(PARTITION      P_0 VALUES (1))

Hash

用户设定分区键和分区数,可以自动生成分区,插入数据时根据hash算法选择对应的分区

适用于分区键取值非常多的场景,一般用于把数据隔离开,而不是为了根据分区删除数据,使用hash分区减少buffer busy wait的等待

CREATE      TABLE WSR$_LONGSQL4

(

SNAP_ID           BINARY_INTEGER        NOT NULL,

CTIME                               DATE

)

PARTITION      BY HASH (SNAP_ID) PARTITIONS 16

4.2.3        索引的设计原则

设计原则

说明

分区表不要创建全局索引

分区表一般创建本地索引(使用local关键字)。如果创建了全局索引,当删除分区时会导致索引失效

不要创建无用的索引

索引会降低DML语句的性能,所以不要创建无用的索引

不要创建冗余的索引

例如下面两个索引,如果在userid, playlistid上创建了索引,就没有必要在userid上创建一个索引。

create      index ix_ums_playcontentlist_userid on t_ums_userplaycontentlist (userid)

create      index ix_ums_playcontentlist_id on t_ums_userplaycontentlist (userid,      playlistid)

索引的key不宜过长

如果索引key过长,会导致索引树高度很大,索引查询效率会降低。对于组合索引,索引的列不宜过多。不要把长字符串列作为索引列,例如描述字段。

组合索引,要把高选择度的列放在前面

如下例所示,useraccount选择度远高于accounttype,所以应该把useraccount作为索引的首列,这样当查询条件中有useraccount而没有accounttype时仍能高效的使用索引。

create      index ix_ums_usrordlib_account_type on t_ums_userorderlib      (useraccount,accounttype)

当需要对大数据量排序时,可以通过创建索引来避免排序

场景:分页查询需要查询歌曲(总数100万),没有查询条件,查询结果需要按照musicname排序,实际绝大部分的查询是前几页。

解决方案:在musicname创建索引,通过索引全扫描来避免排序,只要不是查询的数据非常靠后,效率就很高

一般不在选择率很低的列上创建索引

一般不在状态,用户类型这种取值很少的列上创建索引。但是,有些场景却可以创建这种索引。例如,当需要查询的那部分的取值在数据中的比例很低时或者使用rownum限制了每次只查询出一小批数据。总的原则是,只要一次查询的数据在数据中的比例非常小,那么就适合使用索引。这里之所以说“一次查询”,是因为符合条件的数据可能很多,但是可能使用rownum限制了每次只查100条。

如果where语句中不得不对查询列采用函数查询,如upper函数,需要建立相应函数索引

如果查询条件在列上使用了函数,那么直接在列上创建的索引是无法使用的,必须创建对应的函数索引。如下例所示。

create      index ix_auditionauthlog_tonename on t_ums_auditionauthlog(upper(tonename))

tablespace      ringidx

4.2.4        表结构的修改

支持在线重建索引和修改表结构。索引的创建和重建当前不支持并行。

技术建议:

1.表和索引的设计对系统的性能非常关键,需要使用者理解存储结构和设计原则。

2.索引的设计一定要根据查询需求来设计。

3.分区是非常重要的特性,合理的使用分区可以大幅提升性能。

4.3      应用框架

Ø  兼容主流java连接池和Java框架

java连接池:c3p0、dbcp、druid;兼容hibenate、ibatis和mybatis。

Ø  hibenate方言

选择Oracle方言:org.hibernate.dialect.OracleDialect。

4.4      数据库接口

支持C-API,JDBC,ODBC,PYTHON和GO客户端接口。

4.5      读写分离

JDBC支持多DN的读写分离,当URL中配置多DN时,可以通过URL中的属性标示来区分JDBC返回的连接是否是区分主机和备机。

Ø  配置支持多DN读写分离

连接串格式: jdbc:zenith:rw:@{ip:port }[ , ... ][?useRW={false|true}]

连接串支持指定多个DN的ip,由“,”分割,连接串中一定全部为DN节点。

当useRW属性配置为true时,则JDBC返回的连接可以是连接主机的也可以是连接备机的连接;当useRW为false时,则JDBC返回的连接只能是主机的连接。

技术建议:

1.对于非强一致性的查询,建议读备机,减轻主机的压力。

4.6      SQL

4.6.1        使用批量绑定接口

Ø  尽量避免逐条commit

高并发逐条commit会产生大量的log file sync等待,对性能影响较大。

Ø  使用绑定变量

当前不支持cursor sharing,如果不使用绑定变量,会产生大量的硬解析。

避免使用过多的绑定变量,不推荐insert语句使用几千个value的写法。

4.6.2        返回大数据量的分批处理

如果查询结果返回很多数据,设置fetch_size非常重要,如果fetch_size过小会导致交互次数多、查询效率低;如果fetch_size过大或者全部返回,客户端程序的内存可能会撑爆。

这个特性非常重要,应用程序在返回大数据量结果集时就不要分批查询了,只要合理的设置fetch_size就可以一次查询所有数据了,由数据库分批fetch。

高斯默认的fetch_size是100,可以在语句级修改,如果结果集较大,建议修改为1000以上。

Ø  JDBC接口

java.sql.PreparedStatement.setFetchSize(int)

技术建议:

1.大批量的DML语句,建议使用批量绑定方式。

2.对于返回大结果集的查询,建议通过fetch_size分批处理,不建议业务分页查询。

3.不建议一个SQL过长或过于复杂。

4.7      提示(hint)

类型

提示名

使用说明

连接顺序

leading

指定某个表为驱动表,例如leading(a)

ordered

多表连接时指定表的连接顺序,按照from后面表的顺序连接,没有参数

连接方式

use_nl

指定表的连接方式为嵌套循环,例如use_nl(a      b),括号内顺序不重要,括号内支持多个表

use_hash

指定表的连接方式为哈希连接,例如use_hash(a      b),括号内顺序不重要,括号内支持多个表

访问路径

full

指定对某个表全表扫描,例如full(a)

index

指定对某个表使用索引扫描,按照索引的排序方式,默认正序,例如index(a       索引名)

其他

rule

指定使用RBO优化器,不能有分区表等高级特性,不能和其他提示一起使用。

技术建议:

1.提示是基于RBO的,加了提示会自动变成RBO,所以加提示要慎重,要加全套提示。

5      运维与工具

5.1      数据库管理(DM)

Database Manager是一款基于Web的数据库监控工具,提供丰富的界面展示,可有效监

控多个集群数据库。通过管理员用户和普通用户区分查看和操作权限,对集群数据库

进行安全的监控和运维操作。

Database Manager提供的主要功能包括(但不限于):

Ø  安装集群

Ø  导入并监控集群

Ø  集群、主机和实例运行监控

Ø  数据库运行监控

Ø  故障诊断分析和上报

Ø  告警分析和上报

Ø  用户管理

Ø  查询监控和TOP查询取消

Ø  巡检

5.2      集群管理(CM)

GAUSS100 OLTP CM模块主要针对分布式数据库集群进行系统管理,整个框架包括对外命令、内部的逻辑仲裁、CM与ETCD的交互以及ETCD V3分布式数据管理。

CM模块各部分功能介绍:

(1)对外命令:该部分主要包括集群管理各种场景所需要的命令行参数,可供用户根据需要手动或者自动化执行所需场景功能,第二章针对各个命令会详细介绍,这里不做赘述。

(2)逻辑仲裁:该部分主要通过主备成员关系一致性仲裁,主备倒换(switchover/failover)自动化来维护主备副本间关系,凡是涉及数据库节点的异常处理,都需要经过数据库仲裁逻辑统一进行数据库仲裁判决谁是主。

(3)CM模块与ETCD交互:该部分主要介绍CM模块与ETCD如何交互,主要是指数据的交互,分布式数据主要存储在ETCD中,通过watch机制监控,CM向ETCD订阅相关数据,同时CM也可以修改并操作ETCD中的数据。

(4)CM内部ETCD数据管理:该部分主要涉及ETCD的相关知识点,重点介绍在CM模块内部ETCD是如何管理分布式数据的。

5.3      备份恢复

Ø  备份方式、级别

①       支持物理备份

通过复制物理文件的方式对数据库进行备份,以磁盘块为基本单位将数据从主机复制到备机,每次备份数据都是以一个扇区(512 Byte)为单位来进行备份。通过备份的数据文件及归档日志等文件,数据库可以进行完全恢复。物理备份速度快,一般被用作对数据进行备份和恢复,用于全量备份的场景。通过合理规划,可以低成本进行备份与恢复

②       支持全量备份

对某一时间点上的所有数据进行完全复制,并不依赖文件的“存档”属性来确定需要备份哪些文件,在备份过程中会清除所有文档的“存档”属性。这种备份方式的优点是只要用磁带,就可以恢复丢失的数据,因此极大的加快了系统或数据的恢复时间。它的缺点在于各个全量备份磁带中的备份数据存在大量的重复信息。另外,由于每次需要备份的数据量相当大,因此备份所需时间较长。

③       支持多级增量备份

增量备份是相对于上一次备份而言的一种备份。

通过BACKUP命令进行增量备份时,它备份上一次备份后(包含全量备份、差异增量备份、累积增量备份),所有发生变化的文件。这种备份方式最显著的优点:没有重复的备份数据,因此备份的数据量不大,备份所需的时间较短。但增量备份的数据恢复比较麻烦,必须具有上一次全备份和所有增量备份磁带(一旦丢失或损坏其中的磁带,就会造成恢复的失败),并且必须沿着从全备份到依次增量备份的时间顺序逐个反推恢复,这就极大地延长了恢复时间。增量备份只支持通过BACKUP命令完成。

Ø  备份支持压缩、并行、切分

①       压缩

在备份存储空间有限或者网络备份带宽有限的场景下,需要减小备份集大小,降低资源占用;备份时对备份集进行压缩,可一定程度上减小备份集大小。GaussDB 100支持zstd,lz4和zlib压缩算法对备份集进行压缩。压缩备份时可以指定压缩级别,取值范围为[1, 9],级别越高,压缩率越高,但速度也越慢,默认压缩级别为1。

②       并行、切分

当备份介质为磁盘时,可以开启多个并发线程进行备份,以提高备份速度。并发个数取值是[1, 8]范围内的整数。不指定并发数量时,将默认启动4个并发线程。并行备份时,可指定数据文件的切分阈值,合适的切分阈值可以有效提高并行备份效率。

Ø  支持PITR、指定方案(schema)恢复

①       PITR(Point In Time Recovery)

基于时间点的恢复。依据物理备份文件加上Redo日志文件,恢复数据库到指定时间点。

通过备份集可以恢复到备份的时间点;如果备份之后产生的归档日志存在,通过继续回放归档日志,可以恢复到备份之后的时间点。

②       恢复指定schema

为了便于数据维护,可以将不同业务的数据使用不同的方案(schema)存储在数据库中,并且每个方案(schema)独立使用一个表空间。如果只有一个方案(schema)的数据损坏并需要修复,则可以通过工具ztrst实现基于全量备份文件只恢复指定方案(schema)的数据,加快恢复速度。

5.4      逻辑导入导出

5.4.1        dump/load

支持对单表的导出和导入,格式是CSV。

支持指定行列分隔符,支持多分隔符,导入支持并行。

5.4.2        exp/imp

Ø  导出格式

支持导出SQL文本和二进制方式,后者支持并行和压缩。

Ø  导出对象

支持按照用户、表、过滤条件导出数据。

支持只导出对象定义。

Ø  导入对象

导入可以转换表空间和用户名。

5.5      全量割接工具(datasync)

DataSync是GaussDB 100的数据迁移工具,致力于实现其他商业数据库向GaussDB 100高效、安全的数据同步。支持将Sybase、Oracle、MySQL、GaussDB 100 V100R003C10和SQL Server的数据迁移至GaussDB 100 V300R001数据库。

DataSync通过JDBC方式将数据导出为CSV格式,支持数据的导出、导入以及导出+导入。支持自动创建动态表、校验表结构以及使用触发器实现增量割接的能力。

5.6      逻辑复制(HDR)

支持异构数据库之间解析增量日志实现逻辑复制,支持双活。

5.7      图像化开发工具(DS)

Data Studio是一款GUI工具,可以通过它来连接数据库,调试执行SQL语句和存储过程。它支持GaussDB 100的基本特性,为数据库开发人员提供图形界面,显著提高构建应用程序的效率,并简化数据库开发及应用开发任务。

Data Studio主要为数据库开发人员提供以下功能:

【GaussDB国庆献礼】GaussDB 100 HA架构技术建议书(2)

浏览数据库对象。

创建和管理数据库对象(例如:数据库、user、表、索引)。

执行SQL语句和SQL脚本。

编辑和执行PL/SQL语句。

Data Studio的具体使用方法请参见随工具配套发布的《Data Studio用户手册》。

5.8      版本升级

支持一键式升级工具,目前还不支持滚动升级和热补丁。

5.9      SQL MAP

支持在线替换指定SQL的能力,用于规避性能问题。

--打开SQL映射功能开关。

ALTER SYSTEM SET enable_sql_map = true;

--创建一个SQL映射。

ALTER SQL_MAP (select count(*) from SYS_DUMMY) REWRITE TO (select count(1) as cnt from SYS_DUMMY);

--输入源SQL语句,实际上会映射成目标SQL语句来执行。

select count(*) from SYS_DUMMY;

CNT

--------------------

1

1 rows fetched.

5.10   性能分析工具

Ø  WSR报告

Ø  LongSQL日志或视图

Ø  性能视图

前面已经做过介绍,详情参考版本资料。

6      总结

本文系统的介绍了GaussDB 100HA架构的能力以及使用建议,可以指导用户快速的熟悉数据库。由于产品功能还在不断开发中,文中的描述可能跟实际有不一致的情况,需要获取对应版本的技术建议书。由于时间仓促,内容有限,文中内容难免会有疏漏错误,欢迎读者指正。

GaussDB

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:5月编程语言排行榜:Python、C++ 竞争白热化
下一篇:【昇腾学院】解密昇腾AI处理器--Ascend310简介
相关文章