• [SQL] GaussDB(DWS) SQL主题博文汇总,欢迎在评论区交流探讨~
    GaussDB(DWS)  SQL相关博文汇总,欢迎在评论区交流探讨~序号主题分类博文题目博文链接1SQLGaussDB(DWS)性能调优:列存表scan性能优化https://bbs.huaweicloud.com/blogs/1754582SQLGaussDB(DWS)性能调优基础篇一:万物之始analyze统计信息https://bbs.huaweicloud.com/blogs/1920293SQLGaussDB for DWS内存自适应控制技术介绍https://bbs.huaweicloud.com/blogs/1763264SQLGaussDB(DWS)的stream执行机制https://bbs.huaweicloud.com/blogs/1763475SQL分布式数据存储倾斜快速检测https://bbs.huaweicloud.com/blogs/1835856SQL华为云数仓GaussDB(DWS)内存知识梳理https://bbs.huaweicloud.com/blogs/1847257SQL华为云数仓GaussDB(DWS)之地理数据库: PostGIS介绍(一)https://bbs.huaweicloud.com/blogs/1904108SQL数据仓库中数据模型以及ETL算法https://bbs.huaweicloud.com/blogs/1850829SQLGaussDB(DWS)的explain performance详解https://bbs.huaweicloud.com/blogs/19343410SQL拿走磁盘也甭想读数据——透明加密保安全https://bbs.huaweicloud.com/blogs/19492411SQLGaussDB(DWS)TD与Oracle兼容模式差异https://bbs.huaweicloud.com/blogs/17636112SQLUnique SQL特性原理与应用https://bbs.huaweicloud.com/blogs/19729913SQLGaussDB(DWS)性能调优系列实战篇二:十八般武艺之坏味道SQL识别https://bbs.huaweicloud.com/blogs/197413 14SQLGaussDB(DWS)性能调优系列基础篇二:大道至简explain分布式计划https://bbs.huaweicloud.com/blogs/19794515SQLGaussDB(DWS)性能调优系列基础篇三:衍化至繁之分布式计划详解https://bbs.huaweicloud.com/blogs/20044916SQLGaussDB(DWS)性能调优系列实战篇一:十八般武艺之总体调优策略https://bbs.huaweicloud.com/blogs/20090617SQLGaussDB(DWS)性能调优系列实战篇三:十八般武艺之好味道表定义https://bbs.huaweicloud.com/blogs/20321918SQLGaussDB(DWS)数据库安全系列之通信安全https://bbs.huaweicloud.com/blogs/20321419SQLGaussDB(DWS)性能调优系列实战篇四:十八般武艺之SQL改写https://bbs.huaweicloud.com/blogs/203420 20SQLPB级数仓GaussDB(DWS)性能黑科技之并行计算技术解密https://bbs.huaweicloud.com/blogs/20342621SQL你应该知道的数仓安全——默认权限实现共享schemahttps://bbs.huaweicloud.com/blogs/20732622SQLGaussDB(DWS)性能调优系列实战篇五:十八般武艺之路径干预https://bbs.huaweicloud.com/blogs/21245923SQLGaussDB(DWS)性能调优系列实现篇六:十八般武艺Plan hint运用https://bbs.huaweicloud.com/blogs/21319524SQL“2020华为数智金融论坛”成功举办,金融界精英共话行业未来https://bbs.huaweicloud.com/blogs/21593425SQLGaussDB(DWS)表权限案例集锦https://bbs.huaweicloud.com/blogs/22399126SQL从COALESCE看数据库差异https://bbs.huaweicloud.com/blogs/22603727SQL初窥自定义C函数https://bbs.huaweicloud.com/blogs/22722028SQL通用唯一识别码的介绍和使用https://bbs.huaweicloud.com/blogs/22883829SQL如何通过SQL进行分布式死锁的检测与消除https://bbs.huaweicloud.com/blogs/22884030SQL GaussDB(DWS)运维 -- SQL操作 -- 查找所有包含主键&唯一索引的表信息https://bbs.huaweicloud.com/blogs/23013731SQLGaussDB(DB)查看后台活跃SQL和执行状态https://bbs.huaweicloud.com/blogs/23126132SQLGaussDB(DWS)集群后台UDF进程异常https://bbs.huaweicloud.com/blogs/23307533SQLGaussDB(DWS)审计日志介绍和使用示例https://bbs.huaweicloud.com/blogs/23310434SQLGaussDB(DWS) 快速查到一张表的列信息https://bbs.huaweicloud.com/blogs/23311535SQLGaussDB(DWS)之锁等待场景介绍https://bbs.huaweicloud.com/blogs/23311436SQL数据库覆盖式数据导入方法介绍https://bbs.huaweicloud.com/blogs/23772037SQLGaussDB(DWS)视图解耦与自动重建功能介绍https://bbs.huaweicloud.com/blogs/23842538SQLGaussDB(DWS)的正则表达式知多少https://bbs.huaweicloud.com/blogs/24203039SQLGaussDB时区相关知识(一)https://bbs.huaweicloud.com/blogs/24315140SQLGaussDB(DWS) XML数据处理实践https://bbs.huaweicloud.com/blogs/24433441SQL【文末彩蛋】数据仓库服务 GaussDB(DWS)单点性能案例集锦https://bbs.huaweicloud.com/blogs/24585942SQLGaussDB(DWS)时区相关知识(二)https://bbs.huaweicloud.com/blogs/24621643SQLGaussDB(DWS)时区相关知识(三)https://bbs.huaweicloud.com/blogs/24756144SQLGaussDB(DWS)生态 - teredata兼容 - 函数 - pivot/unpivot改写https://bbs.huaweicloud.com/blogs/24783445SQLGaussDB(DWS)运维 -- SQL操作 -- 查找冗余索引https://bbs.huaweicloud.com/blogs/24924846SQL你应该知道的数仓安全——安全认证https://bbs.huaweicloud.com/blogs/24970247SQL你应该知道的数仓安全——加密函数https://bbs.huaweicloud.com/blogs/25151448SQL你应该知道的数仓安全——透明加密https://bbs.huaweicloud.com/blogs/25149049SQLGaussDB(DWS)数据库安全守护者之审计日志https://bbs.huaweicloud.com/blogs/25369850SQLGaussDB(DWS)迁移 -数据迁移 - 使用Spark的scala接口往GaussDB(DWS)导入数据失败分析https://bbs.huaweicloud.com/blogs/25371151SQLGaussDB(DWS) SQL进阶-database、schema、user和权限控制https://bbs.huaweicloud.com/blogs/25418452SQLGaussDB(DWS) SQL进阶之全文检索https://bbs.huaweicloud.com/blogs/25418653SQLGaussDB(DWS)安全:隐私保护现真招儿——数据脱敏https://bbs.huaweicloud.com/blogs/25457054SQLGaussDB(DWS) 单点性能案例集锦https://bbs.huaweicloud.com/blogs/258890【推荐阅读】【最新活动汇总】DWS活动火热进行中,互动好礼送不停(持续更新中)  HOT  【博文汇总】GaussDB(DWS)博文汇总1,欢迎大家交流探讨~(持续更新中)【维护宝典汇总】GaussDB(DWS)维护宝典汇总贴1,欢迎大家交流探讨(持续更新中)【项目实践汇总】GaussDB(DWS)项目实践汇总贴,欢迎大家交流探讨(持续更新中)【DevRun直播汇总】GaussDB(DWS)黑科技直播汇总,欢迎大家交流学习(持续更新中)【培训视频汇总】GaussDB(DWS) 培训视频汇总,欢迎大家交流学习(持续更新中) 扫码关注我哦,我在这里↓↓↓ 
  • [Sql迁移] 【GaussDB产品】【SQL语句兼容性】是否支持 create table as select order by 语句
    【功能模块】  SQL语句:create table as select order by 语句【操作步骤&问题现象】个人在 openGauss 上执行以下语句创建的表是按照 jsrq 排序好的;      postgres=> create table gaussdb.educationinfo_temp as select * from gaussdb.educationinfo order by jsrq desc limit 10;但是在 GaussDB 上,发现数据有,但是没有按照 jsrq 排序,请问各位大佬为什么没有按照 jsrq 排序???【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [集群&DWS] GaussDB(DWS)数据融合系列第七期:CDM导出数据
    【摘要】 CDM支持迁移文档数据库服务(Document Database Service,简称DDS)的数据到其他数据源,本节以CDM与数据仓库服务(Data Warehouse Service,简称DWS)对接为内容,介绍如何使用CDM将DDS数据迁移到DWS。概述        云数据迁移服务(Cloud Data Migration,简称CDM),可以将其他数据源(例如MySQL)的数据迁移到GaussDB(DWS) 集群的数据库中。同时也支持使用CDM将数据导出到DWS集群的数据库中,本节博客将讲述CDM导出数据的具体操作。创建CDM集群并绑定EIP登录CDM管理控制台,创建CDM集群。关键配置如下:CDM集群的规格,按待迁移的数据量选择,一般选择cdm.medium即可,满足大部分迁移场景。如果DDS和DWS属于相同的VPC,则创建CDM集群时选择同一个VPC,不用绑定EIP。子网、安全组可以选择与其中一个(DDS或DWS)集群的保持一致,再配置安全组规则允许CDM集群访问另一个服务(DWS或DDS)的集群。如果DDS和DWS不在同一个VPC,则创建CDM集群时选择与DDS相同的VPC,再将CDM集群绑定EIP,CDM通过EIP访问DWS集群。CDM集群创建完成后,选择集群操作列的“绑定弹性IP”,CDM通过EIP访问DWS。如果DDS与DWS在同一个VPC,则不用为CDM集群绑定EIP。创建DDS连接单击CDM集群后的“作业管理”,进入作业管理界面,再选择“连接管理 > 新建连接”,进入选择连接器类型的界面,如图1所示。图1 选择连接器类型创建DDS连接时,连接器类型选择“文档数据库服务(DDS)”,然后单击“下一步”配置连接参数,参数说明如表1所示。参数名说明取值样例名称根据连接的数据源,用户自定义便于记忆、区分的连接名称。mongo_link服务器列表DDS集群的地址列表,输入格式为“数据库服务器域名或IP地址:端口”。多个服务器列表间以“;”分隔。192.168.0.1:7300;192.168.0.2:7301数据库名称要连接的DDS数据库名称。DB_mongodb用户名登录DDS数据库的用户名。cdm密码登录DDS数据库的密码。-表1 DDS连接参数单击“保存”回到连接管理界面。创建DWS连接在“连接管理”界面单击“新建连接”,连接器类型选择“数据仓库服务(DWS)”。单击“下一步”配置DWS连接参数,必填参数如表2所示,可选参数保持默认即可。参数名说明取值样例名称输入便于记忆和区分的连接名称。dwslink数据库服务器DWS数据库的IP地址或域名。192.168.0.3端口DWS数据库的端口。8000数据库名称DWS数据库的名称。db_demo用户名拥有DWS数据库的读、写和删除权限的用户。dbadmin密码用户的密码。-使用Agent是否选择通过Agent从源端提取数据。是Agent单击“选择”,选择连接Agent中已创建的Agent。-导入模式COPY模式:将源数据经过DWS管理节点后拷贝到数据节点。如果需要通过Internet访问DWS,只能使用COPY模式。COPY表2 DWS连接参数单击“保存”完成创建连接。创建迁移作业选择“表/文件迁移 > 新建作业”,开始创建数据迁移任务。                                                                                               图2 创建DDS到DWS的迁移任务配置作业基本信息:作业名称:输入便于记忆、区分的作业名称。源端作业配置源连接名称:选择创建DDS连接中的“mongo_link”。数据库名称:选择待迁移数据的数据库。集合名称:DDS中MongoDB的集合,类似于关系型数据库中的表名。目的端作业配置目的连接名称:选择创建DWS连接中的连接“dwslink”。模式或表空间:选择待写入数据的DWS数据库。表名:待写入数据的表名,可以手动输入一个不存在表名,CDM会在DWS中自动创建该表。导入前清空数据:任务启动前,是否清除目的表中数据,用户可根据实际需要选择。单击“下一步”进入字段映射界面,CDM会自动匹配源端和目的端的数据表字段,需用户检查字段映射关系是否正确。如果字段映射关系不正确,用户单击字段所在行选中后,按住鼠标左键可拖拽字段来调整映射关系。导入到DWS时需要手动选择DWS的分布列,建议按如下顺序选取:有主键可以使用主键作为分布列。多个数据段联合做主键的场景,建议设置所有主键作为分布列。在没有主键的场景下,如果没有选择分布列,DWS会默认第一列作为分布列,可能会有数据倾斜风险。如果需要转换源端字段内容,可在该步骤配置,具体操作请参见字段转换,这里选择不进行字段转换。                                                                                                            图3 字段映射单击“下一步”配置任务参数,一般情况下全部保持默认即可。该步骤用户可以配置如下可选功能:作业失败重试:如果作业执行失败,可选择是否自动重试,这里保持默认值“不重试”。作业分组:选择作业所属的分组,默认分组为“DEFAULT”。在CDM“作业管理”界面,支持作业分组显示、按组批量启动作业、按分组导出作业等操作。是否定时执行:这里保持默认值“否”。抽取并发数:设置同时执行的抽取任务数。这里保持默认值“1”。是否写入脏数据:如果需要将作业执行过程中处理失败的数据、或者被清洗过滤掉的数据写入OBS中,以便后面查看,可通过该参数配置,写入脏数据前需要先配置好OBS连接。这里保持默认值“否”即可,不记录脏数据。作业运行完是否删除:这里保持默认值“不删除”。单击“保存并运行”,回到作业管理界面,在作业管理界面可查看作业执行进度和结果。作业执行成功后,单击作业操作列的“历史记录”,可查看该作业的历史执行记录、读取和写入的统计数据。原文链接:https://bbs.huaweicloud.com/blogs/245848【推荐阅读】【最新活动汇总】DWS活动火热进行中,互动好礼送不停(持续更新中)  HOT  【博文汇总】GaussDB(DWS)博文汇总1,欢迎大家交流探讨~(持续更新中)【维护宝典汇总】GaussDB(DWS)维护宝典汇总贴1,欢迎大家交流探讨(持续更新中)【项目实践汇总】GaussDB(DWS)项目实践汇总贴,欢迎大家交流探讨(持续更新中)【DevRun直播汇总】GaussDB(DWS)黑科技直播汇总,欢迎大家交流学习(持续更新中)【培训视频汇总】GaussDB(DWS) 培训视频汇总,欢迎大家交流学习(持续更新中) 扫码关注我哦,我在这里↓↓↓ 
  • [存储] GaussDB(DWS) VACUUM总结
    摘要:在GaussDB(DWS)中,VACUUM的本质就是一个“吸尘器”,用于吸收“尘埃”。而尘埃其实就是旧版本数据,如果这些数据没有及时清理,那么将会导致数据库空间膨胀,性能下降,更严重的情况会导致宕机。下面将从VACUUM的作用、用法、原理等方面进行介绍。1 VACUUM的作用1)空间膨胀问题:清除废旧元组以及相应的索引。包括提交的事务delete的元组(以及索引)、update的旧版本(以及索引),回滚的事务insert的元组(以及索引)、update的新版本(以及索引)、copy导入的元组(以及索引)。2)freeze:防止因事务ID回卷问题(Transaction ID wraparound)而导致的宕机,将小于OldestXmin的事务号转化为freeze xid,更新表的relfrozenxid,更新库的relfrozenxid,truncate clog。3)更新统计信息:VACUUM analyze时,会更新统计信息,使得优化器能够选择更好的方案执行sql。2 VACUUM命令  VACUUM 命令存在两种形式,VACUUM和VACUUM FULL,VACUUM命令做的是LAZY VACUUM。从字面意思就可以看出来,LAZY VACUUM是VACUUM FULL的简化版。具体区别见下表。 LAZY VACUUMVACUUM FULL                                空间清理如果删除的记录位于表的末端,其所占用的空间将会被物理释放并归还操作系统。而如果不是末端数据,会将表中或索引中dead tuple(死亡元组)所占用的空间置为可用状态,从而复用这些空间不论被清理的数据处于何处,这些数据所占用的空间都将被物理释放并归还于操作系统。当再有数据插入后,分配新的磁盘页面使用锁类型共享锁,可以与其他操作并行排他锁,执行期间基于该表的操作全部挂起物理空间不会释放会释放事务ID不回收回收执行开销开销较小,可以定期执行  开销巨大,建议确认数据库所占磁盘页面空间接近临界值再执行操作,且最好选择数据量操作较少的时段完成执行效果执行后会有所提升执行完后,基于该表的操作效率大大提升  注:目前LAZY VACUUM只对行存表起作用,对列存表无效,列存表只能依靠VACUUM FULL释放空间。VACUUM在GaussDB(DWS)中具体执行语法如下:1)回收空间并更新统计信息,对关键字顺序无要求VACUUM [ ( { FULL | FREEZE | VERBOSE | ANALYZE } [, ...] ) ] [ table_name [ (column_name [, ...] ) ] ]2)仅回收空间,不更新统计信息VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] [ table_name ]3)回收空间并更新统计信息,且对关键字顺序有要求VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] ANALYZE [ table_name [ (column_name [, ...] ) ] ]重要参数说明:FULL 选择VACUUM FULL清理,可以恢复更多空间,但耗时更多。FREEZE指定FREEZE相当于执行VACUUM时将VACUUM_freeze_min_age参数设为0。VERBOSE为每个表打印一份详细的清理工作ANALYZE | ANALYSE更新用于优化器的统计信息,以决定执行查询的最有效方法。3 VACUUM原理  3.1 LAZY VACUUM执行流程(1)从指定的多张表中进行遍历,从而获取每一个表。(2)获取遍历到表的共享锁,该锁允许其他事务读取。(3)获取每个页面的dead tuples(死亡元组),并freeze需要的元组。(4)删除指向dead tuples的院所元组。(5)删除dead tuples并重新分配live tuples(活动元组)。(6)更新目标表的FSM(用于记录每个数据块的空闲空)和VM(标记数据块中是否存在需要清理的行)。(7)重复5,6步骤直到遍历完该表的每一页.(8)如果最后一页没有元组,则进行截断。(9)更新与VACUUM有关的统计信息表和系统目录。   3.2 VACUUM FULL执行流程(1)建立临时表:数据库创建一张临时表,该表继承老表的所有属性。如果用户表有名字与这个临时表相同的,那么就会失败。在该阶段申请的行排他锁(RowExclusiveLock)。(2)数据复制:将原来表中的数据复制到临时表中。在该过程中完成堆dead tuples的清理。该阶段申请的是访问排他锁AccessExclusiveLock。(3)交换表:使用新表代替老表。而交换的本质是物理文件的交换,即临时表带老物理文件,老表带新物理文件。该阶段会再次申请行排他锁(RowExclusiveLock)。(4)重建索引:当交换完成后,会进行索引重建,并更新统计信息。此时对表申请共享锁(ShareLock)。(5)删除临时表:索引重建完成后,会将带有老物理文件的临时表进行删除。【推荐阅读】【最新活动汇总】DWS活动火热进行中,互动好礼送不停(持续更新中)  HOT  【博文汇总】GaussDB(DWS)博文汇总1,欢迎大家交流探讨~(持续更新中)【维护宝典汇总】GaussDB(DWS)维护宝典汇总贴1,欢迎大家交流探讨(持续更新中)【项目实践汇总】GaussDB(DWS)项目实践汇总贴,欢迎大家交流探讨(持续更新中)【DevRun直播汇总】GaussDB(DWS)黑科技直播汇总,欢迎大家交流学习(持续更新中)【培训视频汇总】GaussDB(DWS) 培训视频汇总,欢迎大家交流学习(持续更新中) 扫码关注我哦,我在这里↓↓↓ 
  • [集群&DWS] GaussDB(DWS)裸金属集群创建问题总结
    问题背景GaussDB(DWS)集群创建过程中涉及与周边很多服务对接,如BMS、VPC、IAM等,流程复杂,过程繁多,容易出错,本文介绍BMS集群在创建失败后如何快速获取创建失败的详细信息,从而快速恢复重试。问题现象在DWS页面创建BMS规格的集群后,页面显示创建失败,集群创建失败的详细原因在页面未显示,需要分场景详细排查定位。场景一:管理租户密码被改页面创建dws集群失败,创建失败进度大概为5%,页面报错信息为DWS.6000登录rms数据库,执行select jobId from rds_instance where name like "%{clusterName}%";其中{clusterName}为集群名称,从rds_instance表中根据集群名查找jobId字段进入dwscontroller容器中根据jobId获取集群创建失败日志信息,检查日志报错内容为createUserByManageTenant函数报错,在创建集群过程中,若当前租户没有对应资源租户,dws会在创建时创建对应的资源租户,创建时使用管理租户账号和密码,若管理租户密码被修改,会导致资源租户创建失败。在获取到正确的管理租户密码密文后,需要修改如下几个地方:dws管理面数据库中namespace表的trustDomainPwd字段;dwscontroller容器中trustDomainPwd、dwsTrustDomainPwd、accessDnsUserPwd字段dbsmonitor容器中opsvc.domain.password字段dbsevent容器中opvc.domain.password字段修改以上容器的参数后,在cdk master节点执行kubectl delete pod –n {dws|ecf} {podName}删除容器,等待容器重启生效。场景二:BMS资源不足页面创建dws集群失败,创建失败进度大概为30%,页面报错信息为BMS.****登录ServiceOM页面,进入裸金属页面查看可用的BMS裸机是否满足需求,DWS集群最少需要3节点的BMS资源,若资源数量不足,会导致创建失败。若通过ServiceOM页面检查BMS资源足够,则登录rms数据库,使用select jobId from rds_instance where name like "%{clusterName}%";在数据库中查询集群创建的jobId,进入dwscontroller容器中根据jobId获取集群创建失败日志详细信息,与BMS同事配合检查解决。场景三:管理面与内大网不通页面创建dws集群失败,创建失败进度大概为66%,页面报错信息为DWS.6000登录rms数据库,执行sql select manageIp from rds_instance where name like "%{clusterName}%";从rds_instance表中根据集群名查找manageIp字段,进入dwscontroller容器尝试curl manageIp:12017。若无法curl通,则登录ServiceOM根据集群名称查看虚拟机是否已经启动,若虚拟机状态正常,已经启动,对于DWS 8.0.1之前的版本,管理面和实例之间通信使用PEP,需要联系网络同事排查PEP和内大网的连通性。场景四:集群建立互信失败页面创建dws集群失败,创建失败进度大概为78%,页面报错信息为DWS.6000根据job信息获取管理面集群创建报错信息,管理面job报错为 init失败,登录节点,检查/home/Ruby/log/cloud-dws-deploy.log文件中的报错信息,在日志中不断重复打印ssh的no route错误。用高速网络通信的bms部署会因高速网络不通存在该问题,原因为在实例上的交换机vlan没放通导致,可由底层网络同事放通vlan即可。【推荐阅读】【最新活动汇总】DWS活动火热进行中,互动好礼送不停(持续更新中)  HOT  【博文汇总】GaussDB(DWS)博文汇总1,欢迎大家交流探讨~(持续更新中)【维护宝典汇总】GaussDB(DWS)维护宝典汇总贴1,欢迎大家交流探讨(持续更新中)【项目实践汇总】GaussDB(DWS)项目实践汇总贴,欢迎大家交流探讨(持续更新中)【DevRun直播汇总】GaussDB(DWS)黑科技直播汇总,欢迎大家交流学习(持续更新中)【培训视频汇总】GaussDB(DWS) 培训视频汇总,欢迎大家交流学习(持续更新中) 扫码关注我哦,我在这里↓↓↓ 
  • [性能调优] 【DWS产品】【重分布功能】DWS集群中因Stream导致数据移动是否通过内部专用网络而非业务网?
    【功能模块】STREAM网络传输  【操作步骤&问题现象】        DWS集群因为其分布式架构,网络成了无法回避的一个瓶颈点。 熟悉Oracle RAC的同学都知道,Oracle计算节点之间的通信是通过私有网络(一般是 192.168.x.x, 不对外公布),私有网络是RAC节点间通信的通道 ,包括节点间的网络心跳信息、Cache Fusion传递数据块(某节点要处理另外一个节点正在处理的内存中的数据块,会通过内存及私有网传输,不通过磁盘)都需要通过私有网络。  有个问题想请教下:      DWS执行过程中大概率会产生Stream, 要么重分布要么广播,这些数据库传输可能都是非常大的,是否走到内部私有网络,而不是业务网 ?     如果走的是业务网, 势必会与繁忙的业务网络冲突,影响到各个DN需要将结果集传输到CN的速度,为什么不分开 ? 【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [实践系列] DWS开发技术规范
           采用DWS的数据仓库平台构建新一代数据仓库,需要经常使用DWS的SQL语言。在某些场景(如元数据管理系统的SQL解析、SQL编写等)对DWS的SQL有一定适用限制,在开发过程中基于代码质量、开发效率和可读性等考虑,也需要对DWS的SQL使用设定规范。       本文档对禁止或限制使用的DWS的SQL语法给出规范,供开发人员参考。
  • [运维管理] GaussDB 8001 版本 有没有哪个方法可以只导出某个schema下,所有的函数的?
    【功能模块】【操作步骤&问题现象】有没有哪个方法可以只导出某个schema下,所有的函数的?
  • 为什么说GaussDB(for mysql)无需分表?
    如果原MySQL(5.7)单表数据量很大进行了分表,那么迁移到TaurusDB后,还需要分表吗?怎么理解官方介绍的无需分表?
  • [实践系列] GaussDB(DWS)实践系列-常用命令FAQ
           本文结合GaussDB(DWS)的实践交付和运维经验,从集群操作类、资源监控类、元数据查询类、权限管理类四大模块分类整理常用命令,希望通过这些常用命令给大家提供一些参考和启发,提升后续交付和运维效率。GaussDB(DWS)常用命令FAQ分类功能描述命令备注集群操作类查看集群状态cm_ctl query -Cv增加-d参数可以查看对应实例目录。命令:cm_ctl query -Cvd集群启动cm_ctl start启动指定实例:cm_ctl start -n 3 -D /srv/BigData/mppdb/data2/master2/集群停止cm_ctl stop集群停止默认超时时间20min,如果集群在20min内还未停止成功,可以通过立即停止命令停止集群。命令:cm_ctl stop -m i停止指定实例:cm_ctl stop -n 3 -D /srv/BigData/mppdb/data2/master2/均衡集群状态cm_ctl switchover -a登录到任何数据库节点,执行cm_ctl query -Cvs,如果无返回集群信息说明集群已经处于均衡状态。查看磁盘使用情况gs_ssh -c 'df -h'gs_ssh工具帮助用户在集群各节点上执行相同命令,并一起返回查询结果。1.单个磁盘使用率达到80%告警,检查是否存在数据倾斜;2.所有磁盘使用率达到70%,需要及时扩容,或进行数据清理配置集群访问白名单gs_guc set -Z coordinator -N all -I all -h "host all jack 10.10.0.35/32 sha256"10.10.0.35/32表示只允许IP地址为10.10.0.35的主机连接,在使用过程中根据用户的网络进行配置修改。清理指定线程select pg_terminate_backend('140514443581184');针对于异常运行的SQL,可通过PID进行清理。磁盘页面碎片恢复针对整个表恢复:vacuum full tablename;针对整个库恢复:vacuum full;业务低峰期执行vacuum操作:简单的VACUUM(不带FULL选项)只是简单地回收空间并且令其可以再次使用,因为没有请求排他锁,这种形式的命令可以和对表的普通读写并发操作。VACUUM FULL执行更广泛的处理,包括跨块移动行,以便把表压缩到最少的磁盘块数目里,这种形式要慢许多并且在处理的时候需要在表上施加一个排他锁。清理数据库连接删除数据库 postgres 在dn1和dn2节点上的连接。clean connection to node (dn_6001_6002,dn_6003_6004) for database postgres;删除用户 jack 在dn1节点上的连接。clean connection to node (dn_6001_6002) to user jack;删除在数据库 postgres 上的所有连接。clean connection to all force for database postgres;当数据库有异常时,可使用clean connection命令来清理数据库连接。更新统计信息针对整个表更新:analyze tablename;针对整个库更新:analyze;没有收集统计信息或者统计信息陈旧往往会造成执行计划严重劣化,从而导致性能问题。设置GUC参数动态生效方式设置GUC参数(立即生效):设置CN:gs_guc reload -Z coordinator -N all -I all -c "max_active_statements=10"设置DN:gs_guc reload -Z datanode -N all -I all -c "max_active_statements=10"重启集群生效方式设置guc参数:设置CN:gs_guc set -Z coordinator -N all -I all -c "max_active_statements=10"设置DN:gs_guc set -Z datanode -N all -I all -c "max_active_statements=10"部分参数例如POSTMASTER类型,使用set命令进行参数设置后,需要重启集群生效。查看GUC参数show max_active_statements;分别登录CN或DN节点,可查询对应CN或DN的GUC参数值。指定实例执行命令在指定CN执行命令,例如cn_5001。execute direct on (cn_5001) 'select * from pg_stat_activity where pid = 140596203210496';在指定DN执行命令,例如dn_6001_6002。execute direct on (dn_6001_6002) 'select * from pg_stat_activity where pid = 140596203210496';•只有系统管理员才能执行EXECUTE DIRECT;•为了各个节点上数据的一致性,SQL语句仅支持SELECT;•由于CN节点不存储用户表数据,不允许指定CN节点执行用户表上的SELECT查询。访问指定数据库访问指定数据库:gsql -d database_name -p 8000 -r切换到指定数据库:\c database_name退出数据库:\q使用指定用户登录数据库增加-U 用户名 -W 密码,例如gsql -d database_name -p 8000 -r -U user01 -W 'test@123'查看数据库版本信息方法1:登录数据库执行 select version();方法2:数据库外执行  gsql -V登录任一CN节点执行查询命令。导出导入命令方法1:使用gs_dump导出导入指定表导出:gs_dump -p 8000 postgres -t table0 -f /home/omm/backup.sql导入:gsql -d postgres -p 8000 -f /home/omm/backup.sql方法2:使用copy导出导入导出:copy tpcds.ship_mode TO '/home/omm/ds_ship_mode.dat';导入:copy tpcds.ship_mode_t1 FROM '/home/omm/ds_ship_mode.dat';方法3:通过GDS工具,采用多DN并行导入,适用于大批量数据入库,导入效率高。。•gs_dump是GaussDB(DWS)用于导出数据库相关信息的工具,用户可以自定义导出一个数据库或其中的对象(模式、表、视图等)。支持导出的数据库可以是默认数据库postgres,也可以是自定义数据库。•通过COPY命令实现在表和文件之间拷贝数据。COPY FROM从一个文件拷贝数据到一个表,COPY TO把一个表的数据拷贝到一个文件。可通过format、delimiter设置格式和分隔符。•数据服务工具GDS帮助分发待导入的用户数据及实现数据的高速导入。GDS需部署到数据服务器上。数据量大,数据存储在多个服务器上时,在每个数据服务器上安装配置、启动GDS后,各服务器上的数据可以并行入库。查看编码字符集查看客户端编码:show client_encoding;查看服务端编码:show server_encoding;•client_encoding显示客户端的字符编码类型。尽量客户端编码和服务器端编码一致,提高效率,例如可通过set client_encoding=GBK;(session级生效)进行调整修改。•server_encoding显示当前数据库的服务端编码字符集,用户无法修改此参数,只能查看。设置模式搜索路径设置模式搜索路径:set search_path to tpcds, public;查看模式搜索路径:show search_path;•通过未修饰的表名(名字中只含有表名,没有“schema名”)引用表时,系统会通过search_path(搜索路径)来判断该表是哪个schema下的表。资源监控类查看并发数select coorname,count(*) from pgxc_stat_activity where state<>'idle' group by coorname;查询活跃语句数量,衡量所有CN业务并发情况。如果长期并发达到max_active_statements,在各方面资源充足的情况下,可以适当增大max_active_statements。查看连接数select coorname,count(*) from pgxc_stat_activity group by 1 order by 2 desc;查询客户端与CN以及CN之间的连接数。查看动态内存使用率select p1.nodename, p1.memorytype, p2.memorytype, p1.memorymbytes/p2.memorymbytes as percentfrom pgxc_total_memory_detail p1, pgxc_total_memory_detail p2where p1.nodename=p2.nodenameand p1.memorytype='dynamic_used_memory'and p2.memorytype='max_dynamic_memory'order by p1.nodename;GaussDB(DWS)进程所使用的内存大小dynamic_used_memory占用max_dynamic_memory百分比,percent列预警值75% (可以根据需要调整)。查看运行中SQL状态select pid,query_id,coorname,datname,usename,current_timestamp-query_start as duration,substr(query,0,100) as sub_query from pgxc_stat_activity where state= 'active' and datname <> 'postgres' and usename <> 'Ruby' order by duration desc;查询运行中语句状态,截取substr(query,0,100),可根据pid获得完整SQL。检查当前语句排队情况select coorname,usename,current_timestamp-query_start as duration, enqueue,query_id,query,pidfrom pgxc_stat_activitywhere enqueue is not null and state<>'idle'and usename <> 'Ruby' order by duration desc;预警值,排队语句数量达到10。查看脏页率查询指定库的脏页率:select * from pgxc_get_stat_dirty_tables(30,100000);查询指定schema的脏页率:select * from pgxc_get_stat_dirty_tables(30,100000,'mppedw');查询指定表的脏页率:select c.oid AS relid, n.nspname AS schemaname, c.relname,pg_stat_get_tuples_inserted(c.oid) AS n_tup_ins,pg_stat_get_tuples_updated(c.oid) AS n_tup_upd,pg_stat_get_tuples_deleted(c.oid) AS n_tup_del,pg_stat_get_live_tuples(c.oid) AS n_live_tup,pg_stat_get_dead_tuples(c.oid) AS n_dead_tup,cast( (n_dead_tup / (n_live_tup + n_dead_tup + 0.0001) * 100) AS numeric(5,2)) AS dirty_page_ratefrom pg_class cLEFT JOIN pg_namespace n ON n.oid = c.relnamespacewhere c.oid = (select 'pg_catalog.pg_attribute'::regclass::oid);(30,100000,'mppedw'),其中30代表统计脏页率大于30%的业务表,100000表示统计脏数据行数大于100000的业务表,mppedw指定查询的schema。预警值30%(可以根据需要调整或删除),在业务空闲时间,对脏页率高的表做vacuum full。查看倾斜率查看指定数据库中Hash表的数据分布情况:SELECT * FROM pgxc_get_table_skewness ORDER BY skewratio DESC;查看指定表在DN上的数据分布(显示每个DN上的数据量):SELECT a.count,b.node_name FROM (SELECT count(*) AS count,xc_node_idFROM inventory  GROUP BY xc_node_id) a, pgxc_node b WHERE a.xc_node_id=b.node_id ORDER BY a.count desc;如果skewratio列(倾斜率)或DN上数据分布差大于10%,数据总量大于100GB时需处理。可通过选择合适的分布键重建该表,重建后重新检查倾斜情况。查看线程等待状态select * from pgxc_thread_wait_status where queryid=xxxx;1.如果存在等锁,例如acquire lock,找到持锁语句后杀掉线程;2.如果大量语句都在等待同一个dn,排查是否存在表倾斜;3.如果大量语句都在等待同一个节点,说明该节点可能存在资源瓶颈,继续排查该节点的cpu、io、网络情况;4.查看执行计划,对语句进行调优。查看目标锁被谁持有select * from pg_locks where relation = 11799 and granted = 'true';根据表名从pg_class获取到oid(对应pg_locks中的relation字段),通过pg_locks查询指定表上的锁被谁持有。select oid,relname from pg_class where relname='tablename';查看历史SQL执行耗时select substr(query,1,100) as sub_query,dbname,username,count(*),max(duration) as max_duration,avg(duration) as avg_duratiomfrom pgxc_wlm_session_infowhere substr(start_time,1,10)='2021-03-17'group by sub_query,dbname,usernameorder by count desc;前提条件:enable_resource_track,enable_resource_record参数为打开状态,查询语句query进行了截取substr(query,0,100),可根据pid获得完整SQL。substr(start_time,1,10)='2021-03-17'设置查询指定日期的历史SQL,例如2021-03-17。查询实时SQL在所有DN上的最大内存峰值select a.* from pgxc_wlm_session_statistics a where warning is not null or max_peak_memory > 8 * 1024 order by max_peak_memory, warning;预警值warning is not null or max_peak_memory > 8 GB,可排查是否存在数据倾斜或未收集统计信息,或对SQL进行优化。查看审计日志select * from pgxc_query_audit('2021-03-10 17:00:00','2021-03-10 21:00:00') where type = 'login_success' and username = 'user1';•审计功能总开关(audit_enabled)已开启;•需要审计的审计项开关已开启;•只有拥有AUDITADMIN属性的用户才可以查看审计记录;•pgxc_query_audit可以查询所有CN节点的审计日志。原型:pgxc_query_audit(timestamptz startime,timestamptz endtime)。元数据查询类查看数据库信息方法1:\l+方法2:select datname,pg_size_pretty(pg_database_size(datname)) as dbsize from pg_database;登录集群查询所有database占用磁盘空间大小及相关信息。查看schema信息方法1:\dn+方法2:SELECT n.nspname AS "Name",  pg_catalog.pg_get_userbyid(n.nspowner) AS "Owner",  pg_catalog.array_to_string(n.nspacl, E'\n') AS "Access privileges"FROM pg_catalog.pg_namespace nWHERE n.nspname !~ '^pg_'AND n.nspname <> 'information_schema'ORDER BY 1;查询指定数据库中schema相关信息。查看schema大小select schemaname,pg_size_pretty(sum(pg_table_size(schemaname||'.'||tablename))) as pretty_sizefrom pg_tablesgroup by schemanameorder by pretty_size desc;登录指定数据库查询schema占用磁盘空间大小。查看表大小查看占用磁盘空间TOP 50的表信息:select nspname,relname,pg_table_size(c.oid) as size,pg_size_pretty(pg_table_size(c.oid)) as pretty_size from pg_class c, pg_namespace n where c.relnamespace = n.oid and c.relkind = 'r' order by 3 desc limit 50;查看指定表大小:方法1:select * from pg_size_pretty(pg_relation_size('tablename'));方法2:\dt+ tablename登录指定数据库查询业务表占用磁盘空间大小。查看表定义方法1:select pg_get_tabledef('tablename');方法2:\d+ tablename方法1返回完整建表语句(可执行建表),方法2反馈详细表结构信息。其中方法2为后台数据库执行命令,方法一前后台均可。查看视图定义方法1:select pg_get_viewdef('viewname');方法2:\d+ viewname其中方法2为后台数据库执行命令,方法一前后台均可。查看表的分布类型selectn.nspname as "Schema",b.relname as "Tablename",pg_catalog.pg_get_userbyid(b.relowner) as "Owner",case when c.pclocatortype='H' then 'hash' else 'replication' end as "Distributetype",getdistributekey(c.pcrelid) as "Distributekey"from pgxc_class cleft join pg_catalog.pg_class b on b.oid = c.pcrelidleft join pg_catalog.pg_namespace n on n.oid = b.relnamespacewhere  c.pclocatortype in ('H','R')and b.relkind = 'r'and n.nspname <> 'pg_catalog'and n.nspname <> 'information_schema'and n.nspname !~ '^pg_toast'and pg_catalog.pg_table_is_visible(b.oid)order by 4;DistributeType显示表的分布类型,包括Hash和Replication两种。DistributeKey显示表的分布健。查看表的唯一约束selectn.nspname as "Schema",b.relname as "Tablename",pg_catalog.pg_get_userbyid(b.relowner) as "Owner",case when ps.contype = 'p' then 'primary key' else 'unique index'  end as "ConstrainType",pg_catalog.pg_get_constraintdef(ps.oid, true) as "ConstraintInfo"from pgxc_class cleft join pg_catalog.pg_class b on b.oid = c.pcrelidleft join pg_catalog.pg_namespace n on n.oid = b.relnamespaceleft join pg_index c1 on c1.indrelid = c.pcrelidleft join pg_constraint ps on ps.conrelid = c.pcrelid and ps.conindid = c1.indexrelidwhere  c.pclocatortype in ('H','R')and b.relkind = 'r'and ps.contype in ('p','u')and n.nspname <> 'pg_catalog'and n.nspname <> 'information_schema'and n.nspname !~ '^pg_toast'and pg_catalog.pg_table_is_visible(b.oid)order by 4; ConstrainType显示表的约束类型,包括primary key主键约束,unique index唯一约束。权限管理类授予系统权限将系统权限授权给用户或者角色。创建名为joe的用户,并将系统权限授权给他。create user joe password 'Bigdata123@';grant all privileges to joe;回收系统权限:revoke all privileges from joe;系统权限又称为用户属性,一般通过CREATE/ALTER ROLE语法来指定。其中,SYSADMIN权限可以通过GRANT/REVOKE ALL PRIVILEGE授予或撤销授予数据库对象授权将模式tpcds的访问权限授权给角色tpcds_manager,并授予该角色在tpcds下创建对象的权限create role tpcds_manager password 'Bigdata123@';grant usage,create on schema tpcds to tpcds_manager;revoke usage,create on schema tpcds from tpcds_manager;(回收权限)将模式tpcds数据表的查询权限赋权给用户或者角色。grant select on test900 to kim02;grant select on all tables in schema tpcds to kim02;revoke select on test900 from kim02;(回收权限)revoke select on all tables in schema tpcds from kim02;(回收权限)将数据库对象(表和视图、指定字段、数据库、函数、模式、表空间等)的相关权限授予特定角色或用户将角色或用户的权限授权给其他角色或用户创建角色senior_manager,并授予角色或用户manager的权限。create role senior_manager password 'Bigdata123@';grant manager to senior_manager;撤销权限。revoke manager from senior_manager;将一个角色或用户的权限授予一个或多个其他角色或用户。在这种情况下,每个角色或用户都可视为拥有一个或多个数据库权限的集合。
  • [开发应用] GaussDB保存图片
    【功能模块】怎么使用GaussDB保存图片?类似Oracle使用blob来保存【操作步骤&问题现象】1、2、【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [Sql迁移] GaussDB访问Elk表
    【功能模块】GaussDB是否支持“通过在集群中创建Foreign Table的方式,实现查询FI Elk中的数据”?GaussDB的使用文档里提到,“支持GaussDB集群间的关联查询和用来导入数据”。而Elk其实就是GaussDB的前身,目前也有将Elk中的增量数据同步(使用gds过于繁琐)到GaussDB中的需求。【操作步骤&问题现象】1、2、【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [问题求助] GaussDB访问Elk表
    GaussDB是否支持“通过在集群中创建Foreign Table的方式,实现查询FI Elk中的数据”?GaussDB的使用文档里提到,“支持GaussDB集群间的关联查询和用来导入数据”。而Elk其实就是GaussDB的前身,目前也有将Elk中的增量数据同步(使用gds过于繁琐)到GaussDB中的需求。
  • [问题求助] 如何从DWS数据库创建实时任务迁移数据至RDS for MySQL
    如何从DWS数据库创建实时任务迁移数据至RDS for MySQL
  • [开发应用] 【gaussdb A 8.0.0】【delta表】delta表向列存表做数据整合问题
    delta表向列存表做数据合并需要用到vacuum deltamerge,该过程加锁影响DDL和部分写事务,这个vacuum deltamerge是自动执行的吧?另外,delta表达到多少条记录会自动向列存表做数据整合?
总条数:2746 到第 页
上滑加载中