• [技术干货] 13万张表+数亿行代码,迁移只需数小时,还是异构数据库
    摘要:而对企业来说,构建统一的数据底座,才能让数据供应和业务端更高效、更安全、更易共享。随着技术的日新月异,上云已非难事,但异构数据库(转换数据库类型)迁移上云在业界仍是一个巨大的挑战。本文分享自华为云社区《13万张表,数亿行代码,华为云UGO助力异构数据库迁移只需小时级完成!》,原文作者:心机胖 。当前,云上办公,云上交易,云上数字运营已成为主流,不把业务部署到云端,仿佛跟不上时代的步伐。而对企业来说,构建统一的数据底座,才能让数据供应和业务端更高效、更安全、更易共享。随着技术的日新月异,上云已非难事,但异构数据库(转换数据库类型)迁移上云在业界仍是一个巨大的挑战。华为集团是多业态、长链条、全场景的企业,在20年前就开始使用数据库,遍布了研发、供应、财经、行政等领域,有离线场景、实时场景、数仓等使用场景,这些场景使用主流商业数据库居多,随着数字化转型进程加快,在迭代方面,跟不上云的节奏,于是华为集团流程IT携手华为云数据库寻求云上转型。对于拥有海量数据、多种数据库类型、数据库专家云集的华为集团流程IT来说,上云也并非易事。业界盛行“两条腿”走路原则,既要多快好省又要安全稳定可靠,当然华为集团也不例外。面临新的异构数据库,既希望性能大幅提升,也要安全稳定,于是华为集团流程IT选择将业务搬迁至华为云数据库RDS与GaussDB,而兼容性和性能是异构数据库迁移最大的难题。关山难越,异构数据库迁移难以逾越的“深坑”迁移数据库如同搬家,直接搬不太可行,需要先搬“房子主体”,再搬“房子里的家具”等,其中涉及的迁移问题不仅繁杂,而且不能出差错。尤其是令人头疼的兼容问题,不但涉及到结构迁移、语法转换、SQL转换等复杂操作,对数据库性能要求也很高。腾云而出,华为云UGO为自动化搬迁而生首先华为云数据库联合华为集团流程IT对业务进行全面评估,华为集团数据库有数十万张表,10万级的存储过程,存储过程的代码超过亿级的代码,几十万个任务调度,迁移数据量高达数TB。经评估后,应用手动改造工作量巨大,需要成熟的企业级端到端对象迁移或者是评估工具,来提升异构数据库迁移转化率。华为云推出的数据库和应用迁移 UGO则为异构数据库对象迁移和应用迁移而生!通过预迁移评估、自动化语法转换,帮助用户提前识别迁移风险,提升迁移效率,最大化降低用户的数据库迁移成本。华为云数据库给出了三步走的迁移方案,通过华为云UGO评估并转换异构数据库语法进行语法迁移,再通过华为云数据复制服务DRS基于日志的实时变化数据捕捉,进行数据迁移,最后通过华为云DRS数据校验保证数据一致性。使用的关键技术有:1)迁移工作量评估:依据海量业务场景下的实际人力迁移成本作为评估基线,依据大量业务场景自动化迁移过程,累计迁移工作量作为输入,同时结合代码量、转化率、不兼容特性改造难度,方便客户对迁移工作有一个具体的量化感知。2) 应用SQL迁移:通过采集源库SQL流量,并进行SQL动态转换,将数据通过流量仿真回放形式迁移到目标库中,提供自动错误定位和迁移校验,迁移过程中订正对象清晰明确。同时,通过对源库进行迁移评估和SQL翻译,并且输出SQL翻译报告,完成应用改造,最后迁移到目标库。神速之光,华为云UGO小时级完成搬迁华为集团流程IT拥有数TB级别的数据量、数十万存储过程,迁移周期从以天为单位缩短至小时级,减少了50%存储过程改造成本,支撑主流商业数据库500+个Schema迁移,节省了70%+工作量,迁移套数1000+。在一般情况下,迁移周期和各方面的评估需要1-2个月的时间,迁移周期也是按天计算,而UGO只需小时级就完成了迁移。华为云UGO消除了异构数据库迁移难度大、周期长、成本高等问题,高效的支撑了华为集团流程IT数字化转型。此外,上云后实现了数据库分钟级扩容、数据秒级入库,解决了传统数据库扩展难及数据入库压力大的问题,可支撑逻辑库亿级别的数据量。微服务化改造后,预期可支撑2年的业务数据增长。目前,华为云数据库应用迁移解决方案顺利通过信通院“数据库应用迁移服务能力”评测,成为国内首批通过该项的商用数据库迁移方案,成功取得了国内首批评测最高级别的成绩。未来,华为云UGO将会不断创新,持续构筑技术硬实力,为客户提供更简单易用、高效可靠的迁移方案。华为云UGO火热公测中,立即免费体验
  • [SQL] GaussDB (DWS) SQL执行过中的下盘管理
    1. 概述在SQL运行过程中,当计算的数据量超过内存的可用大小时,为了避免把内存撑爆,就会产生下盘,将内存中的数据先临时写入到磁盘中。从整个集群的视角来看,下盘分为: CN上的下盘和DN上的下盘。下盘文件存放的目录均为 base/pgsql_tmp下盘文件格式 pgsql_tmp+queryid+threadid+NO 可以根据query_id找到正在执行的语句。 在一个会话中单个下盘文件的大小通过参数temp_file_limit 来做限制,默认值为-1。单个SQL在单个DN上的下盘空间大小通过参数 sql_use_spacelimit来做限制,默认值为-12.CN上下盘CN上下盘控制参数是work_mem,当执行算子使用的内存超过这个参数配置的大小就会产生下盘。2.1 不下推的语句当语句不能下推的时候在以下场景下执行过程CN需要缓存中间结果集,当中间结果集的大小超过work_mem的时候就会产生下盘。insert into select xxxx;游标场景多次执行fetch操作;2.2 CN RETRY下盘当使用CN RETRY 功能时, CN端使用的临时文件的最大值,通过参数max_cn_temp_file_size 来控制。当返回的结果集超过8K的时候,会分多次返回给客户端,为了避免retry 场景下返回多余的脏数据给客户端,需要将结果集进行下盘,然后反馈给客户端。3. DN上下盘执行计划下推到DN上进行执行的时候,物化类的算子是很消耗内存的,物化类算子会将中间结果缓存下来,当超过内存限制的时候会产生下盘,物化类的算子主要有以下几类: 下盘的控制逻辑主要有两种形式。3.1 打开动态负载管理(enable_dynamic_workload)打开该参数的时候,会使用内存自适应的功能,关于内存自适应的特性会单独进行博客说明,在语句生成计划的时候,会根据当前系统的负载和数据量大小来估算算每个算子的可用内存,然后在执行过程中会基于这个值来进行下盘控制。这里需要注意的是,若果参与计算的表上没有收集统计信息,无法正确的估算出可用内存大小,那么会使用work_mem来控制每个算子下盘的时机。 3.2 关闭动态负载管理当关闭动态负载管理后,内部执行算子会根据work_mem的大小来控制每个算子的下盘时机,当使用的内存大于work_mem的时候就会造成下盘。 4. TOPSQL中下盘信息执行完的历史SQL信息会记录到TOPSQL系统表 pgxc_wlm_session_info中。上图中的几个字段记录了下盘信息,可以通过spill_skew_percent来判断是否存在下盘倾斜,以及下盘量的多少。 
  • [运维管理] GaussDB A 8.0.0.1 版本在使用表空间的情况下,数据跑sql 涉及临时落盘情况,数据会存放在表空间下的路径还是哪里
    【操作步骤&问题现象】在使用相对路径表空间的情况下,数据跑sql 涉及临时落盘情况,数据会存放在表空间下的路径(占用表空间存储)还是哪里?
  • [开发应用] 执行sql报错
    使用unnest函数的时候报set-return function not supported in vector eninge执行语句:select unnest(string_to_array(Supervise_Item_Code,'^',null)) from jg_yypt.jg_jgxw_punish_action limit 1;报错:ERROR:  dn_6047_6048: set-return function not supported in vector eninge在默认库里面会报错,在别的库里面可以正常执行,这是哪里有问题
  • [其他] 【故障】执行sql报错:ERROR: buffer overflow, limit of 20000
    问题现象:执行call dbms_output.put_line(str) 或者其他存储过程内调用dbms_output.put_line函数时,有时会出现报错:ERROR:  buffer overflow, limit of  20000原因:该报错的原因是put_line函数默认最大输出长度为20000,超过该长度会出现报错。解决方法:执行 call DBMS_OUTPUT.ENABLE(200000); 调大最大长度限制,或者 call DBMS_OUTPUT.ENABLE(-1) 不做长度限制
  • [其他] 分享数仓性能调优必读:从系统级到SQL级,带你进阶为性能调优高手
    数仓性能调优是数据库应用开发和迁移过程中的关键步骤,在整个项目实施过程中占据很大的份量。它没有明确的衡量标准和对错之分,考验的是资深一线技术人员的隐式技能。如果想成为一个性能调优的高手,除了对应用程序的逻辑做到游刃有余外,还需要了解应用的数据库的基本实现原理,更甚者,需要对操作系统、网络等基础知识有所涉猎,同时还要具备性能诊断和分析技巧。介于此,华为云社区推出了“GaussDB(DWS)性能调优”系列专题,该技术专题由华为云数据库内核技术专家、一线系统工程师撰写,从业务实战经验出发,为开发者介绍数据库级别的性能调优思路和总体策略,包括系统级和语句级调优。本系列文章共分为三部分,前面的基础篇和实战篇聚焦于数仓调优,最后为大家简单介绍数仓产品的最新动态。各位开发者可以通过基础篇文章了解数据库的基本原理,然后结合调优思路,对实战篇的各个调优技巧进行深入的学习。性能调优是一个不断积累的过程,大家不用考虑一步到位,唯有进行实践的积累,才能在广阔的调优战场所向披靡。Part 1: 数仓调优基础篇基础篇介绍性能调优最基本的数据库命令analyze和explain,同时,基于分布式数据库GaussDB(DWS)中产生的分布式计划多种多样的特点,补充对现有分布式计划种类及其性能优劣的详细介绍。⇔  GaussDB(DWS)性能调优系列基础篇一:万物之始analyze统计信息介绍analyze命令,依次解读什么是统计信息,为什么要收集统计信息、怎么收集统计信息以及什么时候应该收集统计信息。⇔  GaussDB(DWS)性能调优系列基础篇二:大道至简explain分布式计划详细解读explain展示的数据库执行计划,介绍如何通过执行计划了解数据库的执行过程、识别性能瓶颈,针对性调优。⇔  GaussDB(DWS)性能调优系列基础篇三:衍化至繁之分布式计划详解基于分布式数据库GaussDB(DWS)中产生的分布式计划多种多样的特点,补充对现有分布式计划种类及其性能优劣的详细介绍。Part 2: 数仓调优实战篇从数据建模、表定义的设计,到数据库硬件、集群部署的选择,再到数据库系统级调优、数据表结构设计,以及单个SQL语句的编写及调优,都要考虑对性能的影响。系统级调优也好,SQL级调优也罢,掌握这十八般武艺,你也能成为一个性能调优高手。⇔  GaussDB(DWS)性能调优系列实战篇一:十八般武艺之总体调优策略介绍数据库级别的性能调优思路和总体策略,包括系统级和语句级调优,本篇主要重点放在系统级调优。⇔  GaussDB(DWS)性能调优系列实战篇二:十八般武艺之坏味道SQL识别发现SQL中的坏味道(导致执行效率低下的SQL语句及其执行方式)是性能调优的前提,本文简要介绍如何通过自诊断视图识别和发现业务中存在的 “坏味道”SQL,以便针对性调优。⇔  GaussDB(DWS)性能调优系列实战篇三:十八般武艺之好味道表定义如何根据数据库特征和产品业务特征,设计合理的表定义,以达到性能提升的目的。⇔  GaussDB(DWS)性能调优系列实战篇四:十八般武艺之SQL改写通过SQL改写提升执行性能,同时改写方法也是数据应用开发过程应该遵循的好SQL的书写习惯。⇔  GaussDB(DWS)性能调优系列实战篇五:十八般武艺之路径干预路径干预方法介绍,路径生成是表关联方式确定的主要阶段,本文讨论几个影响路径生成的要素:cost_param、 scan方式、join方式、stream方式,并从原理上分析如何干预路径的生成。⇔  GaussDB(DWS)性能调优系列实战篇六:十八般武艺Plan hint运用计划干预方法介绍,执行计划数据库执行方式的外在展示,本文讨论如何通过plan hint提示优化器采用更高效的计划,可以使查询执行的性能获得大幅的提升,成为性能调优的一件有利的工具。Part 3: 数仓GaussDB(DWS)产品动态新一代华为云数仓GaussDB(DWS)已广泛应用于金融、政府、运营商、交通、物流、互联网等领域,服务于全球1000+客户,为各行业提供极具竞争力的数据仓库解决方案。⇔  华为云GaussDB(DWS)数据仓库以2048大规模节点通过信通院评测认证⇔  五大关键能力,华为云原生数据仓库GaussDB(DWS)深度技术解读⇔  华为GaussDB(DWS)数据仓库,助力招行“人人用数,创新前行”⇔  数智金融 使能创新,“2020华为数智金融论坛”在溪村成功举办⇔ 华为认证GaussDB OLAP数仓高级工程师 HCIP-GaussDB-OLAP V1.5(中文版)发布通知数仓GaussDB(DWS)开发者论坛:https://bbs.huaweicloud.com/forum/forum-598-1.html数仓GaussDB(DWS)产品主页:https://www.huaweicloud.com/product/dws.html转自,【技术补给站】第2期:数仓性能调优必读:从系统级到SQL级,带你进阶为性能调优高手-云社区-华为云 (huaweicloud.com)
  • [POC&交付] 教你如何优雅的编译和使用TPC-DS工具
    一、tpcds工具编译1. 从tpc官网下载TPC-DS包。http://www.tpc.org/tpcds/2. 提交TPC-DS包至linux服务器上。3. 解压。    unzip  tpc-ds2.6.zip4. 进入目录。    cd v2.6.0/tools5. 复制Makefile文件。    cp Makefile.suite Makefile6. 编译工具    make二、生成查询语句#----下面是坑,query生成工具调用的模板里面缺少两个宏定义,需要自己补上,可以定义为任意字符串,但推荐下面设置1. 编辑sql生成模板。    vi  ../query_templates/oracle.tpl2. 新增两个宏定义。    define _BEGIN = "-- start query " + [_QUERY] + " in stream " + [_STREAM] + " using template " + [_TEMPLATE] + " and seed " + [_SEED];    define _END = "-- end query " + [_QUERY] + " in stream " + [_STREAM] + " using template " + [_TEMPLATE];#----完成填坑3. 然后就可以生成query了。  ./dsqgen -input ../query_templates/templates.lst -directory ../query_templates/ -dialect oracle -scale 10000  参数就不解释了,自个使用-?查询就明白了。4. And,query生成在哪呢?   查看当前路径下的sql文件,会发现多了一个query_0.sql,就是“这货”了。   ls query_0.sql   三、生成TPC-DS数据   生成数据依赖于dsdgen工具,此外还有一个tpcds.idx的二进制文件常用的参数:-scale <n>    : n为整数,指定生成数据的规模-dir <dir>     : dir为已存在的目录,指定生成数据文件的存放目录-parallel <n> : n为整数,指定数据生成多少份-child <n>   : n为整数,指定生成第一几份数据,配合-parallel使用-delimiter:  指定数据文件字段分隔符-table <tablename>    : 指定生成哪张表数据注:tpcds共25张表,表名如下:call_centercatalog_pagecustomercustomer_addresscustomer_demographicsdate_dimdbgen_versionstorehousehold_demographicsincome_bandinventoryitempromotionreasonship_modetime_dimwarehouseweb_pageweb_sitecatalog_returnsweb_returnsstore_returnscatalog_salesweb_salesstore_salesTPCDS数据主要存在store_sales、store_returns、catalog_sales、catalog_returns、web_sales、web_returns 6个表中,生成数据时指定store_sales、catalog_sales、web_sales三个表即可,store_returns、catalog_returns、web_returns三个表会随*_sales数据的生成自动生成出来典型用法:生成tpcds 100x数据,表store_sales数据文件分为5份,将第一份数据存在在目录/data2/tpcds100x下(根据需要可以适当舍去某些选项)./dsdgen -scale 100 -dir /data2/tpcds100x -TERMINATE N -parallel 5 -child 1 -force Y -table store_sales ./dsdgen -scale 100 -dir /data2/tpcds100x -TERMINATE N -parallel 5 -child 2 -force Y -table store_sales ./dsdgen -scale 100 -dir /data2/tpcds100x -TERMINATE N -parallel 5 -child 3 -force Y -table store_sales ./dsdgen -scale 100 -dir /data2/tpcds100x -TERMINATE N -parallel 5 -child 4 -force Y -table store_sales ./dsdgen -scale 100 -dir /data2/tpcds100x -TERMINATE N -parallel 5 -child 5 -force Y -table store_sales 想了解GuassDB(DWS)更多信息,欢迎微信搜索“GaussDB DWS”关注微信公众号,和您分享最新最全的PB级数仓黑科技~转载来自:https://bbs.huaweicloud.com/blogs/268496
  • [集群&DWS] 详解GaussDB(DWS)数据库智能监控运维服务如何定位SQL执行问题
    【摘要】 在GaussDB(DWS)智能运维体系介绍中,大致梳理了DMS作为DWS云原生的智能运维系统,整个体系设计和服务群体,本文将以DBA视角分析,当在使用DWS数仓服务遇到SQL执行问题,怎么利用DMS系统去定位问题,并介绍DMS是怎么设计查询相关的指标和页面。在GaussDB(DWS)智能运维体系介绍中,大致梳理了DMS作为DWS云原生的智能运维系统,整个体系设计和服务群体,本文将以DBA视角分析,当在使用DWS数仓服务遇到SQL执行问题,怎么利用DMS系统去定位问题。1. 直接入口 - 集群概览在集群概览页面中可以看到当前集群执行SQL中耗时和下盘量最大的top5的查询SQL,如果像获取更进一步的查询信息,可以通过【监控】-【查询监控】2. 查询监控 - 实时查询在实时查询页面,提供了一个当前查询执行的聚合数据,提供当前数据库中运行、阻塞、延迟、取消查询数,以及在快慢车道中的查询数。聚合指标说明聚合指标名称指标说明计算方式运行处于运行中查询的数量state = ‘active’ state = ‘fastpath function call’ 为了保证数据一致性,这里还需要减掉阻塞和延迟的查询数量。阻塞处于阻塞中查询的数量state = ‘active’ and waiting = ‘t’取消后端在事务中,但事务中有语句执行失败state = ‘idle in transaction (aborted)’延迟查询正在排队等待执行state = ‘active’ and enqueue is not NULL快慢车道处于快车道中的查询和处于慢车道中的查询数量lane = ‘fast’ lane = ‘slow’DBA可以在【查询监控】-【实时监控】页面中对当前系统的查一下以提交时间、阻塞时间、执行时间、CPU时间、CPU时间倾斜、平均下盘量这些维度进行排序,获取关注的这些维度的topN的数据。实时查询显示项说明指标名称指标描述查询ID当前查询语句的QueryID,内核给每一个查询语句分配的唯一标识用户名称提交当前查询语句的用户名称应用名称当前查询语句所对应的应用名称数据库名称当前查询语句所对应的数据库名称工作负载队列承载当前查询语句的工作负载队列名称提交时间当前查询语句提交的时间戳阻塞时间当前查询语句执行前的等待时间,单位:ms执行时间当前查询语句到目前为止的执行时间,单位:msCPU时间当前查询语句在所有DN上执行的CPU总时间,单位:ms平均下盘量当前查询语句在所有DN上的平均下盘量,单位:MB查询语句当前正在执行的查询语句接入CN提交当前查询语句的CN名称客户端IP提交当前查询语句的客户端IP地址快慢车道当前查询语句所在的车道查询状态当前正在执行查询的语句的查询状态排队状态当前查询在数据库中执行的状态,是否在工作负载队列上排队查询监控还可以对具体的单个查询查看详细信息。查询详情指标名称指标描述基本信息该查询的基本信息:用户名,数据库,开始时间,预估执行时间等等调优警告该语句触发的内核调优告警,没有的话返回空实时资源消耗展示SQL执行过程中,CPU,内存,I/O下盘量指标的变化趋势(该页面仅实时查询下钻显示)历史资源消耗展示SQL执行过程中,CPU,内存,I/O下盘量指标的变化趋势查询语句该查询所执行的SQL语句查询计划该查询的语句的查询计划DMS还提供了历史查询,供DBA通过时间区间查看历史查询信息历史查询除了表格数据,DMS还提供了性能监控,可以提供对当前集群或者数据维度的TPS,查询数等指标提供趋势分析性能监控除了针对DBA提供可视化的页面呈现,DMS还提供了openAPI供开发人员对应自有监控系统。openAPI (华为云未上线)/v1/{project_id}/dms/clusters/{cluster_id}/query{ "queries": [ { "query": "select count(*) \r\nfrom store_sales\r\n ,household_demographics \r\n ,time_dim, store\r\nwhere ss_sold_time_sk = time_dim.t_time_sk \r\n and ss_hdemo_sk = household_demographics.hd_demo_sk \r\n and ss_store_sk = s_store_sk\r\n and time_dim.t_hour = 8\r\n and time_dim.t_minute >= 30\r\n and household_demographics.hd_dep_count = 5\r\n and store.s_store_name = 'ese'\r\norder by count(*)\r\nlimit 100;", "max_cpu_time": 0, "min_cpu_time": 0, "total_cpu_time": 0, "cpu_skew": 0, "max_peak_mem": 11, "min_peak_mem": 11, "avg_peak_mem": 11, "mem_skew": 0, "max_spill_size": 0, "min_spill_size": 0, "avg_spill_size": 0, "spill_skew": 0, "max_peak_iops": 0, "min_peak_iops": 0, "avg_peak_iops": 0, "iops_skew": 0, "db_name": "test", "application": "gsql", "query_id": "79657418412457882" } ], "timestamp": 1616679496270, "cluster_id": "9c11a33a-64e6-40c1-93bd-01b2255b2228" }想了解GuassDB(DWS)更多信息,欢迎微信搜索“GaussDB DWS”关注微信公众号,和您分享最新最全的PB级数仓黑科技~转载来自:https://bbs.huaweicloud.com/blogs/269981
  • [交流吐槽] 【SQL语言基础学习】零基础如何玩转PL/SQL DEVELOPER?
    一、介绍PL/SQL DEVELOPER是一个集成开发环境,它专门针对Oracle数据库的存储程序单元的开发所用。PL/SQL开发者在开发Oracle应用程序的时候都注重于开发工具简单易用,代码简洁和开发效率高等特点。二、下载和安装想要使用 PL/SQL DEVELOPER ,需要先下载安装介质:PL/SQL DEVELOPER软件:plsqldev1406x64.msiOracle客户端软件:WINDOWS.X64_193000_client.zip注意:两个软件的系统位数和windows系统需保持一致,本次为64位。1、安装PL/SQL DEVELOPER选择输入密钥安装:输入密钥信息:product code: ke4tv8t5jtxz493kl8s2nn3t6xgngcmgf3serial Number: 264452password: xs374ca至此,PL/SQL DEVELOPER 安装结束。2、安装Oracle客户端解压到安装目录:双击setup开始安装客户端:选择管理员模式安装:使用内置账户:根据实际情况进行选择,建议默认:至此,Oracle客户端 安装结束。三、配置Windows系统环境变量1、右键我的电脑—>高级系统设置—>环境变量2、系统变量添加TNS_ADMIN变量:3、系统变量添加NLS_LANG变量,值为SIMPLIFIED CHINESE_CHINA.ZHS16GBK四、配置PL/SQL Developer软件1、双击打开PL/SQL Developer软件连接方式有两种:1、配置TNSNAMES2、通过IP、监听端口和实例名1、配置TNSNAMES在TNS_ADMIN的路径下,新建一个文件:tnsnames.oraTNS文件中,CDB19C 是自定义的TNS名称,10.211.55.100是oracle数据库主机的IP,1521是监听的端口号,cdb19c是oracle数据库实例的服务名。重新打开PL/SQL Delveloper软件,填入数据库用户名密码,选择TNS(CDB19C),角色为SYSDBA:计算器:SELECT 365 * 24 FROM dual;2、通过IP、监听端口和实例名打开PL/SQL Delveloper软件,填入数据库用户名密码,角色为SYSDBA,数据库填写:10.211.55.100:1521/cdb19c执行查询当月日历:上面介绍了通过安装PL/SQL和Oracle客户端,成功连接到Oracle数据库进行查询。当然,还有一种更简单的方式进行配置PL/SQL Developer,就是通过打包已安装好的软件+Oracle免安装的客户端软件。直接解压缩,配置环境变量即可使用,本文不做介绍。感兴趣的朋友可以加博主私信获取安装包。————————————————版权声明:本文为CSDN博主「Lucifer三思而后行」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/m0_50546016/article/details/117913049
  • [其他] 扩容分段重分步
    我们在support上可以找到标准的扩容指导书,用于指导我们扩容重分步,解决我们数据节点数据盘存储容量瓶颈的问题。这是常见的标准扩容重分步操作指导。经过提RFC申请,我们常常会得到一个时间窗,这个时间窗是要进行添加主机和mppdb的重分步,过程中是要求离线的,如果评估出来的时间窗是24+小时,就得对应停业务这么长时间,有时甚至额外加上环境问题导致的故障处理时间对于可以追批的局点可以接受,但是对于某些金融局点,长时间停业务往往就很难协调时间窗。这时候就需要定制的分段重分步,分段重分步允许客户每天留一定时间(建议4+小时,这段时间还是要离线停业务的)重分步操作,即将整个重分步流程分多批次(天)来执行。并对所有表进行规划排序重分步,以便最大效率最短时间完成重分步建议将版本升级到GAUSSDB A 8.0.0.9以上,相关影响,由于重分步过程中会有2个nodegroup,需要业务sql开始加上固定的sql,防止搜索计划超时,详见提RFC的具体文件。建议组网规划,新节点不要和老节点不同网段,以免出现网络性能不均衡的情况。由于要根据局点定制化执行(排表重分步顺序,按业务调整等),不经RFC不可私自执行RFC方案审核完后,现场保障人员即可依据方案执行。
  • [指导教程] 多方SQL计算场景下,如何达成双方共识,确认多方计算作业的安全性
    安全多方计算在SQL场景下的限制随着MPC、隐私计算等概念的流行, 诸多政府机构、金融企业开始考虑参与到多方计算的场景中, 扩展数据的应用价值。以下面这个场景为例,  银行可能希望获取水电局和税务局的数据,来综合计算得到各公司的信贷评分等级。通过TEE、MPC等策略,可防止中间数据在计算过程中发生泄漏。但计算结果最终会返回给作业发起方, 例如发起方试图查询 [企业id, 用水量+ 用电量]时 ,   隐私计算平台只能保证用电量、用水量单独不泄露, 无法保证用水量和用电量的相加值不被泄露,毕竟这个相加值是作为计算结果呈现的。 因此对于“计算结果是否会泄露敏感数据”这个问题,是TEE、MPC等策略所无法解决的。常见解决策略一、默认的隐私策略隐私计算平台通过设置复杂的隐私策略,指定少数sql场景, 来强行限制敏感数据的使用。例如直接拒绝id字段、敏感数据字段被明文暴露等。二、基于审批的作业共识但由于业务场景复杂,如果规则限制过强,可能导致阻止了正常逻辑的作业,  如果限制过弱,则可能导致敏感数据被恶意套取丢失。因此在多方SQL计算时,各数据提供方和作业发起方应该能够针对作业内容达成共识,确认该作业对数据的使用是正常的,合理的。TICS作业审批功能,达成计算共识华为tics可信智能计算服务支持作业审批功能,当试图发起某SQL多方作业时,数据提供方可进行审批,确认是否允许这种数据的用法。具体操作步骤如下:联盟管理员登录TICS控制台。进入TICS控制台后,单击页面左侧“联盟管理”。进入联盟管理页面后,单击联盟名称进入联盟详情页。联盟管理员在联盟详情页右上角单击“开启作业审批”。开启之后,所有作业就都需要通过审批后,才能执行。作业发起方进入自己所属的代理,编写完作业之后,单击“提交审批”。在页面下方可查看审批方和审批进度。图1 提交审批此时TICS执行分析作业的SQL语句时,将不再受隐私规则的语法限制,此时必须由提供方确认字段用途后才能继续执行SQL语句。审批中或者审批通过后, 如果进行了修改SQL和保存操作,那么就需要重新提交审批。提交完成后,在页面下方可查看审批方和审批进度。图2 审批进度数据提供方进入数据集所在代理,单击页面左侧的“审批管理”,查找待处理的审批项。点击“查看详情”。图3 审批管理详情页可以看到审批报告,报告内容包括作业发起方、会在该代理连接器上执行的SQL语句、各字段作用描述、是否在结果中可见(即明文显示)等。图4 详情说明:处于保护作业发起方的业务机密性, 这里会屏蔽所有和该审批者无关的字段信息,例如ID字段的描述中, 会屏蔽该字段具体和哪个字段做Join。审批报告中的“字段是否在结果中可见”直接决定了该字段数值是否会明文显示,请根据字段业务类型慎重判断是否可见。数据提供方确认风险后,在详情页填写审批意见,单击“同意”。作业发起者执行作业,执行完成后,可在页面下方查看执行结果。图5 执行作业华为可信智能计算服务 TICS 官网链接:https://www.huaweicloud.com/product/tics.html欢迎参与最新版的体验。tics服务交流社区:https://bbs.huaweicloud.com/forum/forum-1348-1.html
  • [实践系列] 通过sql查询获取表字段详细信息
    可通过如下SQL实现:select n.nspname,c.relname,a.attname,t.typname from pg_attribute a left join pg_class c on a.attrelid = c.oid left join pg_namespace n on c.relnamespace = n.oid left join pg_type t on t.oid = a.atttypid where c.relname='test' and a.attnum>0;其中test修改为具体的表名称即可,该返回结果会将不同schema下名称为test的表的字段信息全部罗列出来。
  • [实践系列] 通过sql查询快速获取分区表的的分区键
    可通过如下SQL实现:select n.nspname,c.relname,a.attname,t.typname from pg_attribute a left join pg_class c on a.attrelid = c.oid left join pg_namespace n on c.relnamespace = n.oid left join pg_type t on t.oid = a.atttypid left join PG_PARTITION p on a.attnum::varchar = p.partkey::varcharwhere c.parttype = 'p'and c.relname = p.relname;查询结果为当前数据库下,所有schema下面的分区表的信息。包含分区字段以及其字段的属性。其中pg_class、pg_namespace、pg_type、PG_PARTITION均为系统视图,增加一些筛选条件还能获取不同的展示结果,例如增加一个条件and n.namespace='schema_name'  --schema_name 替换为实际的名称可以指定某一个schema显示其下属的所有的分区表的信息。
  • [其他问题] 【DWS产品】【负载管理功能】CCN是如何知道SQL是复杂作业还是简单作业 ?
    Control Coordinator Node,GaussDB A动态负载管理中心控制点。负责进行各Coordinator中复杂作业是否可以执行的中心判断、排队和调度,以实现动态负载管理。  GaussDB是一个内存自适应的数据库,会自动根据全局内存的负载情况,来对每个语句进行仲裁,当前资源合理的情况下,才会让语句下发并执行,如果在资源不足的情况下,就不让他继续执行,等到资源充足才进行执行,避免会出现比如内存占用过大,导致进程OOM之后异常退出之类的情况。有时候会出现一种情况,就是大量作业都提交了没有结果,表现出的现象就是业务完全不执行,所有作业都卡住  。问题: 集群并发高的时候,常常看到 waiting in ccn 之类的等待,这个是在等待 CCN 判断是 简单查询, 还是复杂查询 , 然后再进入该进入的队列 等待或 执行 ? CCN 在SQL没有解析或执行前是通过执行计划判断简单查询 还是 复杂查询 ? CCN 的时候执行计划应该还没有吧  (否则CCN可能是个大瓶颈)  ? 
  • [集群&DWS] GaussDB(DWS)负载管理视图应用
    【摘要】 GaussDB(DWS)提供了丰富的视图用于SQL信息和状态监控,协助用户SQL运维及问题分析。其中负载管理也提供了专门的视图用于SQL运行状态监控,通过视图排查SQL排队原因,及时给出优化措施。本文重点介绍了负载管理常用视图,同时结合其他视图给出了视图应用案例。1.       背景介绍      GaussDB(DWS)提供了丰富的视图用于SQL信息和状态监控,协助用户SQL运维及问题分析。其中负载管理也提供了专门的视图用于SQL运行状态监控,通过视图排查SQL排队原因,及时给出优化措施。本文重点介绍了负载管理常用视图,同时结合其他视图给出了视图应用案例。2.       视图简介负载管理监控视图:PG_SESSION_WLMSTAT(负载管理常用视图)状态监控视图:PGXC_STAT_ACTIVITY(负载管理辅助视图),PG_SESSION_WLMSTAT中不包含query_id、query_start及coorname信息,可以通过关联该视图查看TopSQL实时监控视图:PGXC_WLM_SESSION_STATISTICS(负载管理辅助视图),包含query_band、资源监控等信息TopSQL历史监控视图:PGXC_WLM_SESSION_INFO(负载管理辅助视图)其中负载管理监控视图当前只有单CN视图,如需查看所有CN上查询负载管理信息可通过创建相应FUNCTION实现。参考FUNCTION如下:CREATE OR REPLACE FUNCTION pg_catalog.pgxc_session_wlmstat() RETURNS setof pg_session_wlmstat AS $$ DECLARE row_name record; row_data pg_session_wlmstat%rowtype; query_str text; query_str_nodes text; BEGIN query_str_nodes := 'SELECT node_name FROM pgxc_node WHERE node_type IN (''C'')'; FOR row_name IN EXECUTE(query_str_nodes) LOOP query_str := 'EXECUTE DIRECT ON (' || row_name.node_name || ') ''SELECT * from pg_session_wlmstat'''; FOR row_data IN EXECUTE(query_str) LOOP RETURN NEXT row_data; END LOOP; END LOOP; return; END; $$ LANGUAGE 'plpgsql' NOT FENCED;3.       视图应用创建资源池,设置快慢车道并发上限都是2,其余参数使用默认参数:CREATE RESOURCE POOL rp1 WITH (ACTIVE_STATEMENTS=2,MAX_DOP=2);创建用户,关联资源池rp1CREATE USER usr1 PASSWORD 'password' RESOURCE POOL 'rp1';使用usr1创建表并运行作业,快慢车道各运行10个作业(视图查询过程中可能有作业结束,因此排队作业数可能减少),查询视图查询作业信息:PGXC_STAT_ACTIVITY视图postgres=# select coorname,usename,query_start,enqueue,state,query_id from pgxc_stat_activity where usename='usr1' order by query_start; coorname | usename | query_start | enqueue | state | query_id --------------+---------+-------------------------------+--------------------------+--------+------------------- coordinator1 | usr1 | 2021-06-11 09:59:02.822459+08 | | active | 75153818781745720 coordinator1 | usr1 | 2021-06-11 09:59:02.823087+08 | | active | 75153818781745723 coordinator1 | usr1 | 2021-06-11 09:59:02.8231+08 | waiting in respool queue | active | 75153818781745724 coordinator1 | usr1 | 2021-06-11 09:59:02.823715+08 | waiting in respool queue | active | 75153818781745726 coordinator1 | usr1 | 2021-06-11 09:59:02.823928+08 | waiting in respool queue | active | 75153818781745727 coordinator1 | usr1 | 2021-06-11 09:59:02.825433+08 | waiting in respool queue | active | 75153818781745728 coordinator1 | usr1 | 2021-06-11 09:59:02.825918+08 | waiting in respool queue | active | 75153818781745730 coordinator1 | usr1 | 2021-06-11 09:59:02.828873+08 | waiting in respool queue | active | 75153818781745732 coordinator1 | usr1 | 2021-06-11 09:59:02.870048+08 | waiting in respool queue | active | 75153818781745739 coordinator1 | usr1 | 2021-06-11 09:59:02.870726+08 | waiting in respool queue | active | 75153818781745740 coordinator1 | usr1 | 2021-06-11 09:59:04.532598+08 | | active | 75153818781745779 coordinator1 | usr1 | 2021-06-11 09:59:04.53264+08 | | active | 75153818781745778 coordinator1 | usr1 | 2021-06-11 09:59:04.533594+08 | waiting in ccn queue | active | 75153818781745782 coordinator1 | usr1 | 2021-06-11 09:59:04.533626+08 | waiting in ccn queue | active | 75153818781745783 coordinator1 | usr1 | 2021-06-11 09:59:04.53382+08 | waiting in ccn queue | active | 75153818781745784 coordinator1 | usr1 | 2021-06-11 09:59:04.533834+08 | waiting in ccn queue | active | 75153818781745787 coordinator1 | usr1 | 2021-06-11 09:59:04.534021+08 | waiting in ccn queue | active | 75153818781745786 coordinator1 | usr1 | 2021-06-11 09:59:04.534788+08 | waiting in ccn queue | active | 75153818781745788 coordinator1 | usr1 | 2021-06-11 09:59:04.53515+08 | waiting in ccn queue | active | 75153818781745789 coordinator1 | usr1 | 2021-06-11 09:59:04.536193+08 | waiting in ccn queue | active | 75153818781745790enqueue字段可能取值:waiting in queue:表示语句在排队中。(向前兼容取值)waiting in global queue:表示语句在CN并发队列排队中。waiting in respool queue:表示语句在资源池排队中。waiting in ccn queue:表示作业在CCN排队中。空:表示语句不在任何队列中,正在运行。state字段可能取值:(该字段代表session当前状态,不能说明语句在排队/运行中)active:后台正在执行查询。(该取值代表session有活跃作业,但是作业可能处于排队/实际运行中)idle:后台正在等待新的客户端命令。idle in transaction:后端在事务中,但事务中没有语句在执行。idle in transaction (aborted):后端在事务中,但事务中有语句执行失败。fastpath function call:后端正在执行一个fast-path函数。disabled:如果后端禁用track_activities,则报告此状态。从视图中可看出usr1所有session状态均处于active状态,代表所有session都在运行查询;通过enqueue字段可以看出有8个作业在CCN队列排队(复杂作业/慢车道),8个作业在资源池队列排队(简单作业/快车道),其余四个作业enqueue字段为空代表正在运行,其中包含两个快车道作业,两个慢车道作业,这点在后面PG_SESSION_WLMSTAT视图查询结果中得到验证。PG_SESSION_WLMSTAT视图postgres=# select usename,processid,threadid,priority,attribute,lane,enqueue,status,block_time,elapsed_time,statement_mem from pg_session_wlmstat where usename='usr1'; usename | processid | threadid | priority | attribute | lane | enqueue | status | block_time | elapsed_time | statement_mem ---------+-----------+-----------------+----------+-------------+------+--------------+---------+------------+--------------+--------------- usr1 | 46919 | 140323231098624 | 2 | Simple | fast | Respool | pending | 3 | 0 | 1 usr1 | 46920 | 140322958997248 | 2 | Simple | fast | None | running | 0 | 3 | 1 usr1 | 46922 | 140323509499648 | 2 | Simple | fast | None | running | 0 | 3 | 1 usr1 | 46921 | 140323556685568 | 2 | Simple | fast | Respool | pending | 3 | 0 | 1 usr1 | 46923 | 140323492718336 | 2 | Simple | fast | Respool | pending | 3 | 0 | 1 usr1 | 46924 | 140323416160000 | 2 | Simple | fast | Respool | pending | 3 | 0 | 1 usr1 | 46925 | 140323396757248 | 2 | Simple | fast | Respool | pending | 3 | 0 | 1 usr1 | 46926 | 140323347470080 | 2 | Simple | fast | Respool | pending | 3 | 0 | 1 usr1 | 46927 | 140323330688768 | 2 | Simple | fast | Respool | pending | 3 | 0 | 1 usr1 | 46928 | 140323313907456 | 2 | Simple | fast | Respool | pending | 3 | 0 | 1 usr1 | 46952 | 140323293980416 | 2 | Complicated | slow | CentralQueue | pending | 2 | 0 | 256 usr1 | 46953 | 140323277199104 | 2 | Complicated | slow | CentralQueue | pending | 2 | 0 | 256 usr1 | 46954 | 140323254695680 | 2 | Complicated | slow | None | running | 0 | 2 | 256 usr1 | 46956 | 140323191777024 | 2 | Complicated | slow | CentralQueue | pending | 2 | 0 | 256 usr1 | 46955 | 140323208558336 | 2 | Complicated | slow | CentralQueue | pending | 2 | 0 | 256 usr1 | 46958 | 140323113662208 | 2 | Complicated | slow | None | running | 0 | 2 | 256 usr1 | 46959 | 140323083773696 | 2 | Complicated | slow | CentralQueue | pending | 2 | 0 | 256 usr1 | 46960 | 140322866190080 | 2 | Complicated | slow | CentralQueue | pending | 2 | 0 | 256 usr1 | 46957 | 140323172374272 | 2 | Complicated | slow | CentralQueue | pending | 2 | 0 | 256 usr1 | 46961 | 140322830010112 | 2 | Complicated | slow | CentralQueue | pending | 2 | 0 | 256 (20 rows)attribute显示为Simple代表简单作业,显示Complicated代表复杂作业;lane显示fast代表语句运行在快车道,显示slow代表运行在慢车道;enqueue字段为None表示作业不在排队,显示Respool表示在资源池排队,显示CentralQueue表示在CCN排队,该字段与PGXC_STAT_ACTIVITY视图中enqueue字段相对应;status为pending表示查询排队/默认状态,显示running表示查询正在运行。备注:pending作业不一定在排队,有可能还没走到负载管理,做到走过负载管理后状态才更新为running,显示pending作业需要结合enqueue字段判断作业是否排队;pending作业enqueue为None表示作业未走到负载管理。4.  总结        本文简单介绍了负载管理常用视图,同时着重介绍了PGXC_STAT_ACTIVITY和PG_SESSION_WLMSTAT在实际应用中的差异,实际应用过程中可以根据实际需求将两个视图进行关联查询,为性能分析、负载管理提供帮助。转载来自:https://bbs.huaweicloud.com/blogs/278874        想了解GuassDB(DWS)更多信息,欢迎微信搜索“GaussDB DWS”关注微信公众号,和您分享最新最全的PB级数仓黑科技~
总条数:865 到第 页
上滑加载中