• [性能调优] 【dws产品】百亿数据表如何优化
    【功能模块】dws【操作步骤&问题现象】集群3节点,未来计划扩容到10节点。目前数据113亿条,未来大概会400亿左右。使用的DGC自动建表。一共11列,目前是列式存储,对需要检索的字段都建了索引,一共7个索引。有日期字段,建了索引了。目前根据日期,和身份信息,查询数据,大约需要6分钟。聚合去重查询,需要十几分钟。请问是单纯的节点太少的缘故,还是建表中有问题?如何优化查询效率?
  • [其他] DWS登录容器
    1.简述登录DWS服务容器,首先登录COP--》CDK中EI集群的master节点,然后使用k8s命令登录对应的容器2.DWS管控面涉及的服务或容器有命名空间(namespace)为 dwsdms-collectiondms-monitoringdwscontroller命名空间(namespace)为 ecfdbseventdbsinsightDbsmonitorecfclustermanager命名空间(namespace)为 dws-maintaindwsmaintaintool3.登录管控面CDK集群Master节点步骤1 登录ManageOne运维面OC。步骤2 选择该Region的ServiceOM。步骤3 进入计算资源->虚拟机->搜索EICommon。找到EICommon-Region-Master-01机器的地址。步骤4 使用ssh登录opsadmin用户到该机器,并切换到root。root密码为统一密码表查到的。802的默认密码:x86:XXXXXarm:XXXX803的默认密码:XXXX4.登录运维容器密文解密,mysql登录,节点登录步骤1 使用root用户登录Master节点之后(参考(三)),输入kubectl get pod –n dws-maintain。查看运维容器命名空间下的容器。步骤2 输入kubectl exec –ti {容器名} –n dws-maintain bash。进入容器。5.登录dwscontroller容器定位管控面问题查看服务日志步骤1 使用root用户登录Master节点之后,输入kubectl get pod –n dws。查看运维容器命名空间下的容器。选择dwscontroller前缀步骤2 输入kubectl exec –ti {容器名} –n dws bash。进入容器6.登录dms-monitoring,dms-collection容器定位监控面板问题查看日志步骤1 使用root用户登录Master节点之后,输入kubectl get pod –n dws。查看dws命名空间下的容器。选择dms-monitoring,dms-collection对应的前缀步骤2 输入kubectl exec –ti {容器名} –n dws bash。进入容器7.登录dbsevent,dbsinsight,dbsmonitor,ecfclustermanager容器   定位ecf集群,DWS集群状态,事件管理问题查看日志步骤1 使用root用户登录Master节点之后,输入kubectl get pod –n ecf。查看ecf命名空间下的容器。选择对应容器前缀步骤2 输入kubectl exec –ti {容器名} –n ecf bash。进入容器
  • [问题求助] GAUSSDB A,关于pg_namespace.oid问题
     在GaussDB A 中,有诸多系统表引用了pg_namespace.oid,那么这个pg_namespace.oid是在哪个系统表里定义的?如果哪张表里都没有的话,我怎么pg_namespace.nspname所对应的oid是那个?
  • [问题求助] 怎么在gaussDB函数中提交事务
    【功能模块】在函数中使用commit 报错, 在网上找pg的存储过程也不能在gauss上用, 请问函数中提交事务【操作步骤&问题现象】CREATE OR REPLACE FUNCTION "public"."test01"() RETURNS "pg_catalog"."void" AS $BODY$ DECLARE i int; BEGIN FOR i in 1..5 LOOP RAISE NOTICE 'It is now: %', now(); PERFORM pg_sleep(0.1); COMMIT; END LOOP; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [其他] 【8.0.2】通过cloudscope从CDK查询DWS服务组件参数信息
         1.获取cop,从FCD工程(平台自动化运维)导出表LLB中获取,地址是cloudscope+局点全局域名     2.使用op_cdk_sso/Huawei12#$登录,密码如果被修改,请使用修改后的密码     3.运维服务--》变更管理--》CloudAutoDeploy cdk     4.管理管理--》服务查询--》集群选择 ei_dbs_xxx 命名空间选dws/ecf    第一行的三个需要选择对应的region   第二行:选择ei-dbs-xxx等ei开头的选择dws/ecf       5.查询参数,比如获取后台数据库连接信息 使用db.模糊匹配    
  • [其他] 【8.0.3】通过cloudscope从CDK查询DWS服务组件参数信息
         1.获取cop,从FCD工程(平台自动化运维)导出表LLB中获取,地址是cloudscope+局点全局域名     2.使用op_cdk_sso/Huawei12#$登录,密码如果被修改,请使用修改后的密码       3.运维服务--》变更管理--》CloudAutoDeploy cdk     4.变更管理--》服务升级--》集群选择 ei_dbs_xxx 命名空间选dws/ecf       5.选择对应的服务,下一步,就可以查看参数信息,在右侧可以 在“请输入参数名称”进行模糊匹配 
  • [进阶宝典] 【云小课】运筹帷幄-GaussDB(DWS)教你分析阻塞SQL的几个妙招
    在开发过程中,开发者常遇到SQL连接数超限、SQL查询时间过长、SQL查询阻塞等问题,您可以通过PG_STAT_ACTIVITY视图来分析和定位SQL问题,以下展示常用的一些定位思路。表1 部分PG_STAT_ACTIVITY字段名称类型描述usenamename登录该后端的用户名。client_addrinet连接到该后端的客户端的IP地址。 如果此字段是null,则表示通过服务器机器上UNIX套接字连接客户端或者这是内部进程,如autovacuum。application_nametext连接到该后端的应用名。statetext后端当前总体状态。可能值是:active:后台正在执行查询。idle:后台正在等待新的客户端命令。idle in transaction:后端在事务中,但事务中没有语句在执行。idle in transaction (aborted):后端在事务中,但事务中有语句执行失败。fastpath function call:后端正在执行一个fast-path函数。disabled:如果后端禁用track_activities,则报告此状态。普通用户只能查看到自己帐户所对应的会话状态。即其他帐户的state信息为空。waitingboolean如果后端当前正等待锁则为true。enqueuetext语句当前排队状态。可能值是:waiting in queue:表示语句在排队中。waiting in global queue:表示语句在全局排队中。waiting in respool queue:表示语句在资源池排队中。waiting in ccn queue:表示作业在CCN排队中。空:表示语句正在运行。pidbigint后端线程ID。查看连接信息通过以下SQL就能确认当前的连接用户、连接地址、连接应用、状态、是否等待锁、排队状态以及线程id。SELECT usename,client_addr,application_name,state,waiting,enqueue,pid FROM PG_STAT_ACTIVITY WHERE DATNAME='数据库名称';回显如下usename | client_addr | application_name | state | waiting | enqueue | pid ---------+---------------+------------------+--------+---------+---------+----------------- leo | 192.168.0.133 | gsql | idle | f | | 139666091022080 dbadmin | 192.168.0.133 | gsql | active | f | | 139666212681472 joe | 192.168.0.133 | | idle | f | | 139665671489280 (3 rows)中止某个会话连接(仅系统管理员有权限)SELECT PG_TERMINATE_BACKEND(pid);查看SQL运行信息获取当前用户执行SQL信息:SELECT usename,state,query FROM PG_STAT_ACTIVITY WHERE DATNAME='数据库名称';回显如下,如果state为active,则query列表示当前执行的SQL语句,其他情况则表示为上一个查询语句。usename | state | query ---------+--------+--------------------------------------------------------------------------- leo | idle | select * from joe.mytable; dbadmin | active | SELECT usename,state,query FROM PG_STAT_ACTIVITY WHERE DATNAME='gaussdb'; joe | idle | GRANT SELECT ON TABLE mytable to leo; (3 rows)查看当前正在运行(非idle)的SQL信息:SELECT datname,usename,query FROM PG_STAT_ACTIVITY WHERE state != 'idle' ;查看耗时较长的语句查看当前运行中的耗时较长的SQL语句SELECT current_timestamp - query_start as runtime, datname, usename, query FROM PG_STAT_ACTIVITY WHERE state != 'idle' order by 1 desc;查询会返回按执行时间长短从大到小排列的查询语句列表。第一条结果就是当前系统中执行时间最长的查询语句。runtime | datname | usename | query -----------------+----------+---------+----------------------------------------------------------------------------------------------------------------------------------------- 00:04:47.054958 | gaussdb | leo | insert into mytable1 select generate_series(1, 10000000); 00:00:01.72789 | gaussdb | dbadmin | SELECT current_timestamp - query_start as runtime, datname, usename, query FROM PG_STAT_ACTIVITY WHERE state != 'idle' order by 1 desc; (2 rows)若当前系统较为繁忙,可以通过限制current_timestamp - query_start大于某一阈值来查看执行时间超过此阈值的查询语句。SELECT query from PG_STAT_ACTIVITY WHERE current_timestamp - query_start > 2;查看处于阻塞状态的语句查看当前处于阻塞状态的查询语句:SELECT pid, datname, usename, state, query FROM PG_STAT_ACTIVITY WHERE state <> 'idle' and waiting=true;执行以下语句结束到阻塞的SQL会话。SELECT PG_TERMINATE_BACKEND(pid);大部分场景下,阻塞是因为系统内部锁而导致的,waiting字段才显示为true,此阻塞可在视图pg_stat_activity中体现。在一些少数场景下,例如写文件、定时器等情况的查询阻塞,不会在视图pg_stat_activity中体现。查看阻塞的查询语句及阻塞查询的表、模式信息SELECT w.query as waiting_query, w.pid as w_pid, w.usename as w_user, l.query as locking_query, l.pid as l_pid, l.usename as l_user, t.schemaname || '.' || t.relname as tablename from pg_stat_activity w join pg_locks l1 on w.pid = l1.pid and not l1.granted join pg_locks l2 on l1.relation = l2.relation and l2.granted join pg_stat_activity l on l2.pid = l.pid join pg_stat_user_tables t on l1.relation = t.relid where w.waiting;该查询返回会话ID、用户信息、查询状态,以及导致阻塞的表、模式信息。查询到阻塞的表及模式信息后请根据会话ID结束会话。SELECT PG_TERMINATE_BACKEND(pid);想要了解更多华为云数据仓库GaussDB(DWS),请猛戳!!!
  • [运维管理] 【DWS产品】【限流功能】temp_file_limit 是限制单个落盘文件大小,还是整体大小 ?
    业务现象:    数据湖集群参数做了一些调整,temp_file_limit  限制为 300GB ,  业务有一个JOB做全量数据操作,报出如下错误。当然可能的确是业务的语句有些问题导致的,需要拆分进行处理 。 但是这里  temp_file_limit = 300GB  是限制单个文件大小,报这个错误,是说明一个操作只会生成一个文件 ?  还是说可以生成多个文件, 只是这个值是控制所有文件总大小的  ?    附 :   temp_file_limit  说明   参数说明:限制一个会话中,触发落盘操作时,单个落盘文件的空间大小。例如一次会话中,排序和哈希表使用的临时文件,或者游标占用的临时文件。  此设置为会话级别的落盘文件控制,请参考表1中的spillsize使用。  该参数属于SUSET类型参数,请参考表1中对应设置方法进行设置。 SQL查询执行时使用的临时表空间不在此限制。取值范围:整型,单位为KB。其中-1表示没有限制。默认值:-1
  • [问题求助] gaussdb使用dsc转换dsql转换出来的脚本变成了存储过程
    【功能模块】【操作步骤&问题现象】1、通过dsc工具进行脚本迁移的时候。dsql脚本转换出来以后格式变成了存储过程。【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [开发应用] 【GaussDB 8.0】【copymanger功能】 使用copyout时如何分批次获取流数据
    使用copymanager的copyout方法时如下:CopyManager cp = new CopyManager(connect);ByteArrayOutputStream os = new ByteArrayOutputStream();cp.copyOut("COPY ("+sql+") TO STDOUT",os);上述代码想实现控制读取一部分数据流后,传入给copyin的方法将数据提交一部分。目前未找到如何控制流分批次获取数据。最开始办法是通过statement执行sql语句查询,然后获取结果集通过按照字段加分隔符方式拼接一部分数据,拼接后数据通过copyin方法加载 。通过select方式主要设置fetchsize参数,然后可以通过fetchsize参数大小确定拼接该批次数据。通过8.0的文档查看到有copyout方式,目前想通过copyout方式实现文件不落地,将数据分批次获取,通过内存中流直接传入给copyin方式。如何控制分批次获取数据?
  • [交流吐槽] Hadoop数据仓库之数据治理
    1.数据治理是什么?数据治理:为公司业务越来越复杂而带来的数据越来越脏、乱、差的问题,而提出一套治理数据的方法+工具集2. 数据治理的内容这一部分,我将从六个方面来讲解数据治理的内容。2.1 数据标准定义数据维度及指标需要清晰的、统一的、标准的定义。(这里的部分参考Hadoop数仓建设之指标管理的文章,我这里列举一些例子)维护业务术语库:要做到见名知义,同名同义、不同名不同义,公司命名尽量统一。表命名规范:数据分层(ods/dwd/dwm/app)、采集周期(hour/day/week/month)、全量/增量(whole/increment)指标命名规范: 原子指标 = 业务术语库 + 历史指标名;派生指标 = 统计周期+统计粒度+业务限定+原子指标。维度命名规范:公司维度名=业务系统透传 + 业务术语库 + 历史字段名数据类型:bigint、string、decimal ,备注comment。2.2 数据模型规范按业务领域拆解业务过程,根据业务过程设计数据模型,高内聚低耦合,尽量能够支撑未来扩展,一般采用维度建模+宽表模型,记得数据分层。一般模型确定过程如下:确定业务过程确定粒度确定维度定义指标2.3 数据开发规范在数据开发过程中有几点需要注意:编程规范,代码质量、运行稳定,SQL效率。如大数据之路中所述,过程一般分为以下几个部分:开发、测试、CodeReview、[修改优化、测试、CodeReview]、审批、上线。2.4 数据质量管理保证数据可用、权威(数据的完整性、准确性、一致性、及时性)从上游采集、中间的数据加工,下游的数据服务都需要一套质量检测工具来保障准确性、完整性、一致性、及时性。指标预测(根据历史数据预测当日指标数据与当日实际指标数据比对)数据剖析2.5 元数据管理数据表的血缘关系使用频率统计(对使用频次低的表进行管理)表的生命周期(存储需要成本,定期清理,归档)2.6 数据安全数据安全意识最重要!对数据的安全等级、数据脱敏、表(列)级权限控制、(访问日志)安全审计制定详细的规则。为数据的合规使用制定规范,必须在合规范围内安全使用数据。3. 参考资料《大数据之路》《hadoop构建数据仓库》
  • [进阶宝典] 【云小课】打造企业数据“高内聚,低耦合”--试试GaussDB(DWS)逻辑集群,实现数据物理隔离
    逻辑集群是什么?传统的企业数仓数据,往往是各种业务数据集成到同一个数据仓库集群中,不同业务数据根据集群中的数据库或表中进行区分,实际上所有业务数据还是在同一个数仓中,会存在以下问题,具体表现在:数仓的数据规模越来越大,表越来越多。不同业务访问数仓过程中会带来资源的竞争,比如CPU、内存、磁盘IO、网络的竞争。虽然通过配置资源池可以一定程度解决资源竞争,但所有业务执行逻辑仍然同时在每个节点上执行,无法做到资源完全隔离。事实上,同一业务的不同作业总是倾向访问本业务相关的表,对其他业务的表访问较少,如果能做到业务内数据“高内聚”,业务间“低耦合”无疑是更好的选择。数据库表无论大小都被切分到所有节点,对小表来说,数据过于分散。当节点规模达到一定程度后,通过增加更多节点,提高查询并行度的方式可能就无法带来理想的扩展性了。如果为了避免集群变大,将不同业务数据拆分成独立集群,集群间数据互访就需要从应用层解决,或者需要跨集群导数。   逻辑集群实现了一个大集群按节点拆分,将大集群中所有节点分组,每个节点组构建一个逻辑集群,可以很好的解决上面所述的问题。逻辑集群是基于Node Group机制来划分物理节点的一种集群模式,从节点层次将大集群进行划分,和数据库形成交叉。一个数据库中的表可以按逻辑集群来分配到不同的物理节点,而一个逻辑集群也可以包含多个数据库的表。在划分逻辑集群后,整个数据库中对象间的层次关系如下图所示:在实际业务场景中,建议用户尽可能将同一个数据库的表创建到同一个逻辑集群中。                     该功能受限商用,如需使用,请在技术人员指导下进行。弹性集群弹性集群是指在逻辑集群模式下,非逻辑集群节点组成的集群并且总是存在。弹性集群的名称为elastic_group,是一个特殊的Node Group,可以包含多个或不包含任何DN节点。弹性集群不能用户手动创建,在物理集群下第一次创建逻辑集群时自动创建弹性集群,物理集群中所有不属于逻辑集群的物理节点都会加入弹性集群。后续逻辑集群创建所需的DN节点都是来自弹性集群中。因此,为了能够创建新的逻辑集群,需要保证弹性集群中有DN节点存在(在物理集群模式下第一次创建逻辑集群时不需要)。           用户可以通过扩容向弹性集群添加新的物理节点。权限说明逻辑集群创建权限(CREATE ON NODE GROUP)允许授予任何用户/角色,创建权限后可在对应的逻辑集群上进行创建表等相关操作。     允许修改表的owner为任何用户,但对表进行操作时,需要检查对应的schema和nodegroup权限。系统管理员可以关联到特定逻辑集群,并在多个逻辑集群中创建表。        允许将系统管理员权限授予关联了逻辑集群的用户,但同样遵循建表规则。非表对象(schema/sequence/function/trigger等)的访问不再检查逻辑集群权限。逻辑集群用户如果有创建数据库权限也可创建数据库。系统中的资源池必须关联到特定逻辑集群。               逻辑集群删除时只删除表、外表,资源池对象,其他对象不会删除。         逻辑集群有哪些注意事项?如何进入逻辑集群页面?登录GaussDB(DWS) 管理控制台。在集群列表中单击指定集群名称。进入集群“基本信息”页面,打开“逻辑集群开关”,出现“逻辑集群管理”页签。    4. 切换至逻辑集群页面,用户可进行相关操作。逻辑管理相关操作    想要了解更多华为云数据仓库GaussDB(DWS),请猛戳!!!
  • [专家秘籍] 【云小课】不可不知的调优技巧-GaussDB(DWS)表结构优化
    合理的表结构可以带来稳定和高效的性能,但是反过来说,如果表结构不合理,就可能会引起比较大的性能问题或者额外的工作成本。如何设计和优化一张表呢?GaussDB(DWS)带你一起来学习调优表的关键技巧。了解GaussDB(DWS)表设计的六个关键要素,就能很快发现调优表的技巧。选择存储方式表的存储方式分为行存储和列存储。                   左图直观的展示了存储方式的差异,但是建表时怎么决定用行存储还是列存储呢?      用户业务类型是决定表的存储类型的主要因素,可以根据以下业务场景选择:创建列存表示例:创建表warehouse_t1,存储方式为列存通过ORIENTATION参数指定。CREATE TABLE warehouse_t1 ( W_WAREHOUSE_SK INTEGER NOT NULL, W_WAREHOUSE_ID CHAR(16) NOT NULL, W_WAREHOUSE_NAME VARCHAR(20) , W_WAREHOUSE_SQ_FT INTEGER , W_STREET_NUMBER CHAR(10) , W_STREET_NAME VARCHAR(60) , W_STREET_TYPE CHAR(15) , W_SUITE_NUMBER CHAR(10) , W_CITY VARCHAR(60) , W_COUNTY VARCHAR(30) , W_STATE CHAR(2) , W_ZIP CHAR(10) , W_COUNTRY VARCHAR(20) , W_GMT_OFFSET DECIMAL(5,2) ) WITH (ORIENTATION = COLUMN);选择压缩比对于数据库,IO 相对于CPU通常都是系统的性能瓶颈,合理的压缩手段不仅能节省空间,也能减少IO,提高读取性能。针对行存和列存,在数据入库的时候有不同的压缩比,进而入库的性能也会不同。对于I/O读写量大,CPU富足(计算相对小)的场景,选择高压缩比;反之选择低压缩比。依据此原则进行不同压缩下的测试和对比,以选择符合自身业务情况的最优压缩比。压缩比通过COMPRESSION参数指定,其中列存表取值为:YES/NO/LOW/MIDDLE/HIGH,默认值为LOW。选择压缩比可根据以下业务场景选择:创建使用压缩比的表示例:创建列存表warehouse_t2,压缩比通过COMPRESSION参数指定。CREATE TABLE warehouse_t2 ( W_WAREHOUSE_SK INTEGER NOT NULL, W_WAREHOUSE_ID CHAR(16) NOT NULL, W_WAREHOUSE_NAME VARCHAR(20) , W_WAREHOUSE_SQ_FT INTEGER , W_STREET_NUMBER CHAR(10) , W_STREET_NAME VARCHAR(60) , W_STREET_TYPE CHAR(15) , W_SUITE_NUMBER CHAR(10) , W_CITY VARCHAR(60) , W_COUNTY VARCHAR(30) , W_STATE CHAR(2) , W_ZIP CHAR(10) , W_COUNTRY VARCHAR(20) , W_GMT_OFFSET DECIMAL(5,2) ) WITH (ORIENTATION = COLUMN, COMPRESSION=MIDDLE);选择分布方式和分布列GaussDB(DWS)支持REPLICATION和HASH分布。---复制表(Replication)将表中的全量数据在集群的每一个DN实例上保留一份,即每个数据节点都有完整的表数据。---哈希(Hash)表将表中某一个或几个字段进行hash运算后,生成对应的hash值,通过映射,把数据分布到指定DN。对于Hash分布表,在读/写数据时可以利用各个节点的IO资源,大大提升表的读/写速度。选择分布方式可根据以下业务场景选择:Hash分布表的分布列选取至关重要,需要满足以下原则:列值应比较离散,以便数据能够均匀分布到各个DN。例如,考虑选择表的主键为分布列,如在人员信息表中选择身份证号码为分布列。在满足第一条原则的情况下尽量不要选取存在常量filter的列。例如,表dwcjk相关的部分查询中出现dwcjk的列zqdh存在常量的约束(例如zqdh=’000001’),那么就应当尽量不用zqdh做分布列。在满足前两条原则的情况,考虑选择查询中的连接条件为分布列,以便Join任务能够下推到DN中执行,且减少DN之间的通信数据量。对于Hash分表策略,如果分布列选择不当,可能导致数据倾斜,查询时出现部分DN的I/O短板,从而影响整体查询性能。因此在采用Hash分表策略之后需对表的数据进行数据倾斜性检查,以确保数据在各个DN上是均匀分布的。可以使用以下SQL检查数据倾斜性:select xc_node_id, count(1) from tablename group by xc_node_id order by xc_node_id desc;其中xc_node_id对应DN,一般来说,不同DN的数据量相差5%以上即可视为倾斜,如果相差10%以上就必须要调整分布列。创建Replication/Hash分布表示例:创建行存表warehouse_t3,Replication分布方式通过DISTRIBUTE BY参数指定。CREATE TABLE warehouse_t3 ( W_WAREHOUSE_SK INTEGER NOT NULL, W_WAREHOUSE_ID CHAR(16) NOT NULL, W_WAREHOUSE_NAME VARCHAR(20) , W_WAREHOUSE_SQ_FT INTEGER , W_STREET_NUMBER CHAR(10) , W_STREET_NAME VARCHAR(60) , W_STREET_TYPE CHAR(15) , W_SUITE_NUMBER CHAR(10) , W_CITY VARCHAR(60) , W_COUNTY VARCHAR(30) , W_STATE CHAR(2) , W_ZIP CHAR(10) , W_COUNTRY VARCHAR(20) , W_GMT_OFFSET DECIMAL(5,2) ) DISTRIBUTE BY REPLICATION;示例:创建列存表warehouse_t4,Hash分布方式通过DISTRIBUTE BY参数指定,分区键为W_WAREHOUSE_SK。CREATE TABLE warehouse_t4 ( W_WAREHOUSE_SK INTEGER NOT NULL, W_WAREHOUSE_ID CHAR(16) NOT NULL, W_WAREHOUSE_NAME VARCHAR(20) , W_WAREHOUSE_SQ_FT INTEGER , W_STREET_NUMBER CHAR(10) , W_STREET_NAME VARCHAR(60) , W_STREET_TYPE CHAR(15) , W_SUITE_NUMBER CHAR(10) , W_CITY VARCHAR(60) , W_COUNTY VARCHAR(30) , W_STATE CHAR(2) , W_ZIP CHAR(10) , W_COUNTRY VARCHAR(20) , W_GMT_OFFSET DECIMAL(5,2) ) WITH (ORIENTATION = COLUMN, COMPRESSION=MIDDLE) DISTRIBUTE BY HASH (W_WAREHOUSE_SK);分区的设计分区表是把逻辑上的一张表根据某种方案分成几张物理块进行存储。这张逻辑上的表称之为分区表,物理块称之为分区。分区表是一张逻辑表,不存储数据,数据实际是存储在分区上的。分区表和普通表相比具有以下优点:---改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索效率。---增强可用性:如果分区表的某个分区出现故障,表在其他分区的数据仍然可用。---方便维护:如果分区表的某个分区出现故障,需要修复数据,只修复该分区即可。GaussDB(DWS)支持的分区表为范围分区表:将数据基于范围映射到每一个分区。这个范围是由创建分区表时指定的分区键决定的。分区键经常采用日期,例如将销售数据按照月份进行分区。分区使用示例:---创建分区表 CREATE TABLE demo_partition( id varchar(50), start_time timestamp without time zone ) with (orientation=column, compression=low) distribute by hash(id)Partition by range (start_time) ( partition p1 values less than ('2019-04-11 00:00:00'), partition p2 values less than ('2019-04-12 00:00:00'), partition p3 values less than ('2019-04-19 00:00:00'), partition p4 values less than (MAXVALUE) ); ---删除最大分区pmx ALTER TABLE demo_partition DROP partition pmx; ---增加分区 ALTER TABLE demo_partition add partition p4 values less than('2019-04-20 00:00:00'); ---删除某个分区中的数据 ALTER TABLE demo_partition truncate partition p1; ---查询某个分区的行数 SELECT count(1) FROM demo_partition partition(p1); ---分割某个分区(目前只有行存支持,列存不支持此功能) ALTER TABLE demo_partition split partition p3 at('2019-04-15 00:00:00') into( partition p31, partition p32 ); ---合并分区 ALTER TABLE demo_partition merge partitions p1,p2 into partition p12;选择索引索引可以用来提高数据查询性能,但是不恰当的使用将导致数据性能下降。建议仅在匹配如下某条原则时创建索引:经常执行查询的字段在连接条件上创建索引Where子句的过滤条件上经常出现在order by,group by和distinct字段DWS索引支持:Btree索引:使用一种类似B+树的结构来存储数据的键值,通过这种结构能够快速的查找索引。Btree适合支持比较查询和查询范围。但因为其本身的数据结构,当数据量非常大的时候,每条数据的入库速度会变得越来越慢,占用的内存也会越来越大,严重的影响了入库性能。GIN索引是倒排索引,可以处理包含多个键的值(比如数组)。Gist适用于几何和地理等多维数据类型和集合数据类型。Psort:针对列存表进行局部排序索引。行存表支持的索引类型:btree(行存表缺省值)、gin、gist;列存表支持的索引类型:Psort(列存表缺省值)、btree、gin。索引使用示例:---在表上创建一个索引 CREATE INDEX test-index on test using btree(vid); ---在分区表上创建分区索引 CREATE INDEX test-index on test using btree(vid) local; ---重建索引 ALTER INDEX test-index rebuild; ---设置索引不可用 ALTER INDEX test-index unusable; ---删除索引 DROP INDEX test-index;选择局部聚簇局部聚簇(Partial Cluster Key)是列存下的一种技术。该技术可以通过min/max稀疏索引较快的事先基表扫描的filter过滤。局部聚簇可以指定多列,但是不建议超过2列,选择原则如下:---受基表的简单表达式约束。这种约束一般形如col op const,其中col为列名,op为操作符=,<,>,<=,>=,const为常量值。---尽量采用选择度比较高(过滤更多数据)的简单表达式的列。---尽量把选择度比较低的约束列放在局部聚簇中的前面。---尽量把枚举类型的列放在局部聚簇的前面。局部聚簇使用示例:---创建一个带局部聚簇列的表 CREATE TABLE test(id int,volume text,partial cluster key (volume)) with (orientation=column, compression=low) distribute by hash (id); ---为普通表创建一个PCK,并使其生效 ALTER TABLE table_name add partial cluster key (column_name); VACUUM FULL table_name; ---删除表中的局部聚簇列: ALTER TABLE table_name drop constraint partial_cluster_key_name;基于这些关键要素的掌握,您可以改进表的分配,以达到您所期望的数据加载、存储和查询方面的效果。了解更多华为云数据仓库GaussDB(DWS),请点击这里。
  • [性能调优] gaussDB row_number WindowAgg 算子不下推,导致性能非常差,如何解决?
    我有一个 row_number 的分组排序函数,并且只取每个分组排序的第一个值。这张表有4亿数据,且 fea_id 的个数是10个。sql 语句及执行计划如下,为什么这个语句的 WindowAgg 算子不下推,以及,有什么办法能够让它强制下推呢? WindowAgg 不下推,性能实在是太差了。 ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/05/1058011yrjxxkktv1stn2g.jpeg) PS: 1 有的时候,通过 analyse table_a,更新一下统计信息,row_number 的执行计划就会从不下推变成下推执行,但是上面的例子,不起作用。 2 即使是通过 analyse 操作,让算子的代价评估更准确,然后更有可能下推,但是依然存在评估没有那么准确的时候,怎么强制让这个语句下推呢?就像对于 group by 操作,可以通过 best_agg_plan 参数来强制在 DN 上做预聚合一样。
  • [其他] GaussDB的技术发展以及在金融核心数据库国产化的最佳实践丨DAMS峰会
    2021 DAMS中国数据智能管理峰会即将于11月5日在上海盛大举办,为大家带来大数据、数据资产管理、数据库、运维、金融科技等领域的先进理念和最佳实践。其中,来自华为云的两位专家老师将分享GaussDB在技术、商业、生态上的发展规划,以及在金融核心业务场景中的“去O”实战与思考,一起来先睹为快:以上议题内容将会在2021 DAMS中国数据智能管理峰会 - 上海站完整呈现,更多关于大数据、数据治理、数据资产管理、数据库、数仓、**、AIOps、DataOps、Fintech金融科技等互联网大厂及大型商业银行实战经验,都可以在11月5日的DAMS峰会一次性看全。    峰会议程       码上报名   
总条数:2746 到第 页
上滑加载中