GaussDB的相关小知识
1、逻辑集群
- 物理集群: 用户自己创建的集群,用户在创建表前必须先创建逻辑集群。
- 逻辑集群: 调用gs_lcctl工具来创建或使用FI界面逻辑集群功能模块创建。
- 弹性逻辑集群: 逻辑集群之外的DN自动生成,不需要用户手动创建。
特点:
- 一个物理节点只能属于一个逻辑集群,不属于逻辑集群的节点会自动划分到弹性子集群中。
- 每个CN都可以连接到所有DN,每个CN可以接受多个用户会话
- 只有有权限的用户才能访问特定逻辑集群的数据
- gs_lcctl:用于命令行的方式创建逻辑集群的工具
支持逻辑集群及多租户融合管理,逻辑集群之间资源隔离及资源弹性。
2、高斯数据库对大数据的处理
目前面临的痛点和挑战:
- 大量数据存储于HDFS,冷热数据混合查询:数仓本地存储客户较近热数据,大量历史数据归档到HDFS上,在探索式查询下需要冷热数据进行关联查询,如终端云需求;
- HDFS大数据量与GaussDB客户集群处理能力失调:冷数据量会远大于GaussDB本地存储,此时存储GaussDB本地计算能力同数据量的失调,导致查询性能无法忍受;
- 对Spark、Oracle、其他GaussDB数据的零星访问需求:需要访问的数据存在其他Spark、Oracle、 GaussDB环境中,数据迁移成本远高于收益。
冷数据是不常用数据,历史数据。热数据是常用数据,当前数据。
解决方案:
- 统一分布式查询计划:优化器对冷热数据统一生成查询执行计划,决定最小化数据扫描、实现scan、agg、Join算子下推,大量减少HDFS资源池及客户VPC间的网络流量;
- 计算资源动态估算与调度:针对SQL成本代价估算,动态申请计算资源,实现共享资源池的统一调度与管理;
- 将分布式OLAP数据分析能力扩展到HDFS中;
- 一个SQL引擎访问多个数据源:支持通过GaussDB的SQL引擎对其他Oracle、Spark、GaussDB的数据的直接访问。
数据访问包括基于Extension Connector的数据访问和基于Foreign Table的数据访问。
- 基于Extension Connector的数据访问(访问外部数据)。 Extension Connector将SQL语句发送到集群外部的Oracle数据库、Spark和其他GaussDB集群,并在当前库中返回执行结果,实现跨集群处理数据。 关键函数 -- exec_on_extension(text,text)。 第一个参数为Data Source名称,第二个参数为发送的SQL语句。 连接函数exec_on_extension通过标准的unixODBC API,调用相应目标库(Oracle、GaussDB集群和Spark集群)的ODBC驱动程序,进行实时连接,并将SQL语句发送给目标执行,执行完成后返回结果。
- 基于Foreign Table的数据访问(访问内部数据)。 HDFS上原生数据的访问,采用FDW(Foreign Data Wrapper)机制。 操作步骤: 创建Foreign Data Server来定义HDFS数据源的连接信息; 创建Foreign Table,用于在GaussDB数据库内部系统表中,定义对应的HDFS数据源上原生结构化数据表的结构。
3、内存自适应
自动调整负载来保证所有查询可以完整执行,避免出现内存分配报错问题。
- 开启内存自适应,enable_dynamic_workload需要设置为on;
- 集群有一个CN会作为中心协调节点(CCN),用于收集和调度作业执行;
- 管理员用户执行作业不受控制;
- 简单查询作业不应用自适应负载,需要通过max_active_statements来进行上限控制。
适用场景:
- 开启内存自适应以后,不再需要使用work_mem进行算子内存使用调优,多并发场景会出现语句排队的现象
- 优化器估算不是最优解,依据行数来进行估算会出现语句内存使用量低估或高估的现象。低估时,执行过程当中内存会自动扩展。高估时,会导致系统内存利用不足,排队语句增多,性能无法最优
- 列存分区表导入会消耗比较多内存资源,属于性能敏感场景,不推荐使用
- 简单查询作业: 估算值<32MB;非DML(即非INSERT、UPDATE、DELETE和SELECT)语句
4、GaussDB的基本操作
1)数据对象及数据类型
database:数据库,可以创建多个不同数据库。
schema:模式,用于管理多个用户使用同一数据库。允许多个用户使用同一数据库而不相互干扰,可以将数据库对象组织成易于管理的逻辑组,同时便于将第三方应用添加到相应的Schema下而不引起冲突。
Database和Schema实现业务的隔离,区别在于Database的隔离更加彻底
- 各个Database之间共享资源极少,可实现连接隔离、权限隔离等,Database之间无法直接互访
- Schema隔离的方式共用资源较多,可以通过grant与revoke语法便捷地控制不同用户对各Schema及其下属对象的权限
表空间类型: 普通表空间:默认为ROW表 HDFS表空间:默认为ORC表
2)基本SQL操作
GaussDB支持的语法有:
- DDL -- Data Definition Language数据定义语言。 用于定义或修改数据库中的对象。如:表、索引、视图等。 GaussDB不支持CN不完整时进行DDL操作。例如:集群中有1个CN故障时执行新建数据库、表等操作都会失败。
- DML -- Data Manipulation Language数据操作语言。 用于对数据库表中的数据进行操作。如:插入、更新、查询、删除。
- DCL -- Data Control Language数据控制语言。 用来设置或更改数据库用户或角色权限的语句。 授权(Grant)、收回权限(Revoke)、设置默认权限(ALTER DEFAULT PRIVILEGES)。
3)数据导入导出
- 使用COPY命令导入导出数据(数据量少)
- 使用INSERT命令导入数据(数据量少)
- 使用gsql元命令导入数据 gsql -p [port] -d [DB] -U [username] -W [passwd] -f [filename]
INSERT和COPY方式执行数据导入时,是一个串行执行的过程,导入性能低,因此适用于小数据量的导入。对于大数据量的导入,GaussDB支持通过外表并行导入数据到集群。
4)数据库设计
- 实际业务中,根据需要创建新的Database,不建议直接使用集群默认的postgres数据库;
- 为了适应全球化的需求,使数据库编码能够存储与表示绝大多数的字符,建议创建Database的时候使用UTF-8编码;
- 创建Database时,需要重点关注字符集编码(ENCODING)和兼容性(DBCOMPATIBILITY)两个配置项;
- GaussDB支持Teradata和Oracle两种兼容模式,分别兼容Teradata语法和Oracle语法,不同兼容模式下的语法行为可能有一些差异。
- Database的owner默认拥有该Database下所有对象的所有权限,包括删除权限。删除权限影响较大,请谨慎使用。
5)模式设计
- 从便捷性和资源共享效率上考虑,推荐使用Schema进行业务隔离。
- 建议系统管理员创建Schema和Database,再赋予相关用户对应的权限。
注意事项:
- 如果该用户不具有sysadmin权限或者不是该Schema的owner,要访问Schema下的对象,需要同时给用户赋予Schema的usage权限和对象的相应权限。
- 如果要在Schema下创建对象,需要授予操作用户该Schema的create权限。
- Schema的owner默认拥有该Schema下对象的所有权限,包括删除权限。删除权限影响较大,请谨慎使用。
6)表设计
GaussDB有三种表数据存储方式,即行存、列存、ORC存。
普通表空间:
- ORIENTATION值为COLUMN,则表的数据将以列式存储;
- ORIENTATION值为ROW,则表的数据将以行式存储;
- 若不指定, ORIENTATION默认值为ROW。
HDFS表空间:表的数据以ORC格式存储。
分布列的列值应离散分布:
- 保证数据能够均匀分布到各个DN; 例如,考虑选择表的主键为分布列,选择人员信息表中选择身份证号码为分布列。 在没有主键或没有某一列非常离散的情况下,也可以选择多分布列,以保证数据更均匀的分布到各个DN。
- 在满足第一条原则的情况下,尽量不要选取存在常量filter的列;
- 在满足前两条原则的情况,考虑选择查询中连接条件涉及的列为分布列。
- 点赞
- 收藏
- 关注作者
评论(0)