华为云用户手册

  • 什么是湖仓一体? 虽然 数据仓库 数据湖 的应用场景和架构不同,但它们并不是对立关系。数据仓库存储结构化的数据,适用于快速的BI和决策支撑,而数据湖可以存储任何格式的数据,往往通过挖掘能够发挥出数据的更大作为,因此在一些场景上二者的并存可以给企业带来更多收益。 湖仓一体,又被称为Lake House,其出发点是通过数据仓库和数据湖的打通和融合,让数据流动起来,减少重复建设。Lake House架构最重要的一点,是实现数据仓库和数据湖的数据/元数据无缝打通和自由流动。湖里的“显性价值”数据可以流到仓里,甚至可以直接被数仓使用;而仓里的“隐性价值”数据,也可以流到湖里,低成本长久保存,供未来的数据挖掘使用。
  • 数据智能方案 数据治理中心 DataArts Studio为大型政企客户量身定制跨越孤立系统、感知业务的数据资源智能管理解决方案,实现全域数据入湖,帮助政企客户从多角度、多层次、多粒度挖掘数据价值,实现数据驱动的数字化转型。 数据治理 中心 DataArts Studio 的核心主要是 智能数据湖 FusionInsight,包含数据库、数据仓库、数据湖等各计算引擎平台,提供了数据使能的全套能力,支持数据的采集、汇聚、计算、资产管理、数据开放服务的全生命周期管理。 拥有强大的湖、仓、库引擎技术,比如数据湖敏捷构建、 GaussDB数据库 快速迁移,数仓的实时分析等,对应服务如下: 数据库: 关系型数据库包括:云数据库RDS、云数据库 TaurusDB、云数据库 GaussDB 、云数据库PostgreSQL、云数据库 SQL Server等。 非关系型数据库包括:文档数据库服务DDS、云数据库GeminiDB等。 数据仓库:云数据仓库GaussDB(DWS)。 数据湖\湖仓一体: MapReduce服务 MRS, 数据湖探索 DLI等。 数据治理中心:数据治理中心DataArts Studio。
  • GaussDB(DWS) SSD云盘和SSD本地盘的区别? SSD云盘支持后期进行扩容,推荐您使用SSD云盘。两者的区别如下: SSD云盘: 使用SSD类型的EVS作为数据存储介质,存储容量更加灵活,且可以随着数据的增长,进行磁盘扩容操作。 由于SSD云盘不和E CS 规格进行强绑定,因此可以根据实际需求进行规格调整。 SSD本地盘: 使用ECS规格自带的本地磁盘作为数据存储介质,容量固定,性能更高,但是不能对磁盘进行扩容。 在容量不足的情况下,只能够新增节点。SSD本地盘规格不允许进行规格调整。 父主题: 集群管理
  • 什么是数据仓库? 随着数据库的大规模应用,以及信息行业的数据爆炸式的增长。为了研究数据之间的关系,挖掘数据隐藏的价值,人们越来越多需要使用联机分析处理OLAP(On-Line Analytical Processing)进行数据分析,探究一些深层次的关系和信息。但是不同的数据库之间很难做到数据共享,数据之间的集成与分析也存在非常大的挑战。 为解决企业的数据集成与分析问题,数据仓库之父比尔·恩门于1990年提出数据仓库(Data Warehouse)。数据仓库主要功能是将OLTP经年累月所累积的大量数据,通过数据仓库特有的数据储存架构进行OLAP,最终帮助决策者能快速有效地从大量数据中,分析出有价值的信息,提供决策支持。自从数据仓库出现之后,信息产业就开始从以关系型数据库为基础的运营式系统慢慢向决策支持系统发展。 数据仓库相比数据库,主要有以下两个特点: 数据仓库是面向主题集成的。数据仓库是为了支撑各种业务而建立的,数据来自于分散的操作型数据。因此需要将所需数据从多个异构的数据源中抽取出来,进行加工与集成,按照主题进行重组,最终进入数据仓库。 数据仓库主要用于支撑企业决策分析,所涉及的数据操作主要是数据查询。因此数据仓库通过表结构优化、存储方式优化等方式提高查询速度、降低开销。 表1 数据仓库与数据库的对比 维度 数据仓库 数据库 应用场景 OLAP OLTP 数据来源 多数据源 单数据源 数据标准化 非标准化Schema 高度标准化的静态Schema 数据读取优势 针对读操作进行优化 针对写操作进行优化
  • 8.1.3及以上版本 8.1.3及以上版本的集群,AUTO VACUUM默认是打开的(由GUC参数autovacuum控制),用户通过设置对应的GUC参数后,系统会自动触发所有系统表和用户的行存表进行VACUUM FULL,用户不需要手动执行vacuum。 autovacuum_max_workers = 0,系统表和普通表都不会触发。 autovacuum = off,普通表不会触发,但系统表会触发。 以上仅针对行存表的AUTO VACCUM触发,如果需要针对列存表做自动触发VACUUM,还需要用户在管理控制台上配置智能调度任务。具体参见运维计划。
  • 什么是数据库? 数据库是“按照数据结构来组织、存储和管理数据的仓库”。 广义上的数据库,在20世纪60年代已经在计算机中应用了。但这个阶段的数据库结构主要是层次或网状的,且数据和程序之间具备非常强的依赖性,应用较为有限。 现在通常所说的数据库指的是关系型数据库。关系数据库是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,具有结构化程度高、独立性强、冗余度低等优点。1970年关系型数据库的诞生,真正彻底把软件中的数据和程序分开来,成为主流计算机系统不可或缺的组成部分。关系型数据库已经成为目前数据库产品中最重要的一员,几乎所有的数据库厂商新出的数据库产品都支持关系型数据库,即使一些非关系数据库产品也几乎都有支持关系数据库的接口。 关系型数据库的主要用于联机事务处理OLTP(On-Line Transaction Processing)主要进行基本的、日常的事务处理,例如银行交易等场景。
  • 什么是数据湖? 在企业内部,数据是一类重要资产已经成为了共识。随着企业的持续发展,数据不断堆积,企业希望把生产经营中的所有相关数据都完整保存下来,进行有效管理与集中治理,挖掘和探索数据价值。 数据湖就是在这种背景下产生的。数据湖是一个集中存储各类结构化和非结构化数据的大型数据仓库,它可以存储来自多个数据源、多种数据类型的原始数据,数据无需经过结构化处理,就可以进行存取、处理、分析和传输。数据湖能帮助企业快速完成异构数据源的联邦分析、挖掘和探索数据价值。 数据湖的本质,是由“数据存储架构+数据处理工具”组成的解决方案。 数据存储架构:要有足够的扩展性和可靠性,可以存储海量的任意类型的数据,包括结构化、半结构化和非结构化数据。 数据处理工具,则分为两大类: 第一类工具,聚焦如何把数据“搬到”湖里。包括定义数据源、制定数据同步策略、移动数据、编制数据目录等。 第二类工具,关注如何对湖中的数据进行分析、挖掘、利用。数据湖需要具备完善的数据管理能力、多样化的数据分析能力、全面的数据生命周期管理能力、安全的数据获取和数据发布能力。如果没有这些数据治理工具,元数据缺失,湖里的数据质量就没法保障,最终会由数据湖变质为数据沼泽。 随着大数据和AI的发展,数据湖中数据的价值逐渐水涨船高,价值被重新定义。数据湖能给企业带来多种能力,例如实现数据的集中式管理,帮助企业构建更多优化后的运营模型,也能为企业提供其他能力,如预测分析、推荐模型等,这些模型能刺激企业能力的后续增长。 对于数据仓库与数据湖的不同之处,可以类比为仓库和湖泊的区别:仓库存储着来自特定来源的货物;而湖泊的水来自河流、溪流和其他来源,并且是原始数据。 表2 数据湖与数据仓库的对比 维度 数据湖 数据仓库 应用场景 可以探索性分析所有类型的数据,包括机器学习、数据发现、特征分析、预测等。 通过历史的结构化数据进行数据分析。 使用成本 起步成本低,后期成本较高。 起步成本高,后期成本较低。 数据质量 包含大量原始数据,使用前需要清洗和标准化处理。 质量高,可作为事实依据。 适用对象 数据科学家、数据开发人员为主。 业务分析师为主。
  • 如何查看GaussDB(DWS)某个用户有哪些表的权限? 场景一:查看用户有哪些表的权限,可使用information_schema.table_privileges系统表查看。例如 1 SELECT * FROM information_schema.table_privileges WHERE GRANTEE='user_name'; 表1 table_privileges字段 字段 数据类型 描述 grantor sql_identifier 赋权用户。 grantee sql_identifier 被赋权用户。 table_catalog sql_identifier 包含该表的数据库名。 table_schema sql_identifier 包含该表的模式名。 table_name sql_identifier 表名。 privilege_type character_data 被赋予的权限类型:SELECT,INSERT,UPDATE,DELETE,TRUNCATE,REFEREN CES ,ANALYZE,VACUUM,ALTER,DROP或TRIGGER。 is_grantable yes_or_no 权限是否可赋予其他用户,YES表示可授予,NO表示不可授予。 with_hierarchy yes_or_no 是否允许在表继承层级上的特定操作。当特定操作为SELECT时显示YES,否则为NO。 如上图所示,表示用户u2拥有Schema u2下的t2的所有权限和Schema u1下的t1的SELECT权限。 需注意,在查询有哪些表权限时,information_schema.table_privileges只能查到当前用户被直接授予的权限,而函数has_table_privilege()除了能查询被直接授予的权限外还能查到间接的权限(即GRANT role to user获取的)。例如: 1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930 CREATE TABLE t1 (c1 int);CREATE USER u1 password '********';CREATE USER u2 password '********';GRANT dbadmin to u2; // 间接通过角色成员关系赋予权限GRANT SELECT on t1 to u1; // 直接授予权限SET ROLE u1 password '********';SELECT * FROM public.t1; 直接授权可以访问表 c1 ----(0 rows)SET ROLE u2 password '********';SELECT * FROM public.t1; //间接授权可以访问表 c1 ----(0 rows)RESET role; //切回到dbadminSELECT * FROM information_schema.table_privileges WHERE table_name = 't1'; // information_schema.table_privileges仅能看到直接授权 grantor | grantee | table_catalog | table_schema | table_name | privilege_type | is_grantable | with_hierarchy---------+------------+---------------+--------------+------------+----------------+--------------+---------------- dbadmin | u1 | gaussdb | public | t1 | SELECT | NO | YES(1 rows)SELECT has_table_privilege('u2', 'public.t1', 'select'); // has_table_privilege还可以看到间接授权 has_table_privilege --------------------- t(1 row) 场景二:查看用户是否有某张表的权限,可以通过以下方法。 执行以下语句查询pg_class系统表。 1 SELECT * FROM pg_class WHERE relname = 'tablename'; 查看relacl字段,该字段回显结果如下,权限参数参见表2。 "rolename=xxxx/yyyy" --表示rolename对该表有xxxx权限,且权限来自yyyy; "=xxxx/yyyy" -- 表示public对该表有xxxx权限,且权限来自yyyy。 例如下图: joe=arwdDxtA,表示joe用户有所有权限(ALL PRIVILEGES)。 leo=arw/joe,表示leo用户拥有读、写、改权限,该权限来自joe授权。 表2 权限的参数说明 参数 参数说明 r SELECT(读) w UPDATE(写) a INSERT(插入) d DELETE D TRUNCATE x REFERENCES t TRIGGER X EXECUTE U USAGE C CREATE c CONNECT T TEMPORARY A ANALYZE|ANALYSE arwdDxtA ALL PRIVILEGES(用于表) * 给前面权限的授权选项 如果要查某用户对某张表是否有某种权限,也可以通过访问权限查询函数has_table_privilege进行查询。 1 SELECT * FROM has_table_privilege('用户名','表名','select'); 例如,查询joe对表t1是否有查询权限。 1 SELECT * FROM has_table_privilege('joe','t1','select'); 父主题: 账户与权限
  • 函数形式 substrb()、substr()和substring()均为字符串截取函数,都可带两个或三个参数,用于提取字符串中指定截取的开始位置和截取的长度。函数定义如下: 123 substrb(string, from [, count])substr(string, from [, count])substring(string, from [, count]) 参数描述:从参数string中抽取子字符串,from表示抽取的起始位置,count表示抽取的字符串长度。 返回值类型:text
  • 截取单位差异 substrb(),按字节截取。 substr(),按字符截取。 substring(),按字符截取。 以utf8编码为例,1个汉字占3个字节,当使用substrb()截取长度3的子串时,只能截取到一个字符,而substr()/substring()可以截取到三个字符。 示例: 1234 SELECT substrb('data数据库',3,5),substr('data数据库',3,5),substring('data数据库',3,5); substrb | substr | substring---------+----------+----------- ta数 | ta数据库 | ta数据库
  • VACUUM和VACUUM FULL 在GaussDB(DWS)中,VACUUM的本质就是一个“吸尘器”,用于吸收“尘埃”。而尘埃其实就是旧数据,如果这些数据没有及时清理,那么将会导致数据库空间膨胀,性能下降,更严重的情况会导致异常退出。 VACUUM的作用: 空间膨胀问题:清除废旧元组以及相应的索引。包括提交的事务delete的元组(以及索引)、update的旧版本(以及索引),回滚的事务insert的元组(以及索引)、update的新版本(以及索引)、copy导入的元组(以及索引)。 FREEZE:防止因事务ID回卷问题(Transaction ID wraparound)而导致的异常退出,将小于OldestXmin的事务号转化为freeze xid,更新表的relfrozenxid,更新库的relfrozenxid、truncate clog。 更新统计信息:VACUUM ANALYZE时,会更新统计信息,使得优化器能够选择更好的方案执行SQL语句。 VACUUM命令存在两种形式,VACUUM和VACUUM FULL,目前VACUUM对行存表有作用,对列存表无显著的作用,列存表只能依靠VACUUM FULL释放空间。具体区别见下表: 表1 VACUUM和VACUUM FULL 差异项 VACUUM VACUUM FULL 空间清理 如果删除的记录位于表的末端,其所占用的空间将会被物理释放并归还操作系统。而如果不是末端数据,会将表中或索引中dead tuple(死亡元组)所占用的空间置为可用状态,从而复用这些空间。 不论被清理的数据处于何处,这些数据所占用的空间都将被物理释放并归还于操作系统。当再有数据插入后,分配新的磁盘页面使用。 锁类型 共享锁,可以与其他操作并行。 排他锁,执行期间基于该表的操作全部挂起。 物理空间 不会释放。 会释放。 事务ID 不回收。 回收。 执行开销 开销较小,可以定期执行。 开销很大,建议确认数据库所占磁盘页面空间接近临界值再执行操作,且最好选择数据量操作较少的时段完成。 执行效果 执行后基于该表的操作效率有一定提升。 执行完后,基于该表的操作效率大大提升。
  • 语法格式 指定某张表进行分析。 ANALYZE table_name; 对数据库中的所有表(非外部表)进行分析。 ANALYZE; 指定某张表进行VACUUM。 VACUUM table_name; 指定某张表进行VACUUM FULL。 VACUUM FULL table_name; 更多语法参见VACUUM和ANALYZE | ANALYSE。 如果执行VACUUM FULL命令后所占用物理空间无变化(未减少),请确认是否有其他活跃事务(删除数据事务开始之前开始的事务,并在VACUUM FULL执行前未结束)存在,如果有,需等其他活跃事务退出后进行重试。 8.1.3及以上版本中Vacuum/Vacuum Full可在管理面操作调用,详情可参见智能运维。
  • 原因分析 若直接使用REVOKE CONNECT ON DATABASE gaussdb from u1命令撤销u1用户的权限不会生效,因为数据库的CONNECT权限授予了PUBLIC,需指定关键字PUBLIC实现。 GaussDB(DWS)提供了一个隐式定义的拥有所有角色的组PUBLIC,所有创建的用户和角色默认拥有PUBLIC所拥有的权限。要撤销或重新授予用户和角色对PUBLIC的权限,可通过在GRANT和REVOKE指定关键字PUBLIC实现。 GaussDB(DWS)会将某些类型的对象上的权限授予PUBLIC。默认情况下,对表、表字段、序列、外部数据源、外部服务器、模式或表空间对象的权限不会授予PUBLIC。以下这些对象的权限会授予PUBLIC: 数据库的CONNECT权限。 CREATE TEMP TABLE权限。 函数的EXECUTE特权。 语言和数据类型(包括域)的USAGE特权。 对象拥有者可以撤销默认授予PUBLIC的权限并专门授予权限给其他用户。
  • 快照数据安全 GaussDB(DWS)的备份数据是以快照的形式存储在OBS上。OBS已通过中国数据中心联盟的可信 云安全 认证。OBS上的数据支持访问权限控制,密匙访问, 数据加密 。GaussDB(DWS)的快照数据仅用于数据的备份和恢复,无法被外界任何用户访问操作,包括GaussDB(DWS)用户本身。GaussDB(DWS)系统管理员可以通过GaussDB(DWS) Console的快照管理和公有云账单看到快照数据在OBS的空间使用情况。
  • 网络访问安全 GaussDB(DWS)的如下网络安全部署设计使租户之间实现100%的二三层网络隔离,满足政务,金融用户的高等级安全隔离需要。 GaussDB(DWS)部署在租户专属的云主机环境中,不和任何其他租户共享,从物理上隔绝了数据因为计算资源共享而被泄露的可能性。 GaussDB(DWS)集群的虚拟机通过虚拟私有云隔离,避免被其他租户发现和入侵。 网络划分为业务平面和管理平面,两个平面采用物理隔离的方式进行部署,保证业务、管理各自网络的安全性。 安全组规则保护,租户可以通过自定义安全组的功能, 配置安全域的访问规则,提供灵活的网络安全性配置。
  • 功能特点 TRUNCATE TABLE在功能上与不带WHERE子句DELETE语句相同:二者均删除表中的全部行。 TRUNCATE TABLE比DELETE速度快且使用系统和事务日志资源少: DELETE语句每次删除一行,并在事务日志中为所删除每行记录一项。 TRUNCATE TABLE通过释放存储表数据所用数据页来删除数据,并且只在事务日志中记录页的释放。 TRUNCATE,DELETE,DROP三者的差异如下: TRUNCATE TABLE,删除内容,释放空间,但不删除定义。 DELETE TABLE,删除内容,不删除定义,不释放空间。 DROP TABLE,删除内容和定义,释放空间。
  • 原因分析 扩容前,如果您没有执行vacuum清理和回收存储空间,GaussDB(DWS)数据仓库中之前被删除的数据,可能没有释放占用的磁盘空间形成脏数据,导致磁盘浪费。 而在扩容时,系统会做一次重分布,集群扩容时新节点添加完成后,原节点存储的业务数据明显多于新节点,此时系统自动在所有节点重新分布保存数据。在开始做重分布时,系统会自动执行一次vacuum,从而释放了存储空间,因此,扩容后已使用存储容量减少了很多。
  • 示例 创建表。 1 CREATE TABLE tpcds.reason_t1 AS TABLE tpcds.reason; 清空表tpcds.reason_t1。 1 TRUNCATE TABLE tpcds.reason_t1; 删除表。 1 DROP TABLE tpcds.reason_t1; 创建分区表。 1 2 3 4 5 6 7 8 910111213 CREATE TABLE tpcds.reason_p( r_reason_sk integer, r_reason_id character(16), r_reason_desc character(100))PARTITION BY RANGE (r_reason_sk)( partition p_05_before values less than (05), partition p_15 values less than (15), partition p_25 values less than (25), partition p_35 values less than (35), partition p_45_after values less than (MAXVALUE)); 插入数据。 1 INSERT INTO tpcds.reason_p SELECT * FROM tpcds.reason; 清空分区p_05_before。 1 ALTER TABLE tpcds.reason_p TRUNCATE PARTITION p_05_before; 清空13所在的分区p_15。 1 ALTER TABLE tpcds.reason_p TRUNCATE PARTITION for (13); 清空分区表。 1 TRUNCATE TABLE tpcds.reason_p; 删除表。 1 DROP TABLE tpcds.reason_p;
  • 云数据仓库解决方案 传统的数据仓库售价昂贵,设备系统选型,采购周期长,扩容复杂,整体运行成本十分高昂,因此很难为中小企业所采纳。 云数据仓库服务GaussDB(DWS)与传统的数据仓库相比,主要有以下特点与显著优势: 一款分布式MPP数据仓库云化服务,具备开放,高效,兼容,可扩展,易运维等特点。 基于GaussDB数据仓库产品内核,以云上数据仓库服务的形式将GaussDB(DWS)的能力提供给云平台上的企业用户,打造云上云下一致的数据仓库用户体验。 GaussDB(DWS)是具有国产自主知识产权的新一代分布式数据仓库系统。目前已经被广泛地应用在国内外政府,金融,运营商等行业和财富500强企业当中。该产品不仅兼容主流开源Postgres系列数据库,而且特别针对Oracle和Teradata的SQL语法进行了兼容性增强,在很多场合都可以替代国外同类型产品。 数据仓库服务工程师重点设计实现了基于行列混存的数据仓库内核,在支持海量数据快速分析的同时也很好地兼顾了业务运作系统对数据增删改的需求。引入了基于代价的查询优化器,以及当前数据仓库系统所流行的一些黑科技,包括机器码级别的向量计算,算子间和算子内的并行,节点内和节点间并行,使用LLVM优化编译查询计划的本机代码等。这些黑科技极大地提高了数据查询和分析的性能,为用户带来了更好的体验,解决了特定场景当中的业务痛点。 GaussDB(DWS)服务即开即用 相比以前动辄长达数月的数据仓库选型采购过程,在云上开通使用数据仓库服务只需要数分钟时间,简化了企业用户的购买过程,使用数据仓库的方式,降低使用数据仓库的代价和门槛,让数据仓库实实在在地走进千万家大中小企业, 让数据为企业的发展和决策提供其应有的价值。
  • 如何清理与回收GaussDB(DWS)存储空间? GaussDB(DWS)数据仓库中保存的数据在删除后,可能没有释放占用的磁盘空间形成脏数据,导致磁盘浪费、创建及恢复快照性能下降等问题,如何清理? 清理与回收存储空间对系统的影响如下: 删除无用的脏数据,释放存储空间。 数据库将进行大量读写操作,可能影响正常使用,建议选择空闲时间执行。 数据库的存储空间越大,即数据可能越多,清理的时间越长。 清理与回收存储空间操作步骤如下: 连接数据库。具体操作步骤请参见连接集群。 执行以下命令,清理与回收存储空间。 VACUUM FULL; 默认清理当前用户在数据库中,拥有权限的每一个表。没有权限的表则直接跳过回收操作。 当系统显示以下内容时,表示清理完成: 1 VACUUM VACUUM FULL回收所有过期的行空间,但是它需要对每个正在处理的表进行独占锁定,并且可能需要很长时间才能完成大型 分布式数据库 表。一般建议对指定表执行VACUUM FULL,若需要对整个数据库执行VACUUM FULL,建议在数据库维护期间操作。 使用FULL参数会导致统计信息丢失,如果需要收集统计信息,请在语句命令中加上analyze关键字。例如,执行VACUUM FULL ANALYZE;命令。 VACUUM的语法请参见《SQL语法参考》中的VACUUM章节。 父主题: 集群管理
  • 场景介绍 假设当前有用户u1~u5,在系统中有对应的同名Schema u1~u5,各用户的权限管控如下: u2作为只读用户,需要表u1.t1的SELECT权限。 u3作为插入用户,需要表u1.t1的INSERT权限。 u4作为改写用户,需要表u1.t1的UPDATE权限。 u5作为拥有所有权限的用户,需要表u1.t1的所有权限。 表1 表u1.t1的表权限分类 用户名 用户类型 Grant授权语句 查询 插入 修改 删除 u1 所有者 - √ √ √ √ u2 只读用户 1 GRANT SELECT ON u1.t1 TO u2; √ x x x u3 插入用户 1 GRANT INSERT ON u1.t1 TO u3; x √ x x u4 改写用户 1 GRANT SELECT,UPDATE ON u1.t1 TO u4; 须知: 授予UPDATE权限必须同时授予SELECT权限,否则会出现信息泄露。 √ x √ x u5 拥有所有权限的用户 1 GRANT ALL PRIVILEGES ON u1.t1 TO u5; √ √ √ √
  • 语法格式 123456 GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER | ANALYZE | ANALYSE } [, ...] | ALL [ PRIVILEGES ] } ON { [ TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA schema_name [, ...] } TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ];
  • 操作步骤 以下将演示不同权限的授权方法和验证过程。 打开窗口1(即dbadmin连接会话窗口,后续不再提示),使用系统管理员dbadmin连接DWS数据库,创建用户u1~u5(系统默认会创建u1~u5的同名SCHEMA)。 12345 CREATE USER u1 PASSWORD '{password}';CREATE USER u2 PASSWORD '{password}';CREATE USER u3 PASSWORD '{password}';CREATE USER u4 PASSWORD '{password}';CREATE USER u5 PASSWORD '{password}'; 在SCHEMA u1下创建表u1.t1。 1 CREATE TABLE u1.t1 (c1 int, c2 int); 为表中插入两条数据。 12 INSERT INTO u1.t1 VALUES (1,2);INSERT INTO u1.t1 VALUES (1,2); DWS中引入了SCHEMA层概念,如果有SCHEMA,需要先给用户赋予SCHEMA的使用权限。 1 GRANT USAGE ON SCHEMA u1 TO u2,u3,u4,u5; 给只读用户u2赋予表u1.t1的查询权限。 1 GRANT SELECT ON u1.t1 TO u2; 打开窗口2(即用户u2连接会话窗口,后续不再提示),使用用户u2连接DWS数据库,验证u2可以查询u1.t1表,但是不能写入和修改,此时u2为只读用户。 123 SELECT * FROM u1.t1;INSERT INTO u1.t1 VALUES (1,20);UPDATE u1.t1 SET c2 = 3 WHERE c1 =1; 切回窗口1,分别给u3、u4、u5赋予对应的权限。 123 GRANT INSERT ON u1.t1 TO u3; --插入用户u3,可以插入数据GRANT SELECT,UPDATE ON u1.t1 TO u4; --改写用户u4,可以修改表GRANT ALL PRIVILEGES ON u1.t1 TO u5; --拥有所有权限的用户u5,可以对表进行查询、插入、改写和删除 打开窗口3,使用用户u3连接DWS数据库,验证u3可以插入u1.t1,但是不能查询和修改,此时u3为插入用户。 123 SELECT * FROM u1.t1;INSERT INTO u1.t1 VALUES (1,20);UPDATE u1.t1 SET c2 = 3 WHERE c1 =1; 打开窗口4,使用用户u4连接DWS数据库,验证u4可以修改u1.t1,同时还可以查询,但是不能插入,此时u4为改写用户。 123 SELECT * FROM u1.t1;INSERT INTO u1.t1 VALUES (1,20);UPDATE u1.t1 SET c2 = 3 WHERE c1 =1; 打开窗口5,使用用户u5连接DWS数据库,验证u5可以查询、插入、修改和删除u1.t1,此时u5为拥有所有权限的用户。 1234 SELECT * FROM u1.t1;INSERT INTO u1.t1 VALUES (1,20);UPDATE u1.t1 SET c2 = 3 WHERE c1 =1;DELETE FROM u1.t1; 最后切回窗口1,通过函数has_table_privilege分别查询每个用户的权限。 1 SELECT * FROM pg_class WHERE relname = 't1'; 返回结果,查看relacl字段,该字段回显结果如下。"rolename=xxxx/yyyy" --表示rolename对该表有xxxx权限,且权限来自yyyy; 例如下图,与以上验证结果完全一致。 u1=arwdDxtA/u1,表示u1为owner,拥有所有权限。 u2=r/u1,表示u2拥有读权限。 u3=a/u1,表示u3拥有插入权限。 u4=rw/u1,表示u4拥有读和修改权限。 u5=arwdDxtA/u1,表示u5拥有所有权限。
  • 数据如何存储到GaussDB(DWS)? GaussDB(DWS)支持多数据源高效入库,典型的入库方式如下所示。详细指导请参见导入数据。 从OBS导入数据。 数据上传到OBS 对象存储服务 中,再从OBS中导入,支持CSV,TEXT格式数据。 通过INSERT语句直接插入数据。 用户可以通过GaussDB(DWS)提供的客户端工具(gsql)或者JDBC/ODBC驱动从上层应用向GaussDB(DWS)写入数据。GaussDB(DWS)支持完整的数据库事务级别的增删改(CRUD)操作。这是最简单的一种方式,这种方式适合数据写入量不太大, 并发度不太高的场景。 从 MRS 导入数据,将MRS作为ETL。 通过COPY FROM STDIN方式导入数据。 通过COPY FROM STDIN命令写数据到一个表。 使用GDS从远端服务器导入数据到GaussDB(DWS)。 当用户需要将普通文件系统(例如,弹性云服务器)中的数据文件导入到GaussDB(DWS)时,可以使用GaussDB(DWS)提供的GDS导入数据的功能。 使用 CDM 迁移数据到GaussDB(DWS)。 父主题: 数据迁移
  • CREATE DATABASE语法格式 12345678 CREATE DATABASE database_name [ [ WITH ] { [ OWNER [=] user_name ] | [ TEMPLATE [=] template ] | [ ENCODING [=] encoding ] | [ LC_COLLATE [=] lc_collate ] | [ LC_CTYPE [=] lc_ctype ] | [ DBCOMPATIBILITY [=] compatibility_type ] | [ CONNECTION LIMIT [=] connlimit ]}[...] ];
  • GaussDB(DWS)用户和角色是什么关系? 用户和角色在整个集群范围内是共享的,但是其数据并不共享。即用户可以连接任何数据库,但当连接成功后,任何用户都只能访问连接请求里声明的那个数据库。 角色(ROLE)本质上是一组权限的集合,通常情况下使用ROLE来组织权限,使用用户进行权限的管理和业务操作。 角色之间的权限可以继承,用户组的所有用户可自动继承对应角色的权限。 数据库中USER与ROLE的关系为:USER的权限来自于ROLE。 用户组包含了具有相同权限的用户集合。 用户可以看作是具有登录权限的角色。 角色可以看作是没有登录权限的用户。 GaussDB(DWS)提供的权限包括“管理面”各组件的操作维护权限,在实际应用时需根据业务场景为各用户分别配置不同权限。为了提升权限管理的易用性,“管理面”引入角色的功能,通过选取指定的权限并统一授予角色,以权限集合的形式实现了权限集中查看和管理。 集中权限管理中权限、角色和用户的关系如下图所示。 DWS提供多种权限,根据业务场景实际需要选择指定的权限授予不同角色,可能是一个或者多个权限对应一个角色。 通过GRANT把角色授予用户后,用户即具有了角色的所有权限。推荐使用角色进行高效权限分配。只对自己的表有所有权限,对其他用户放在属于各自模式下的表无权限。 角色A:授予操作权限A和B,用户A和用户B通过分配角色A取得对应的权限。 角色B:授予操作权限C,用户C通过分配角色B取得对应的权限。 角色C:授予操作权限D和E,用户C通过分配角色C取得对应的权限。 父主题: 产品咨询
  • 表膨胀的原因 未开启autovacuum GaussDB(DWS)提供自动执行VACUUM和ANALYZE命令的系统自动清理进程(autovacuum),用于回收被标识为删除状态的记录空间,并更新表的统计数据。 用户未开启autovacuum的同时又没有合理的自定义vacuum调度,导致表的脏数据没有及时回收,新的数据又不断插入或更新,膨胀是必然的。 资源回收不及时 开启了autovacuum,但是各种原因导致回收不及时,并且新的数据又不断产生,从而导致膨胀。回收不及时有以下原因: IO性能差 当数据库非常繁忙时,如果IO性能较差,会导致回收脏数据变慢,从而导致表膨胀。 这种情况一般出现在占用数据库内存较大的表上,并且这些表正在执行整表vacuum,因此产生大量IO,导致表自身或其他表膨胀。 autovacuum触发较迟 触发autovacuum操作的阈值设置过高,大量表上被删除、插入或更新的记录数没有及时处理,导致表膨胀。 autovacuum线程繁忙 所有自动清理线程繁忙,某些表产生的脏数据超过阈值,但是在此期间没有autovacuum线程可以处理脏数据回收的事情,可能发生表膨胀。 如果数据库的表很多,而且都比较大,那么当需要vacuum的表超过了配置autovacuum_max_workers的数量,这些表就要等待空闲的autovacuum线程。这个阶段就容易出现表的膨胀。 数据库中存在长SQL或带XID的长事务 当DWS数据库中存在未结束的SQL语句或者未结束的持有事务ID的事务,在此SQL执行时间范围内或在此事务过程中产生的脏数据无法回收,导致数据库膨胀。 开启了autovacuum_vacuum_cost_delay 在开启了autovacuum_vacuum_cost_delay后,会使用基于成本的脏数据回收策略,可以有利于降低VACUUM带来的IO影响,但是对于IO性能高的系统,开启autovacuum_vacuum_cost_delay反而会使得垃圾回收的时间变长。 autovacuum_naptime设置间隔时间过长 批量删除或更新大表 例如对于一个10GB的表,一条SQL或一个事务中删除或更新9GB的数据,这9GB的数据必须在事务结束后才能进行脏数据回收,无形中增加了膨胀的可能。
  • 相关空间回收参数说明 autovacuum = on 控制数据库自动清理进程(autovacuum)的启动。自动清理进程运行的前提是将track_counts设置为on。 log_autovacuum_min_duration = 0 当自动清理的执行时间大于或者等于某个特定的值时,向服务器日志中记录自动清理执行的每一步操作。设置此选项有助于追踪自动清理的行为。 autovacuum_max_workers = 10 设置能同时运行的自动清理线程的最大数量。 autovacuum_naptime = 1 设置两次自动清理操作的时间间隔。 autovacuum_vacuum_cost_delay = 0 设置在自动VACUUM操作里使用的开销延迟数值。 更多关于空间回收参数说明,参见自动清理。
  • 为什么GaussDB(DWS)自动快照创建很慢,很长时间都没有创建好? 自动快照备份很慢,可能是由于所需备份的数据量较大。自动快照是增量备份,备份频率是可以设置的,如果一周只备份一次,当增量数据量较大时,就会出现备份慢的情况。建议您适当地增加备份频率。 其中快照备份和恢复速率如下所示(此速率为实验室测试环境下数据,介质为SSD本地盘,仅供用户参考。在实际使用中,由于磁盘、网络、带宽等因素可能会产生一定的差异): 备份速率:200 MB/s/DN 恢复速率:125 MB/s/DN 父主题: 备份恢复
  • 减少或避免表膨胀 开启autovacuum。 提高系统的IO能力。 调整触发阈值,让触发阈值和记录数匹配。 增加autovacuum_max_workers和autovacuum_work_mem,同时增加系统内存。 IO性能较好的系统,关闭autovacuum_vacuum_cost_delay。 设计应用程序时,避免使用大批量的更新、删除操作,可以切分为多个事务进行。 应用程序设计时,尽量避免下列操作: 打开游标后不关闭。 在不必要的场景使用repeatable read或serializable事务隔离级别。 对大的数据库执行gs_dump进行逻辑备份(隐式repeatable read隔离级别的全库备份)。 长时间不关闭申请了事务号的事务(增、删、改等DDL操作的SQL)。
共99315条