关于gaussdb:GaussDB中的SET操作符用法详解

 关系数据库中提供了一个对于汇合的运算符SET操作符,其中包含以下操作: ●UNION/UNIONALL并集 ●INTERSECT交加 ●MINUS差集 一、操作符解说 1、UNION 合并两个查问后果集,隐式DINSTINCT,删除反复行(即取汇合并集) –合并两个提取表/派生表(derivedtable),返回后果为:[a,b,c,d,e] SELECT FC FROM (VALUES(‘a’),(‘b’),(‘c’),(‘e’)) Table1 (FC)UNIONSELECT FC FROM (VALUES(‘a’),(‘b’),(‘c’),(‘d’)) Table2 (FC) 2、EXCEPT/MINUS 返回呈现在第一个后果集但不呈现在第二个后果集中的所有行(即两汇合相减) –返回后果为:[e] SELECT FC FROM (VALUES(‘a’),(‘b’),(‘c’),(‘e’)) Table1 (FC)EXCEPTSELECT FC FROM (VALUES(‘a’),(‘b’),(‘c’),(‘d’)) Table2 (FC) 3、INTERSECT 返回第一个查问后果集和第二个查问后果集共有的局部(即取汇合交加) –返回后果为:[a,b,c] SELECT FC FROM (VALUES(‘a’),(‘b’),(‘c’),(‘e’)) Table1 (FC)INTERSECTSELECT FC FROM (VALUES(‘a’),(‘b’),(‘c’),(‘d’)) Table2 (FC) 二、汇合运算的应用场景 1、应用UNION代替Where子句中的OR,查问速度更快 2、应用EXCEPT和INTERSECT,过滤出列表中不存在/存在于数据库

June 13, 2023 · 1 min · jiezi

关于gaussdb:带你了解WDRGaussDBDWS-的性能监测报告

摘要:通过本文,读者可通晓什么是WDR,如何创立性能数据快照以及生成WDR报告。本文分享自华为云社区《WDR-GaussDB(DWS) 的性能监测报告》,作者:Zhang Jingyao。 GaussDB(DWS) 8.1.1版本引入了负荷诊断报告(Workload Diagnosis Report,以下简称WDR)性能,能够提供指定时间段内的性能数据,以html网页报告的模式出现给用户。通过剖析该报告,可能帮忙用户发现异常、诊断问题、优化性能等,其内容丰盛直观,是数据库调优的利器。 本文对WDR的原理和应用办法进行简要介绍。通过本文,读者可通晓什么是WDR,如何创立性能数据快照以及生成WDR报告。 1. WDR简介WDR是GaussDB(DWS)数据库监控个性的衍生品。数据库内核在运行过程中积攒了大量的一手数据,像执行各类SQL的数量,表和索引的拜访次数和工夫,CPU、内存等底层软硬件的运行状况等。用户能够通过数据库提供的零碎视图实时查问这些数据。例如,查问PGXC_WORKLOAD_SQL_COUNT视图能够取得自数据库启动以来各类SQL的执行次数: postgres=# select * from PGXC_WORKLOAD_SQL_COUNT; node_name | workload | select_count | update_count | insert_count | delete_count | ddl_count | dml_count | dcl_count-----------+--------------+--------------+--------------+--------------+--------------+-----------+-----------+----------- cn_5001 | default_pool | 1125616 | 1236 | 322303 | 0 | 13 | 1573048 | 102 cn_5002 | default_pool | 1128231 | 1322 | 321048 | 0 | 2 | 1575517 | 173973 cn_5003 | default_pool | 1128191 | 1130 | 309138 | 0 | 0 | 1575430 | 173980(3 rows)将这些一手的性能监测数据保留下来,并进行自动化的统计分析,就得获知某段时间内数据库的运行状况,例如是否忙碌,是否有不合理的SQL,有哪些异样事件等,从而为诊断问题,性能调优提供参考根据。这便是WDR的由来。 ...

July 23, 2021 · 2 min · jiezi

关于gaussdb:在数据库中如何查询表的创建时间

摘要:在我的项目交付中,常常有人会问“如何在数据库中查问表的创立工夫?” ,那么到底如何在GaussDB(DWS)中查找对象的创立工夫呢?本文提供3种办法作为参考,包含dba_objecs视图查看办法、审计日志查看办法和CN日志查看办法。本文分享自华为云社区《GaussDB(DWS)实际系列-GaussDB(DWS)如何查问对象(表)的创立工夫?》,原文作者:四叶草。 一、 背景形容在我的项目交付中,常常有人会问“如何在数据库中查问表的创立工夫?” ,那么到底如何在GaussDB(DWS)中查找对象的创立工夫呢?本文提供3种办法作为参考,包含dba_objecs视图查看办法、审计日志查看办法和CN日志查看办法。 二、 操作演练办法1:视图查询方法DBA_OBJECTS视图存储了数据库中所有数据库对象的相干信息, GaussDB(DWS)反对通过DBA_OBJECTS视图进行查问,字段和具体阐明如下: 留神:须要有系统管理员权限才能够拜访。 其中对象的类型object_type字段会包含TABLE、INDEX、VIEW、RULE, PROCEDURE、TYPE、OPERATOR等,查问时可依据该字段进行筛选: 1. 创立测试表 创立测试表,用于后续查问测试。 --定义一个表,应用HASH散布。CREATE TABLE employee_info( id INTEGER NOT NULL, name VARCHAR(16) NOT NULL, tel VARCHAR(11), addr varchar(10))DISTRIBUTE BY HASH(id); --查看以后零碎工夫。select current_timestamp;测试表创立实现后查看以后零碎工夫作为参考。 2. 查问创立工夫 通过DBA_OBJECTS视图查看表对象创立工夫。 select * from dba_objects where object_type='TABLE' and object_name='employee_info';查问后果如下: 3. 更新测试表 更新测试表employee_info,测试dba_objects视图是否能够保留对象的最初批改工夫,批改行为包含ALTER操作和GRANT、REVOKE操作: --向表中减少一个varchar列group_info。ALTER TABLE employee_info ADD group_info varchar(30);--查看以后零碎工夫。select current_timestamp;相干信息记录如下: 4. 查看最初更新工夫 通过DBA_OBJECTS视图查看对象的最初更新工夫。 select * from dba_objects where object_type='TABLE' and object_name='employee_info';查问后果如下: 办法2:审计日志查看办法审计日志统计信息更全,关上审计总开关audit_enabled=on,并设置审计项audit_system_object。 audit_system_object参数阐明:该参数决定是否对GaussDB A数据库对象的CREATE、DROP、ALTER操作进行审计。GaussDB A数据库对象包含DATABASE、USER、schema、TABLE等。通过批改该配置参数的值,能够只审计须要的数据库对象的操作。取值范畴:整型,0~524287Ø 0代表敞开数据库对象的CREATE、DROP、ALTER操作审计性能。Ø 非0代表只审计某类或者某些数据库对象的CREATE、DROP、ALTER操作。默认值:12295 换算成19位二进制为000 0011 0000 0000 0111取值阐明:该参数的值由19个二进制位的组合求出,这19个二进制位别离代表GaussDB (DWS)的19类数据库对象。如果对应的二进制位取值为0,示意不审计对应的数据库对象的CREATE、DROP、ALTER操作;取值为1,示意审计对应的数据库对象的CREATE、DROP、ALTER操作。这19个二进制位代表的具体审计内容请参见表2。 ...

July 8, 2021 · 1 min · jiezi

关于gaussdb:开发者必看你想知道的迁移之道都在这里了

摘要:数据库迁徙的目标是为了业务迁徙,而业务是否顺利切换取决于数据库的迁徙能力和迁徙后的准确性,站在业务侧的角度,至多要满足以下三个正确性才可能去做业务的切换。本文分享自华为云社区《华为云GaussDB(for openGauss)专场直播第4期:用对迁徙工具,迁徙也能够很简略》,原文作者:神思胖 。 1.背景介绍随着GaussDB(for openGauss)数据库的一直倒退,越来越多的客户开始抉择应用GaussDB(for openGauss),其中很大一部分客户是将现有的零碎替换到GaussDB(for openGauss)上,客户以后所用的数据库类型多种多样,如Oracle、MySQL、PostgreSQL等。那么如何解决将客户以后数据库迁徙到GaussDB(for openGauss)上是一个很迫切的需要。GaussDB(for openGauss)自带的GDS数据迁徙工具实现了GaussDB(for openGauss)之间的高效数据迁徙,然而无奈解决异构同步和实时同步的场景。华为云数据库迁徙工具DRS以一种易用、稳固、高效的云服务为GaussDB(for openGauss)提供了异构迁徙和实时同步的能力,助力客户轻松将数据库迁徙到GaussDB(for openGauss)。 2.数据库迁徙整体解决方案数据库迁徙的目标是为了业务迁徙,而业务是否顺利切换取决于数据库的迁徙能力和迁徙后的准确性,站在业务侧的角度,至多要满足以下三个正确性才可能去做业务的切换。 对象迁徙是正确的数据库的存储过程、函数、触发器、表构造、索引等全副数据库对象可能残缺的迁徙到指标库,并且可能保障对象的运行逻辑和源库是统一的。 数据迁徙是正确的将源库的全量数据迁徙到指标库,当业务对停机工夫窗口有要求的时候,要思考全量+增量的在线迁徙,保障业务不中断。同时要可能对同步的数据进行校验,保障迁徙数据的准确性。 迁徙后业务运行是正确的当对象和数据都迁徙到指标库后,业务的切换还存在两个危险点,一个是业务在指标库的运行后果是否正确,另一个是指标库性能是否和源库一样支撑住业务的负载。因为异构数据库之间的差别还是很大的,设计理念和实现形式存在很多不同,会导致看上去相似的两个对象,其运行后果或效率是齐全不同的。所以要有工具来验证这种差别,保障迁徙后业务运行的正确性。 为了实现以上业务切换须要满足的条件,华为云提供了数据库迁徙的整体解决方案,通过语法迁徙(UGO),DRS-数据迁徙,DRS-数据校验和DRS-流量回放4个工具产品造成了整个迁徙过程的闭环。 语法迁徙(UGO)实现了将oracle数据库对象迁徙到GaussDB(for openGauss)的能力,能够给出残缺的迁徙评估报告,哪些对象能够齐全兼容的进行迁徙,哪些对象须要进行转换进行迁徙,哪些对象须要业务配合革新。 DRS-数据迁徙实现将Oracle、MySQL、PostgreSQL等数据库数据实时迁徙到GaussDB(for openGauss)的能力。 DRS-数据校验实现了对数据迁徙后的一致性校验,具备行级比对、内容级比对和实时的增量数据比对的能力。 DRS-流量回放实现对Oracle数据库的业务流量抓取,并对流量SQL进行转换,而后在GaussDB(for openGauss)进行回放的能力。 3.DRS数据迁徙上云 DRS提供了简略、易用的操作界面,采纳流程化的配置形式,客户依照提醒步骤一步一步操作便能够搭建出同步链路。DRS除了反对Oracle到GaussDB(for openGauss)的数据迁徙外,还反对其余数据库之间的数据同步,上面给出了以后DRS所反对的源库和指标库类型的列表。 在数据迁徙过程中,DRS采纳很多伎俩和技术去升高可能存在的危险,保障迁徙过程的稳固和最终数据的一致性。 在线迁徙DRS通过全量迁徙将客户数据库中的存量数据迁徙到GaussDB(for openGauss)中,通过增量同步,实时解析源库日志,将客户的实时变动数据同步到Gauss(for openGauss),通过全量和增量的无缝连接来保障客户在不中断业务的状况下,残缺地将全副数据迁徙到GaussDB(for openGauss)。 预校验在DRS的迁徙工作启动之前,为提前发现迁徙启动后可能存在的危险或谬误,DRS引入预校验环节,可能提前对配置信息、数据库兼容性信息、连通性信息等进行校验,同时会对一些能够迁徙胜利但可能会对业务产生影响的状况进行告警,让客户及时发现并提前解决。 断点机制为保证数据迁徙的一致性,DRS在每个组件中都设有断点机制,无论是在失常启停、异样重启还是在故障切换的场景下都能够保证数据同步的准确性,不会造成数据失落。 4.DRS技术实现原理DRS在技术实现上次要分为两个大的模块,一个是全量的数据同步,另一个是增量数据同步。全量同步解决对静态数据的迁徙,增量同步解决对实时的变动数据迁徙。 全量同步的技术架构全量同步的整体逻辑比较简单,就是从源库把数据通过select的形式查问进去,而后再将这些数据写入到指标库,只是在具体的代码实现上会有一些关键技术点。 数据分片个别全量同步产品的同步粒度都能够达到表级别的并发,即多个线程能够同时对多张表同时进行同步,但往往客户的零碎中会存在单表数据量特地大的状况,比方一张表几十亿甚至上百亿的数据,此时这张表的同步工夫就变为整个全量同步的工夫。那么如何进一步晋升单张表的同步效率呢?咱们能够对单表做进一步的拆分,依照主键去把它拆分成多个分片,多线程以分片为单位做并行的同步。 以后DRS依照上面的策略对表进行分片: 无主键表不进行分片分区表按分区进行同步,不再对每个分区进行分片有主键表按主键(第一列)进行分片数据不落盘为缩小全量同步过程中对磁盘的占用,DRS导出的数据不进行落盘缓存,而是间接通过内存传递给导入线程,在导出和导入速率相当的状况下,能够最大化的进步全量同步的效率。 断点管制全量同步半途中断是一个十分让人辣手的问题,可能一张2亿条数据的表,在同步到1.8亿的时候因为网络或源库快照过旧的问题导致同步失败,如果没有好的断点管制机制,那可能之前的付出都白白浪费,还要从新再次同步一次。DRS通过以分片为单位做为断点的保留记录,对于下面的例子,即便同步中断,也能够再次被拉起,而且拉起后,曾经同步胜利的分片将不再同步,还没有同步的分片则会持续同步。 流量管制客户的业务往往是存在高峰期和低峰期,高峰期时,数据库的资源占用是最高的,咱们要尽量避开在业务高峰期做全量的同步,因为全量同步对源库的cpu、内存和网络资源占用是很大的。DRS采纳流量管制的机制来缩小业务高峰期对源库的资源占用,次要是通过管制网络流量的形式,客户能够设置要进行流量管制的时间段,DRS在全量同步过程中,会实时计算同步的流量大小,运行到该时段后,当流量超过设置的阈值,会放缓数据获取的速度。运行过该时段后,便复原全副的数据同步速度。 全量+增量的无缝连接在业务切库的场景中,数据的迁徙过程个别能够抉择两种计划,一种是一次性将源库的数据迁徙到指标库,然而须要业务停机窗口,这个窗口的大小取决于全量数据迁徙的工夫。当数据量较大时,整个迁徙过程可能须要几天的工夫,这种业务停机是无奈承受的。所以另一种计划就是业务不中断的数据迁徙计划,它的实现原理就是基于全量迁徙和增量同步的无缝连接,对于Oracle->GaussDB(for openGauss)的迁徙,Oracle数据库提供了指定scn进行快照导出的性能,基于这个个性,DRS在做全量同步时,指定scn进行导出,这样整个全量同步的数据就是此scn点前的快照数据,而后增量同步以这个scn点作为同步的分界点,只有大于这个scn的增量事务才会被同步到指标库。这样就实现了全量和增量的无缝连接,同步过程无需业务进行停机,当全量数据同步实现且增量同步追赶到以后工夫点时,便可进行业务切换,业务中断窗口能够管制在秒级。 增量同步的技术架构DRS的增量同步架构次要分为3个局部,别离是数据抓取、落盘文件和数据回放。 数据抓取数据抓取通过对源库日志的解析,实时获取源库的变动数据,在外部实现上次要包含日志拉取、日志解析、事务整合和数据落盘几个步骤。 日志拉取DRS采纳Oracle的Logminer接口获取实时的redo日志,当redo归档后,DRS会读取归档日志文件。为了避免源库的归档日志被不确定性删除,DRS会启动日志拉取的线程(能够多线程并发)把日志拉取到本地,而后进行后续的解析。 日志解析Oracle Logminer接口获取到的数据须要进一步解析能力获取到理论的变动内容,DRS的日志解析线程对返回的数据进行过滤、拼接、元数据映射、转换等操作造成一条残缺的变更记录对象。 事务整合日志解析是依照源库变动数据的程序进行解析,解析后的每条记录的事务是穿插混合在一起的,必须对每条记录依照事务id进行整合能力造成一个残缺的事务。另一方面对于Oracle RAC的场景,还须要对不同节点的事务进行排序,防止事务乱序的状况产生。 落盘文件通过了事务整合后,造成了一个依照源库业务提交程序的序列,DRS会依照这个程序把这些数据写入到磁盘文件。落盘的数据蕴含了源库每一条变动数据的全副信息,蕴含表信息、列信息、事务信息、数据信息和其余额定信息(如工夫戳、rowid等),依据这些信息前面的组件便能够把每一条变动数据还原成对象的SQL。 数据回放数据回放就是将数据抓取到的数据在指标库进行执行的过程,但它和数据的抓取是解耦的。它读取DRS的落盘文件,解析出每条变动的数据,依据文件中记录的元数据信息重构出对应的SQL语句,在指标库执行。 在数据回放之前,DRS提供了过滤和转换的性能,能够对同步的数据进行过滤,可配置过滤条件,如只同步id < 10000的数据,也能够对同步数据的表名、schema名或列名进行映射等。 异样解决和回放性能是两个重要的考量点,DRS通过配置数据抵触策略来解决回放中的异样数据,通过并发机制来进步装载的性能。 抵触策略所谓的抵触是指在数据回放的时候呈现了数据类报错(如主键抵触、update和delete无奈找到记录等),这些报错一版都是因为两边的数据不统一造成的。DRS对这类谬误采纳了三种解决策略,别离是笼罩、疏忽和期待。 笼罩:当呈现抵触时,用抓取到的数据笼罩掉指标库的数据 疏忽:数据抵触后,间接跳过谬误记录,继续执行 期待:数据抵触后,期待人工解决 并发机制DRS的并发机制采纳记录级别的并发,最大化的晋升数据装载的性能。 首先从DRS的落盘文件中读取增量数据,按程序放入一个队列中,并行剖析引擎会从队列中获取每一条数据,并依据其主键信息判断是否存在数据抵触,对于没有抵触的数据阐明能够并行去执行,则把这些数据扩散到多个线程队列中,当线程队列中的数据量达到设定的阈值时,这批数据会作为一个事务在指标库执行。对于有抵触的数据,则把这条数据放到抵触队列,期待线程把上一批数据执行实现后,再次进入并行剖析引擎判断是否存在抵触。 Ps:该内容依据《GaussDB(for openGauss)数据迁徙之DRS》技术直播整顿实现,错过直播的小伙伴们,欢送点击此处回顾精彩内容哦~ 点击关注,第一工夫理解华为云陈腐技术~

July 2, 2021 · 1 min · jiezi

关于GaussDB:一文介绍备机重建各种方法的实现机制

摘要:本文将介绍备机重建各种办法的实现机制,并联合利用场景剖析,以及对新增参数的应用倡议,以期获得最佳利用成果。本文分享自华为云社区《先码再看,一文介绍备机重建各种办法的实现机制》,原文作者:Victor_NK 。 1 需要介绍GaussDB(DWS)的实例在运行过程中不免产生故障,引起实例谬误或无奈启动,此时就须要进行备机重建工作。备机重建性能次要目标是修复实例单点故障,此外,还可用于集群装置的初始化、集群扩容的元数据同步、节点故障后的温备替换等等场景。本文将介绍备机重建各种办法的实现机制,并联合利用场景剖析,以及对新增参数的应用倡议,以期获得最佳利用成果。 2 设计方案2.1 性能分类备机重建依照实现形式不同分为:全量重建和增量重建。 备机重建须要在待修复主机上运行gs_ctl build工具。在备机重建过程中,均须要和主DN建设连贯进行数据的交互拜访。在gs_ctl工具的命令行参数中通过–b=mode参数,能够指定重建DN备机的模式。目前mode反对的取值包含以下四种: 1. full:全量重建,通过获取主备之间全量镜像差别的形式从新同步DN主机的数据目录。2. fullcleanup:全量重建,通过全量镜像的形式从新同步DN主机的数据目录。与full模式区别为:同步前须要清理DN备机的数据目录,保留配置文件。主机将本人的数据目录除了配置文件外,全副发给备机。3. incremental:增量重建,通过解析WAL日志获取主备DN差别的数据进行增量修复备DN。4. auto(不指定-b):先增量重建,增量重建失败后进行全量重建。 理论生产环境中,具体应用哪种形式,就须要看需要与利用场景所定。 2.2 利用场景备机重建依照性能场景不同分为:DN Build DN、CN build CN、CN Build DN。各Build的利用场景的特点如下:表1 Build的利用场景 抉择何种修复形式最优,须要了解该模式的工作原理,并依据利用场景正当地设置相干参数。 3 实现过程3.1 fullcleanup mode:基于推送形式fullcleanup mode是一种推送模式,在该模式下,由主机来控制数据流程(我给啥你接啥),在不关怀备机损坏水平和范畴的状况下,须要主机将本人的数据目录配置文件外的全副数据传送给备机,重建后启动备机。 其次要工作过程如图1所示: 图1 fullcleanup build工作过程 fullcleanup mode build的特点很显著,备机将失去彻底重建。但毛病也很显著:主机须要Copy实例上全副的数据和XLOG日志文件,占用较高的网络传输带宽,对运行中的业务有肯定影响。备机没有对修复前数据进行原子化治理,过程中一旦失败将无奈复原到原备机。如果全量Build过程中因为偶发网络等起因故障失败,将半途而废,再次Build数据须要从头再来。 所以该形式是最激进的最初选项,是在其它重建形式均有效的时候的一种抉择。 3.2 full mode:基于文件校验获取差别的拉取形式full mode是一种拉取模式,在该模式下,由备机来控制数据流程(我须要啥拿啥),仅须要补齐主备之间的差别数据。但前提是备机须要通晓本人与主机差别。full mode是间接从文件比拟进行切入,主、备机能够同时多线程(并行、并发,晋升性能)在各自本地上对数据目录文件进行遍历,获知文件有无、大小、文件校验计算等信息;通过这些信息,一直对计算结果File Map List进行合并筛选,取得最小的差别文件汇合,缩小数据/文件的拷贝数量。备机既能够仅备份备机的差别文件作为备份集(满足可靠性),又能够仅拉取主机的差别文件来更新(晋升性能);备机能够采纳多线程(并发,晋升性能)同时从主机拉取文件。 其次要工作过程如图2所示: 图2 full build工作过程 full mode build的特点是充分利用备机已有的文件,缩小数据同步的数量,能够不便地进行备份和复原、和并行管制。但须要破费肯定工夫的本地IO和计算为代价。与fullcleanup mode相比拟在无资源瓶颈条件下通常速度更快(可取得数倍的晋升),可靠性上更平安,是全量build的首选。 3.3 incremental mode:基于Xlog剖析获取差别的拉取形式incremental mode是另外一种拉取形式。实用于主备双主等因日志造成的不统一场景。增量重建是一种以主DN文件和备DN的WAL日志为基准,依照多退少补的准则对备DN文件和文件块进行修复。与全量重建相比拟,拷贝的粒度、数据量和WAL日志量都更少,代价更小。 其次要工作过程如图3所示: 图3 incremental build工作过程 incremental mode build只实用于主备双主等因日志造成的不统一场景。备机数据文件损坏、数据目录失落等故障通过增量重建的形式无奈修复,此时可通过全量重建的形式从新修复备机。 4 思考总结随着备机重建性能的性能晋升和可靠性的加强,build新增了局部参数,在应用时候值得理解和留神。 4.1 -T THREAD-NUMBER实用于拉取形式的full和incremental模式。其性能是在备机侧指定与主机连贯个数,用于多线程并发进行计算和与文件拉取。 通常状况下默认值为4已可取得较好的性能,在资源容许的状况下,倡议应用更高的线程数。但需注意的是增大线程数目能够晋升Build的性能,缩短其重建工夫,但相应的也减少了网络连接、CPU、和网络IO的耗费,在应用时候须要思考资源情况,适合设置。 ...

June 17, 2021 · 1 min · jiezi

关于GaussDB:GaussDBDWS发生数据倾斜不要慌一文教你轻松获取表倾斜率

摘要:GaussDB(DWS)是MPP并行架构,若表的数据存在歪斜状况,会引起一系列性能问题,影响用户体验,重大时可能会引起系统故障。因而能疾速获取歪斜的表并整改是GaussDB(DWS)运维管理人员比拟关注的事件。本文分享自华为云社区《GaussDB(DWS)产生数据歪斜不要慌,一文教你轻松获取表歪斜率》,原文作者:SeqList 。 GaussDB(DWS)是MPP并行架构,若表的数据存在歪斜状况,会引起一系列性能问题,影响用户体验,重大时可能会引起系统故障。因而能疾速获取歪斜的表并整改是GaussDB(DWS)运维管理人员比拟关注的事件。 需要形容GaussDB(DWS)本身提供pgxc_get_table_skewness视图来查问歪斜状况,但理论实际过程中,该视图存在性能问题,且该视图的歪斜率计算有问题。实际过程中,该视图获取的某个表的歪斜率在不高的状况下(例如0.03),但实际上该表是存在歪斜状况的。 同时在很多时候咱们须要获取一个schema下所有表的歪斜率,以排查歪斜问题,pgxc_get_table_skewness在产品文档中也形容是一个性能较差的视图。 因而我的项目实际过程中急需一个性能好且能表白歪斜状况的函数或视图。 设计思路GaussDB(DWS)有获取每个DN的空间大小函数table_distribution,通过该函数,咱们能疾速获取每个DN的大小,同时能够依据每个DN的大小,来获取表的歪斜状况: skewness = (max(dnsize) - avg(dnsize))*100/max(dnsize) 该歪斜率公式计算表的最大DN空间大小与均匀DN空间大小的占比,能精确反映歪斜率,乘100为体现百分比。 实现过程依据歪斜公式,咱们得出以下SQL,该SQL能疾速获取schema所有表的歪斜状况,上面以public为例: select schemaname,tablename,sum(dnsize)/1024^3 dnsize_gb,(max(dnsize) - avg(dnsize))*100/nullif(max(dnsize),0) skewness_factorfrom (select schemaname,tablename,(regexp_split_to_array(tbl_dis,'[\,\(\)]+'))[4]::bigint as vprocname,(regexp_split_to_array(tbl_dis,'[\,\(\)]+'))[5]::bigint as dnsizefrom (select nspname as schemaname,relname as tablename,table_distribution(nspname,relname)::text as tbl_disfrom pg_class ainner join pg_namespace bon a.relnamespace = b.oidand a.relkind = 'r'and b.oid not in (100))) where schemaname= 'public' group by 1,2 order by 3 desc;后果样例如下,通过例子,能够看进去,test13这个表2GB,且产生重大的歪斜97%,同时store_sales1一个70GB的大表也存在歪斜状况58% 与GaussDB(DWS)的pgxc_get_table_skewness视图后果比对应用GaussDB(DWS) 的零碎视图pgxc_get_table_skewness,比拟难看进去store_sales1存在歪斜状况。 此处咱们应用的是零碎视图pgxc_get_table_skewness获取 select * from PGXC_GET_TABLE_SKEWNESS where schemaname = 'public' and tablename in ('store_sales1','test13');从后果上看,skewratio字段,test13表能看进去存在重大歪斜状况,而store_sales1的skewratio值只有0.031,看不出来存在歪斜状况。但事实上该表是存在肯定歪斜的 ...

June 8, 2021 · 1 min · jiezi

关于GaussDB:教你一招让集群慢节点无处可藏

摘要:GaussDB在大规模集群上运行的过程中,随着时间推移,局部节点可能会呈现性能重大降落的状况。此时这些节点依然能对外提供服务,但响应显著变慢,解决同样的申请所需工夫较其余失常节点大很多,从而影响了整个集群的性能。这样的节点称为“亚健康节点”,或“慢节点”。本文分享自华为云社区《GaussDB(DWS)新技术 集群慢节点居然无处可藏》,原文作者:菜花 。 背景慢实例简介GaussDB在大规模集群上运行的过程中,随着时间推移,局部节点可能会呈现性能重大降落的状况。此时这些节点依然能对外提供服务,但响应显著变慢,解决同样的申请所需工夫较其余失常节点大很多,从而影响了整个集群的性能。这样的节点称为“亚健康节点”,或“慢节点”。 大规模集群中亚健康节点的精确辨认自身是一个难题。通过深刻察看和剖析,咱们发现节点响应慢还可能是业务歪斜导致的,例如对某些数据的集中拜访,或是某些业务须要较多的运算,导致某些节点的工作量剧增。此外,这样的节点不属于性能低下的慢节点。如果单纯通过响应工夫判断慢节点容易导致误判,而频繁的误报警则会升高用户的体验,减少工程人员的排查累赘。本个性实现须要在充分考虑业务歪斜等因素的前提下,迅速、精确地辨认出慢节点。 慢实例的获取机制Gauss DB中的期待状态视图pg_thread_wait_status能够显示每个实例上各线程的刹时状态。通过深入分析其监控原理,联合现网的工夫,咱们发现通过该视图无效地发现响应慢的节点。均匀低来讲,节点响应越慢,下面的期待事件就越多,二者存在正相干,因而能够通过查问该视图中各节点的期待事件数量来掂量节点响应的快慢。依据现网的教训,如果期待状态视图中期待的DN大多数是同一个节点上的DN,则这个节点大概率是慢节点。 以图1所示的工行集群上的期待状态视图查问后果为例,890这个节点上的事件期待数量在间断屡次查问中均为全网之冠,且占全网期待数量的比例在50%以上。最终硬件检测表明890节点的确存在硬件故障,导致运行迟缓。 GaussDB的数据节点(Datanode)采纳主备模式。如果一个物理机器上的Datanode全是备机,该物理机器并不会间接对外提供服务,也无奈通过pg_thread_wait_status视图查问期待事件的数量。然而主DN须要向备DN同步日志。如果这样的“全备机”物理机器恰好是一个慢节点,因为同步日志迟缓,会影响主DN的性能。尽管主机上的pg_thread_wait_status视图期待数量会有所增加,但因为该物理机器对应的主DN被扩散到多个物理节点上,单个物理节点上期待数量可能并不能达到阈值。针对这种状况,还须要对期待视图中主DN对应的备DN做进一步计算,间接失去“全备机”物理机器的期待数量。 图1.1 通过期待视图辨认慢节点 因为主备切换,数据歪斜等起因,集群中各节点的负载并不平衡,负载高可能也会造成节点响应迟缓。为了防止误报,须要打消负载歪斜对于亚健康节点辨认的烦扰。为了简化判断,咱们进一步假设负载歪斜和故障不会同时呈现在同一节点上。也就是说,如果一个节点的负载程度较高,响应慢被认为是失常的,不会被当成慢节点而告警。 节点的负载程度能够通过数据的访问量和运算量来掂量,而后者能够通过IO的数量、耗费CPU工夫以及网络数据流量来进行量化计算。GaussDB外部对IO的数量(block数)、CPU工夫和网络数据流量进行了打点统计,并通过多种视图出现进去。通过定期拜访这些视图,能够取得节点在单位工夫内的工作量,进而取得每个节点在各个时段的负载程度。 与期待事件的数量一样,“全备机”的物理机器的负载程度,也须要通过其对应的主DN的负载程度间接推算。因为备机很少参加运算,次要工作是接管日志,因而次要通过主DN的IO数量和网络流量来掂量备机的忙碌水平。并且因为间接推算的准确性绝对较差,只有“全备机”节点才会采纳这种形式。只有某台物理机器上有主DN的存在,就间接采纳主DN的数据。 对慢实例进行监控场景剖析依据客户需要剖析,能够将客户需要定义为集群中慢节点产生次数与频率的工夫序列及详情展现。蕴含以下次要性能: 开启敞开慢实例检测性能配置慢实例检测参数采集慢实例信息上报DMS数据库将慢实例触发次数及慢实例名称等信息以工夫序列展现在页面上计划整体架构设计 图 2.1 慢实例监控整体架构图 整体计划属于慢实例检测端到端的新增项,并调用健康检查相干模块进行慢实例数据生产。 ① dms-agent调用健康检查脚本并传入collection下发的配置参数,次要操作包含初始启动调用,以及过程中断重启调用; ② 健康检查脚本采集慢节点数据到用户数据库中 ③ dms-agent通过查库获取相干数据 ④ dms-agent依据dms-collection下发的上报频率进行数据上报 ⑤ dms-collection接管dms-agent上报的数据进行dms数据库入库等。 ⑥ dms-monitoring查问dms数据库获取慢节点数据展现到dws-console前端页面 ⑦ dws-console通过dms-monitoring下发启停配置到dms-agent,并通过dms-monitoring将启停信息长久化到dms数据库中; dws-console通过dms-monitor长久化监控参数配置到dms数据库中。 ⑧ dms-monitoring将批改后的配置通过grpc下发到dms-agent,dms-agent依照新的上报频率以及配置进行数据采集上报 ⑨ dms-agent在配置更新后,依照新配置进行健康检查脚本的重启操作。 慢实例数据详解及数据处理慢实例表结构设计drop table if exists dms_mtc_cluster_slow_inst cascade;create table dms_mtc_cluster_slow_inst( ctime bigint not null, -- 采集工夫 virtual_cluster_id int not null, -- 虚构集群id check_time bigint, -- 检测时间 host_id int, -- 主机id host_name varchar(128), -- 主机名 inst_id varchar(64), -- 集群调配的实例id inst_name varchar(128), -- 实例名称 primary key(virtual_cluster_id, inst_id, check_time));慢实例数据处理数据入库Dms-collection接管agent上报的数据进行入库 ...

May 29, 2021 · 1 min · jiezi

关于GaussDB:谋而后动解读数仓计划生成中行数估算和路径生成的奥秘

摘要: 孙子兵法云:“谋定而后动,知止而有得”,做任何事肯定要进行筹划部署,做好筹备,这样能力利于这件事的胜利,切不可鲁莽而行。同样,GaussDB(DWS)执行查问语句也会依照预约的打算来执行,给定硬件环境的状况下,执行的快慢全凭打算的好坏,那么一条查问语句的打算是如何制订的呢,本文将为大家解读打算生成中行数估算和门路生成的神秘。本文分享自华为云社区《GaussDB(DWS)打算生成原理揭秘(一)》,原文作者:Jugg 。 GaussDB(DWS)优化器的打算生成办法有两种,一是动静布局,二是遗传算法,前者是应用最多的办法,也是本系列文章重点介绍对象。一般来说,一条SQL语句经语法树(ParseTree)生成特定构造的查问树(QueryTree)后,从QueryTree开始,才进入打算生成的外围局部,其中有一些关键步骤: 设置初始并行度(Dop)查问重写估算基表行数估算关联表(JoinRel)门路生成,生成最优Path由最优Path创立用于执行的Plan节点调整最优并行度本文次要关注3、4、5,这些步骤对一个打算生成影响比拟大,其中次要波及行数估算、门路抉择办法和代价估算(或称Cost估算),Cost估算是门路抉择的根据,每个算子对应一套模型,属于较为独立的局部,后续文章再解说。Plan Hint会在3、4、5等诸多步骤中交叉烦扰打算生成,其具体的介绍读者可参阅博文:GaussDB(DWS)性能调优系列实现篇六:十八般武艺Plan hint使用。 先看一个简略的查问语句: select count(*) from t1 join t2 on t1.c2 = t2.c2 and t1.c1 > 100 and (t1.c3 is not null or t2.c3 is not null);GaussDB(DWS)优化器给出的执行打算如下: postgres=# explain verbose select count(*) from t1 join t2 on t1.c2 = t2.c2 and t1.c1 > 100 and (t1.c3 is not null or t2.c3 is not null); QUERY PLAN -------------------------------------------------------------------------------------------------------------- id | operation | E-rows | E-distinct | E-memory | E-width | E-costs ----+--------------------------------------------------+--------+------------+----------+---------+--------- 1 | -> Aggregate | 1 | | | 8 | 111.23 2 | -> Streaming (type: GATHER) | 4 | | | 8 | 111.23 3 | -> Aggregate | 4 | | 1MB | 8 | 101.23 4 | -> Hash Join (5,7) | 3838 | | 1MB | 0 | 98.82 5 | -> Streaming(type: REDISTRIBUTE) | 1799 | 112 | 2MB | 10 | 46.38 6 | -> Seq Scan on test.t1 | 1799 | | 1MB | 10 | 9.25 7 | -> Hash | 1001 | 25 | 16MB | 8 | 32.95 8 | -> Streaming(type: REDISTRIBUTE) | 1001 | | 2MB | 8 | 32.95 9 | -> Seq Scan on test.t2 | 1001 | | 1MB | 8 | 4.50 Predicate Information (identified by plan id) ----------------------------------------------------------------- 4 --Hash Join (5,7) Hash Cond: (t1.c2 = t2.c2) Join Filter: ((t1.c3 IS NOT NULL) OR (t2.c3 IS NOT NULL)) 6 --Seq Scan on test.t1 Filter: (t1.c1 > 100)通常一条查问语句的Plan都是从基表开始,本例中基表t1有多个过滤条件,从打算上看,局部条件下推到基表上了,局部条件没有下推,那么它的行数如何估进去的呢?咱们首先从基表的行数估算开始。 ...

May 27, 2021 · 6 min · jiezi