-
高性能以D和O为代表的传统shared-disk多主架构,支持多节点透明多写,具备一定的吞吐扩展能力,在很长一段时间成功的支撑了企业关键业务负载。但其限制也很明显,首先D和O多写架构依赖专有硬件,弹性伸缩能力差,TCO较高,用户易被Lock in,在云计算和通用服务器大行其道的背景下,越来越多的用户希望多写架构能够运行于开放平台之上。另外,D和O的多节点并发事务状态多采用中心化模式设计,导致其扩展线性比较低,在重业务负载情况下,资源的扩展并不能带来对等的性能收益,导致其业务承载能力受到限制。 为继承D和O透明多写能力,同时充分利用云平台资源弹性和RDMA高速网络等先进硬件技术,当前业界头部数据库厂商均积极研究云原生多写架构。近期,某云厂商推出的云原生多主数据库,采用计算-内存-存储三层解耦的云原生架构设计,基于中心化组件实现多节点透明多写,是该方向架构演进的一个突破。但从其发表论文的测试数据来看,32节点TPCC吞吐为910万tpmC,而华为GaussDB云原生数据库在相同32节点可达3000+万tpmC的吞吐能力,支持128节点(16384鲲鹏核心)部署,能够支撑PB级OLTP业务规模,目前已在华为内部支撑实际业务生产。 存在上述性能差距的原因,笔者认为有如下几点: 第一,国内云厂商多写数据库的页面跨节点修改,采用进程级LLSN实现WAL记录的保序,而GaussDB云原生数据库采用细粒度页面级Lamport LSN保序,进程内无全局冲突点,在多核/众核环境下扩展性更强,能够更好的发挥硬件算力。第二,GaussDB云原生采用页面亲和性设计,脏页面无需回写共享内存,而该云厂商数据库采用中心式全量脏页面管理机制,事务产生的脏页面均须回写共享内存,造成大量页面在网络间频繁传递。GaussDB云原生数据库架构图 GaussDB云原生数据库在节点亲和性算法设计方面,除了分布式缓冲池的页面属主和读授权机制外,Undo段和FSM算法也充分考虑了节点亲和性设计,将节点间的网络交互降至最低,确保极致性能。 在Undo segment的节点亲和性设计上,从undo tablespace分配空间,多节点共享undo tablespace,而每个计算节点使用分布式锁机制亲和性分配Undo segment,每个Undo segment同一时刻只能被一个计算节点绑定。Undo segment亲和性分配机制图 在FSM空闲空间管理节点亲和性算法上,针对Heap FSM采用自动分区机制优化表数据插入分配页面算法,减少节点间冲突;针对索引空页面管理,采用自动分区机制优化索引查找空页面算法,减少节点间冲突。
-
一、前言 在数据库中构建动态SQL语句是指根据不同的条件或参数创建不同的SQL语句。这通常是为了适应不同的业务需求,提高SQL的灵活性和效率。GaussDB数据库是一款具备高性能、高可用性和高扩展性的关系型数据库,它提供了丰富的功能和工具,支持动态SQL语句的构建。下面我们将介绍如何使用GaussDB数据库构建动态SQL语句。 二、构建动态SQL语句的基本步骤和注意事项 1、基本步骤 分析需求:首先需要明确业务需求,了解需要执行哪些SQL查询操作,并根据需求的不同来动态构建SQL语句。 准备参数:根据查询操作的不同,准备相应的参数,如筛选条件、排序规则等。 SQL拼接:根据需求和参数,使用字符串拼接方式构建SQL语句。 执行查询:使用GaussDB数据库的查询接口,执行构建好的SQL语句并获取查询结果。 处理结果:将查询结果进行处理和展示,可以是前端页面或后端接口等形式。 2、主要事项 避免SQL注入:在拼接SQL语句时,务必注意避免SQL注入的风险,不要直接拼接用户输入的内容。 性能优化:对于大规模数据的查询操作,需要进行性能优化,如使用索引、分页查询等方式来提高查询效率。 事务处理:如果涉及事务处理,需要使用GaussDB数据库的事务管理功能来确保数据的一致性和可靠性。 安全性保障:对于敏感数据的查询操作,需要进行安全性保障,如数据脱敏、权限控制等方式来保护数据的安全。 三、GaussDB中执行动态查询语句(示例) GaussDB提供两种方式:使用EXECUTE IMMEDIATE、OPEN FOR实现动态查询。前者通过动态执行SELECT语句,后者结合了游标的使用。当需要将查询的结果保存在一个数据集用于提取时,可使用OPEN FOR实现动态查询。 1、方式一:EXECUTE IMMEDIATE ``` --传递并检索值(INTO子句用在USING子句前): CREATE OR REPLACE FUNCTION dynamic_f() RETURNS text LANGUAGE plpgsql AS $$ DECLARE d_id INT := 2; d_name VARCHAR(20); d_salary INT; BEGIN EXECUTE IMMEDIATE 'SELECT name,salary FROM company1 WHERE id = :1' INTO d_name,d_salary USING IN d_id; RETURN '姓名:' || d_name || ' , 薪水:¥' ||d_salary; END $$; --执行 CALL dynamic_f(); ``` 主要属性说明: INTO的变量 :用于指定存放单行查询结果的变量。 USING IN的变量: 用于指定存放传递给动态SQL值的变量,在SQL拼接时可用占位符,占位符命名以“:”开始,后面可跟数字、字符或字符串,与USING子句的变量一一对应。 执行结果: 2、方式二:OPEN FOR ``` --使用OPEN FOR打开动态游标来执行 CREATE OR REPLACE FUNCTION dynamic_cur() RETURNS text LANGUAGE plpgsql AS $$ DECLARE v_name VARCHAR2(20); v_salary INT; TYPE ref_type IS REF CURSOR; --定义游标类型 my_cur ref_type; --定义游标变量 BEGIN OPEN my_cur FOR 'SELECT name,salary FROM company1 WHERE id = :1' USING '3'; --打开游标, using是可选的 FETCH my_cur INTO v_name, v_salary; --获取数据 WHILE my_cur%FOUND LOOP RETURN v_name||'#'||v_salary; FETCH my_cur INTO v_name, v_salary; END LOOP; CLOSE my_cur; --关闭游标 END $$; --执行 CALL dynamic_cur(); ``` 主要属性说明 'WHILE my_cur%FOUND': 是一个循环控制语句。'my_cur'是一个游标,而'%FOUND'是游标状态。当游标找到符合条件的记录时,这个状态就会为真(也就是说,如果'my_cur%'FOUND为真,那么就继续执行循环中的代码)。当游标没有更多的记录可返回时(或者达到了游标返回的最大记录数),这个状态就会为假,然后循环就会停止。所以,'WHILE my_cur%FOUND'的意思是:当游标'my_cur'还有记录可返回时,就继续执行循环中的代码。 执行结果 四、GaussDB中的动态非查询语句(示例) 其实这个可以简单的理解为非“SELECT语句”,基本写法跟前面的示例类似,下面继续以company1表为例: ``` --使用EXECUTE IMMEDIATE执行动态非查询语句 CREATE OR REPLACE FUNCTION dynamic_cur() RETURNS void LANGUAGE plpgsql AS $$ DECLARE v_id INT := 4; v_name VARCHAR2(10) := 'ZhangSan'; v_age INT := 30; v_address VARCHAR2(10) := 'BeiJing'; v_salary INT := 30000; v_newname VARCHAR2(10) := 'company4'; BEGIN EXECUTE IMMEDIATE 'INSERT INTO company1 VALUES(:1, :2, :3, :4, :5)' USING v_id, v_name, v_age,v_address,v_salary; EXECUTE IMMEDIATE 'ALTER TABLE company1 RENAME to ' || v_newname; END $$; --执行 CALL dynamic_cur(); --查看结果 SELECT * FROM company4; 执行结果 ``` 五、小结 通过使用GaussDB数据库构建动态SQL语句,数据应用部门可以更好地应对不断变化的数据查询需求,提高应用程序的性能和可维护性。本文主要介绍了如何使用GaussDB数据库构建动态SQL语句的基本步骤和注意事项,并通过实际案例进行了演示,欢迎大家测试、交流。 ——结束
-
一、前言 GaussDB是一款高性能、高可用的分布式数据库,广泛应用于各类行业和场景。在GaussDB中,锁是实现并发控制的关键机制之一,用于协调多个事务之间的数据访问,确保数据的一致性和完整性。本文将围绕GaussDB数据库的LOCK TABLE 做一简单介绍。 二、GaussDB数据库的锁 GaussDB提供了多种锁模式用于控制对表中数据的并发访问。这些模式可以用在MVCC(多版本并发控制)无法给出期望行为的场合。同样,大多数GaussDB命令自动施加恰当的锁,以保证被引用的表在命令的执行过程中不会以一种不兼容的方式被删除或者修改。比如,在存在其他并发操作的时候,ALTER TABLE是不能在同一个表上执行的。 1、GaussDB中的LOCK TABLE LOCK TABLE获取表级锁。 如果需要保持数据库数据的一致性,可以使用LOCK TABLE来阻止其他用户修改表。例如,一个应用需要保证表中的数据在事务的运行过程中不被修改。为实现这个目的,则可以对表进行锁定,这样将防止数据不被并发修改。LOCK TABLE只在一个事务块的内部有用,在事务结束时就会被释放。 1)语法格式 ``` LOCK [ TABLE ] name IN {ACCESS SHARE | ROW SHARE | ROW EXCLUSIVE | SHARE UPDATE EXCLUSIVE | SHARE | SHARE ROW EXCLUSIVE | EXCLUSIVE | ACCESS EXCLUSIVE} MODE ``` 2)参数说明 1)name:要锁定的表的名称。 2)锁的模式: ACCESS SHARE:只读取表而不修改。所有对表进行读取而不修改的SQL语句都会自动请求这种锁。 ROW SHARE:允许对表进行并发读取,禁止对表进行其他操作。SELECT FOR UPDATE和SELECT FOR SHARE命令会自动在目标表上请求ROW SHARE锁(且所有被引用但不是FOR SHARE/FOR UPDATE的其他表上,还会自动加上ACCESS SHARE锁)。对于分区表,SELECT FOR SHARE操作还会在DN上获取partition对象的ROW EXCLUSIVE锁进行并发控制。 ROW EXCLUSIVE:与ROW SHARE锁相同,ROW EXCLUSIVE允许并发读取表,但是禁止修改表中数据。UPDATE,DELETE,INSERT命令会自动在目标表上请求这个锁(且所有被引用的其他表上还会自动加上的ACCESS SHARE锁)。通常情况下,所有会修改表数据的命令都会请求表的ROW EXCLUSIVE锁。 SHARE UPDATE EXCLUSIVE:保护一个表的模式不被并发修改,以及禁止在目标表上执行垃圾回收命令(VACUUM)。VACUUM(不带FULL选项)、ANALYZE、CREATE INDEX CONCURRENTLY命令会自动请求这样的锁。 SHARE:允许并发的查询,但是禁止对表进行修改。CREATE INDEX(不带CONCURRENTLY)语句会自动请求这种锁。 EXCLUSIVE:允许对目标表进行并发查询,但是禁止任何其他操作。这个模式只允许并发加ACCESS SHARE锁,也就是说,只有对表的读动作可以和持有这个锁模式的事务并发执行。任何SQL语句都不会在用户表上自动请求这个锁模式。然而在某些操作的时候,会在某些系统表上请求它。 SHARE ROW EXCLUSIVE:禁止对表进行任何的并发修改,而且是独占锁,因此一个会话中只能获取一次。任何SQL语句都不会自动请求这个锁模式。 ACCESS EXCLUSIVE:保证其所有者(事务)是可以访问该表的唯一事务。ALTER TABLE,DROP TABLE,TRUNCATE,REINDEX,CLUSTER,VACUUM FULL命令会自动请求这种锁。在LOCK TABLE命令没有明确声明需要的锁模式时,它是缺省锁模式。 2、示例一:ACCESS EXCLUSIVE 模式 ``` --创建测试表 DROP TABLE IF EXISTS omm2.company; CREATE TABLE omm2.company( id int4 PRIMARY key NOT NULL ,name varchar(10) NOT NULL ,age int4 NOT NULL ,address varchar(20) NOT NULL ,salary float4 NOT NULL ); --初始化数据 INSERT INTO omm2.company VALUES (1, 'Paul', 32, 'California', 20000); INSERT INTO omm2.company VALUES (2, 'Allen', 25, 'Texas', 15000); INSERT INTO omm2.company VALUES (3, 'Teddy', 23, 'Norway', 20000); INSERT INTO omm2.company VALUES (4, 'ZhangSan', 30, 'BeiJing', 30000); --启动一个事务 START TRANSACTION; LOCK TABLE omm2.company IN ACCESS EXCLUSIVE MODE; DELETE FROM omm2.company WHERE name ='Allen'; COMMIT; ``` 解析: “START TRANSACTION;”:启动一个新的事务。在数据库中,事务是一组一起执行的SQL语句,要么全部成功,要么全部失败。这确保了数据的一致性。 “LOCK TABLE omm2.company IN ACCESS EXCLUSIVE MODE;”:对omm2.company表进行了排他性锁定。在此模式下,其他会话不能对表进行读写操作,直到这个事务结束。这样可以防止在删除操作过程中其他事务对表产生干扰。 “DELETE FROM omm2.company WHERE name ='Allen'; ”:从omm2.company表中删除了所有名为'Allen'的记录。 “COMMIT;”:这行代码提交了前面的事务。在事务中执行的任何更改(在本例中是删除操作)在提交后才会永久保存在数据库中。 总的来说,这段代码删除了名为'Allen'的所有记录,并确保这个操作在提交之前不会被其他事务干扰。 3、示例二:SHARE ROW EXCLUSIVE 模式 ``` --复用示例一的测试表 CREATE TABLE omm2.company1 AS TABLE omm2.company; --启动一个事务 START TRANSACTION; LOCK TABLE omm2.company1 IN SHARE ROW EXCLUSIVE MODE; DELETE FROM omm2.company1 WHERE name ='Allen'; COMMIT; ``` 解析: “CREATE TABLE omm2.company1 AS TABLE omm2.company;”:创建了一个新的表omm2.company1,其结构复制自已有的表omm2.company。这种操作通常用于创建表的副本,或者为某个操作创建一个临时的、与原表结构相同的新表。 “START TRANSACTION; ”:启动一个新的事务。在数据库中,事务是一组一起执行的SQL语句,要么全部成功,要么全部失败,这可以确保数据的一致性。 “LOCK TABLE omm2.company1 IN SHARE ROW EXCLUSIVE MODE; ”:对表omm2.company1进行了排他性锁定。在这种模式下,其他会话不能对表进行读写操作,直到这个事务结束,这样可以防止在删除操作过程中其他事务对表产生干扰。 “DELETE FROM omm2.company1 WHERE name ='Allen';”:从表omm1.company1中删除了所有名为'Allen'的记录。 “COMMIT;”:提交前面的事务。在事务中执行的任何更改(在本例中是删除操作)在提交后才会永久保存在数据库中。 三、小结 GaussDB数据库的锁机制是其重要的组成部分,用于支持并发控制和事务隔离。GaussDB实现了不同级别的事务隔离和并发控制,满足了不同场景下的需求。当然了,使用GaussDB数据库时也需要注意一些问题,如锁的管理和数据库的规划等。合理的锁管理和数据库规划能够提高系统的性能和可用性,反之则可能导致数据一致性问题或者系统故障。 ——结束
-
如果通过 UGO 做完表结构校验 , 并已将表结构迁移到 GaussDB 中 , 如何通过 UGO 导出已经成功的表结构
-
在数据库世界里,查询重写是提升性能的关键环节。WeTune作为一款革命性工具,能自动发现新重写规则,打破现有系统依赖人工发现重写规则的局限,大幅提升数据库查询性能。上海交通大学软件学院副院长王肇国和高斯实验室GaussDB数据库优化器专家Ethan联手开展了一场以《智能优化揭秘——GaussDB数据库查询重写的自动挖掘与生成》为主题的技术对谈,深入探讨了WeTune 2.0的重写规则与GaussDB的合作落地。直播过程包含对WeTune 2.0的项目背景、WeTune改写规则的自动发掘方式及实现、WeTune 2.0版本优势、在GaussDB中的应用与技术转化、未来前景等内容的解析与分享,一起倾听他们产教融合背后的故事吧。目录一、WeTune产品的项目背景二、WeTune改写规则的自动发掘方式三、WeTune改写规则的自动挖掘实现四、WeTune 2.0版本优势五、WeTune 2.0在华为云GaussDB的落地六、如何解决引入大量规则之后产生的性能问题?七、WeTune在数据库产业的价值及未来前景一、WeTune产品的项目背景 查询改写是数据库SQL优化过程中非常重要的部分,在语义不变的情况下,它可以把一条普通的或者性能不好的SQL语句优化成一条性能更好的SQL语句,实现查询效率的提升。改写规则作为查询改写中最关键的一个组件,想要在数据库里面添加改写规则,往往依赖于数据库专家经验的积累。如今,SQL语句的生成对象不再受限于程序员,外部框架和大模型也能够自动生成,随着生成源的增加,原来的SQL改写规则不再适用。由上海交通大学软件学院副院长王肇国团队开发出的WeTune刚好能解决这一问题,其核心思想就是自动发掘某些场景下的改写规则。于是,华为云数据库GaussDB团队与王肇国教授团队深度合作,成功完成WeTune 2.0在GaussDB产品上的落地。二、WeTune改写规则的自动发掘方式 自动挖掘的前提是暴力枚举,枚举之后检验语义是否正确,通过等价性验证去把最后一道关,所以,WeTune的等价性验证能力决定了它能够枚举哪些规则。下面是WeTune的改写规则的自动发掘方式:方式一,尝试暴力枚举所有在语法上合法的改写规则;方式二,用形式化验证的方式去验证枚举的规则是否正确(输入、输出的SQL是否在语义上等价);方式三,借鉴数据库cost estimation技术检验改写规则是否有效,SQL优化性能是否更好。在实际运用中,以上改写规则的三种自动发掘方式也面临着一些现实层面的挑战。第一个暴力枚举虽然空间大,但开销也大,导致很多算力浪费。不过,上海交通大学软件学院副院长王肇国团队通过开发的一种只枚举小规则的技术,用小规则去推大规则,解决算力浪费的问题。第二个等价性验证。改写规则等价性验证,本质上就是SQL等价性验证,把不可判定问题的验证转换成可满足性等价、可判定问题的验证。另外,SQL等价性本身是一个关系型代数,把它转换成线性代数的求解。通过这两个维度解决了现有的SQL等价性验证问题,使得改写规则的枚举能力和范围大大提升。目前WeTune 2.0支持SQL:1999所有语法的验证。第三个除了借鉴数据库cost estimation技术来检验SQL优化性能是否更好以外,还会创建数据库实例,将改写规则在数据库实例上运行,以保证SQL优化效果最佳。有了这三方面的解决方案之后,2022年,上海交通大学软件学院副院长王肇国团队对WeTune 1.0版本进行了一个性能测试。他们从GitHub上通过对起始时间、受欢迎程度等维度进行筛选排序,找了涵盖电商、论坛等不同应用场景的20个开源应用,并在这些应用上运行程序,共收集了大概8500多条SQL语句。结果显示,WeTune 1.0优化的SQL语句大概674条,而其他商业数据库只能优化427条。相较而言,WeTune 1.0 优化效果大幅领先。三、WeTune改写规则的自动挖掘实现 WeTune 2.0在SQL等价性验证、枚举的能力和范围、规则的表达上都进行了精心设计,对GaussDB使用体验有极大提升。四、WeTune 2.0版本优势 相比WeTune 1.0版本,WeTune 2.0版本有几个比较大的优势:第一,增强的WeTune枚举能力,包括枚举的速度和枚举更多的复杂规则;第二,增强的WeTune验证能力,可以支持更多的SQL特性;第三,可以让用户可读、可加载、甚至可以直接使用手写。对比现有基于代码的查询引擎,WeTune 2.0不需要代码、不需要编译、不需要去发布版本,客户自己可以写改写规则,写完之后,通过GaussDB提早准备的接口,直接放到数据库里面就可以即时生效。GaussDB可以为用户提前预留好很多重写规则,后续如发现重写规则不够用,可自行增加,非常方便。第四,改写规则可在客户端实现部署。WeTune目前主要部署在云端,后面改写规则也可以部署在客户端,进行自动加载,实现不同用户间互不干扰。五、WeTune 2.0在华为云GaussDB的落地 WeTune和现有数据库应用落地过程中,不同的架构会面临不同挑战。WeTune 2.0在华为云GaussDB的落地,从技术角度来讲,GaussDB数据库是System-R架构,它的重写规则是耦合在代码里面,增加或卸载一个规则需要改写查询引擎。把WeTune应用在System-R架构上面涉及到理论、技术、工程层面的一些问题。不过,上海交通大学和华为的积极交流和深入探讨,也为彼此提供了不同的视角。在数据库开发过程中,改写规则非常依赖人工经验。随着客户场景越来越多,很多规则已经超出了现有的承载能力。从产品开发流程层面上讲,想要在GaussDB里面添加一个新的重写规则,论证重写规则是否等价是非常困难的。但是有了WeTune以后,开发者只要按照形式化语言去描述重写规则,然后WeTune拿去做验证,证明该规则在约束下是等价的,就可以放心地将该重写规则添加到GaussDB中,节约验证时间,对GaussDB的开发等流程非常有帮助。WeTune从框架上去解决了这两个重写规则是否等价的问题,这是WeTune非常突出的贡献点。对于客户来说,在使用GaussDB进行SQL优化时,只管放心用,优化交给GaussDB;对于开发者来说,只需要关心SQL语义,性能交给GaussDB。GaussDB引入WeTune2.0以后,自然会产生非常多的规则,帮助用户优化SQL的同时,也引入了另外一个成本,即会产生了SQL优化代价。六、如何解决引入大量规则之后产生的性能问题? 从客户角度来讲,很多业务其实是相对比较固定的,而且上线之前也提前会做系统测试。若系统里面SQL优化度很高,那么就不必改写规则和暴力枚举,这样就可以降低优化成本。在实际环境中,大家希望数据库有成千上万条的改写规则可以给用户去用,可以生成改写的SQL语句。但是,改写规则非常多的时候,会导致改写和规则匹配的时间非常长,导致资源的极大浪费,也会影响用户体验。那如何在性能上做加速呢?目前来讲,主要通过两方面来去解决:一方面是从通用的匹配算法入手。当改写规则非常多的时候,匹配算法能够帮助性能有数量级的提升;另一方面,从应用的场景或从SQL产生的源头来进行分类。不同应用场景下、不同业务目的、不同的框架需要的改写规则不一样,WeTune 2.0可以对于不同场景和需求来去做定制化的规则探索。七、WeTune在数据库产业的价值及未来前景 WeTune是多个技术合起来形成了一个规则挖掘。从学术角度来讲,SQL等价性验证可以往数据库测试这个方向再迈一步。在数据库测试过程中,对于SQL的优化引擎,可以使用差分测试。差分测试是一种很经典的数据库测试方式,验证重写规则可以使用,验证SQL优化引擎过程中也适用。WeTune等价性验证器可以去枚举语义等价但形式完全不同的两条SQL,这样可以确保在测试对比过程中,程序运行是不一样的路径,可以更高效或覆盖面更广地完成数据库引擎的测试任务。WeTune不仅减轻了数据库开发者或者DBA的负担,目前在教育领域里有一定的应用,WeTune等价性验证帮助国内外很多高校助教批改学生的数据库作业,减轻数据库教育工作者的工作压力。华为与高校的深度合作将持续推进,融合双方的技术优势和科研力量,共同探索数据库领域的前沿技术,培养更多高水平的数据库人才。未来,华为和上海交通大学研究团队将携手,共同突破数据库查询重写技术的瓶颈,通过持续的创新和优化,进一步提升GaussDB的查询性能和效率。我们期待更多的技术合作和探索,推动数据库技术向智能化、自动化方向发展,为广大企业和用户带来更多价值。欢迎小伙伴们交流~
-
问题描述CPU使用率高。问题现象出现CPU使用率超过阈值,CPU使用率快速上涨或短时间持续较高水平等现象。告警CPU使用率告警。业务影响CPU使用率高集群响应变慢。原因分析期间业务压力增大导致。出现CPU耗时较多的SQL。处理方法步骤 1查看监控是某个节点的CPU高还是集群整体CPU高,如果是整体CPU高生成集群级别wdr报告,如果是某个节点则生成节点级wdr报告。步骤 2首先查看当前已有的wdr报告快照。select * from snapshot.snapshot order by start_ts desc;步骤 3生成wdr报告需要两个snapshot_id,根据需要对比的两个时间段选取对应的snapshot_id,调整输出格式,gsql界面输入: \a \t \o + 生成文件名(html文件)步骤 4如果是要生成节点级的报告则执行:select generate_wdr_report(snapshot_id1, snapshot_id2, ‘all’, ‘node’, 节点名称)如果要生成集群级别报告则执行select generate_wdr_report(snapshot_id1, snapshot_id2, ‘all’, ‘cluster’)其中snapshot_id1和snapshot_id2按照时间从小到大的顺序写入上面分析出来的要生成报告的两个id,节点名称可以通过登录到问题节点执行show pgxc_node_name获取。 对应节点级别报告主要关注Top 10 Events by Total Wait Time和SQL ordered by CPU Time部分,集群级别主要关注SQL ordered by CPU Time部分,在wdr报告中搜索即可。步骤 6CPU使用率较低期间的wdr报告和较高期间的wdr报告个一份,这里已节点级别为例,集群级别只需要按照SQL ordered by CPU Time部分分析,分析方式一样。步骤 7Top 10 Events by Total Wait Time部分包含两个快照期间的主要等待事件,可以进行大致分析是否存在大量CPU耗时较高的等待事件例如文件数据读取,快照期间主要等待事件,如果通过对比发现CPU高期间的文件读事件明显变多,则说明此期间SQL执行读取数据上上涨导致的CPU耗时上涨。如果是各项等待事件都有一定幅度上涨则可能是集群压力上涨导致,具体是那一部分SQL则需要分析SQL ordered by CPU Time部分。步骤 8对比两份报告SQL ordered by CPU Time部分的CPU Time(us)差异,一般对比前10个即可,这里介绍一下此部分的主要构成。Unique SQL Id:对应unique_sql_id,可以通过此id去数据库查询使用此模板的SQL的其他数据,例如通过summary_statement查询总体语句的调用情况。Node Name:节点名称。User Name:用户名。CPU Time(us):两个快照期间的CPU耗时Calls:两个快照期间的语句调用次数。Min Elapse Time(us):SQL在内核内的最小运行时间,注意这是整体的最小解析时间不是此快照期间的最小。Max Elapse Time(us):SQL在内核内的最大运行时间,注意这是整体的最大解析时间不是此快照期间的最小。Total Elapse Time(us):两个快照期间此语句的SQL在内核内的总运行时间时间。Avg Elapse Time(us):两个快照期间此语句的SQL在内核内的平均运行时间时间。Returned Rows:两个快照期间此语句的SELECT返回的结果集行数。Tuples Read:两个快照期间访问的元组数量。Tuples Affected:两个快照期间Insert/Update/Delete行数。Logical Read:两个快照期间的逻辑读数。Physical Read:两个快照期间的物理读数。Data IO Time(us):两个快照期间IO上的时间花费。Sort Count:两个快照期间的排序执行的次数。Sort Time(us):两个快照期间的排序执行的时间。Sort Mem Used(KB):两个快照期间的排序过程中使用的work memory大小(单位:KB)。Sort Spill Count:两个快照期间的排序过程中,若发生落盘,写文件的次数。Sort Spill Size(KB):两个快照期间的排序过程中,若发生落盘,使用的文件大小(单位:KB)。Hash Count:两个快照期间的hash执行的次数。Hash Time(us):两个快照期间的hash执行的时间(单位:微秒)。Hash Mem Used(KB):两个快照期间的hash过程中使用的work memory大小(单位:KB)。Hash Spill Count:两个快照期间的hash过程中,若发生落盘,写文件的次数。Hash Spill Size(KB):两个快照期间的hash过程中,若发生落盘,使用的文件大小(单位:KB)。SQL Text:这里显示的SQL语句只有一部分,完整的SQL需要点击Unique SQL Id跳转到完整SQL处。步骤9如果发现CPU高期间报告的CPU Time(us)前面几个的SQL明显不同且CPU耗时较大,则原因可能为CPU高耗时SQL调用量上涨导致,如果需要分析为什么此SQL的CPU耗时高则可以参考步骤11。步骤 10如果两个报告前10个Unique SQL Id对比几乎相同,此时看SQL对应的CPU耗时和ncalls,如果calls上涨则说明是业务压力增大导致的CPU上涨,如果calls没有上涨,则需要分析为什么同一条SQL在此阶段的CPU耗时上涨,跳转步骤11。步骤 11在语句和调用次数没有变化的情况下,如果是查询语句看此SQL模板的Returned Rows和Physical Read,如果数量有明显增长则说明此SQL读写的数据量增大导致的CPU压力上涨,一般有两种情况,部分特殊值的情况下扫描数据量大或者计划发生改变导致扫描数据量变大。如果是写语句则可以看Tuples Affected是否有明显增加,一般读取数据比较耗CPU,如果是语句本身影响的主要围绕数据读取方面进行对比。步骤 12如果两个快照的数据几乎相同,可以通过火焰图或者长事务做进一步分析。
-
本篇为大家分享GaussDB高安全的关键特性,名字叫密态等值,是一个关于全密态的关键能力。数据成为生产要素,合规要求趋于严格 大家应该都有切身的体会,近些年数据的重要性越来越高,特别是国家已经把数据明确定义为了生产要素。生产要素是什么?就好像过去的石油,从工业革命时期开始,每一家工业企业几乎都要用到,是生产过程中必不可少的东西。现在,国家把数据定义为生产要素,意味着数据在各个领域也将要广泛地使用到。正因为这样,数据也上升成为了国家的“战略资源”。基于此,国家近些年发布了《中华人民共和国数据安全法》、《中华人民共和国个人信息保护法》等一系列法律,对数据安全的保护标准和使用规范越来越明确、越来越严格,这是我们切身体会到的一个大的趋势。数据库安全面临更大的威胁和挑战 在这种新形势下,数据库的安全也面临很大的威胁。我们做了一个梳理,从里到外,数据库的安全问题一共有以下几个方面:首先,数据安全传输从网络层面容易受到攻击。大概20年前,安全人员在网络上部署一台嗅探器,就可以获取到许多的敏感信息。而之后陆续出现相关的标准和技术,经过一段时间的演进逐步成熟,演变成稳定的安全协议或安全架构,被广泛使用起来。例如HTTPS、TLS等,通过这种安全协议上的消解,我们发现,现在很难通过网络攻击,直接获取到敏感的东西。随后我们发现,SQL注入,以及网页跨站等问题开始越来越明显,数据展示层的攻击虽然和数据库不直接相关,而是从数据库把数据拿出来之后放到业务层,在业务层引入的风险,但这些风险也可以通过数据库提供的能力进行消减,因此也纳入数据库威胁范围内。同样也是随着技术的发展,一些稳定的安全框架、安全编码规范形成之后,这部分的风险逐渐消减了。其次是存储。各类安全规范里经常会提及到存储安全保护,因为数据一旦存在磁盘里,有可能永远都在磁盘里,直到磁盘销毁的那一天。如果里面存放了敏感数据,理论上每一天都有被偷走的可能,所以存储安全非常的重要。关于这一点,相关的技术也在逐步成熟,像磁盘加密、透明加密等,而且各家机构企业也都非常重视对于物理硬件的保护,管理手段非常严格,所以磁盘被偷走的情况也很少出现。最近几年,经常看到各种各样的严重安全事件,主要在两个维度,一个是维护,一个是管理。维护就是后台操作系统的人员做一些数据库的维护操作,管理就是DBA通过数据库标准通道做一些管理操作。这也不一定是内部人员有问题,也有可能是这些内部人员的账号被泄露,近几年世界知名的一些大型数据安全事件,大部分是在这两个方面出了问题,都泄露了很多的数据,这是新形势下最大的安全威胁。GaussDB以数据为中心 构筑起3+1安全架构 面对这些挑战,GaussDB构筑起了3+1的安全架构。这个架构的最外层,是基于智能化能力做一些风险、异常行为的感知,先感知有没有恶意攻击,阻挡一遍攻击。中层是访问控制能力,加上口令、身份认证等,进一步控制用户访问风险。里层是数据加密、脱敏,直接在数据上做文章,因而攻击者即使将外层全部攻破,拿走的也全部是密文状态下的数据。最后在这三层之外是审计,GaussDB做了很多细粒度的审计能力,还有防篡改。我们的审计日志是改不了的,即使篡改了,也能看出来哪里被改了。所以,即使攻击者做了很多操作,把数据库也攻破了,但所有操作是跑不了的。而今天分享的就是全密态里面的等值查询。GaussDB全密态等值查询 实现数据全流程保护 全密态技术的原理很简单。比如在使用的时候输入一个SQL语句,加密驱动会找到哪个字段需要加密,然后用一个密钥把它自动加密,这样加密完后整个流程都是密文的,整个数据库跑的数据、以及跑完之后的结果都是密文数据,不论什么时候把数据拿走,拿走的也都是密文的,因为在整个数据库里面没有任何解密的过程。我们对查询回来的密文结果在客户端再进行解密,将明文数据返回给业务进行处理,从而能够做到无感知的使用和业务迁移。我们当前支持密态等值等查询,很快还会支持密态范围查询和模糊查询,都是基于密码学的算法。对于大规模数据,我们还可以基于密文数据进行索引和快速查询,并且支持JDBC、GO、Libpq等多种客户端驱动。客户端密钥管理,保障服务可信 对加密来说,密钥是最关键的,所以全密态最主要的是密钥的分配。我们的全密态密钥是在客户端管理,一般属于业务管理人员负责,业务管理人员拿到密钥后把数据加密再交给数据库。逻辑很简单,我们在驱动层做了一个加密驱动,里面做了自动加解密和自动解析,能够自动识别哪个字段需要哪个密钥,再自动找到密钥、自动加密。这样只要业务不把密钥权限分配给DBA和运维,他们就不能解密这部分数据,但是能够正常运维,如果有极特殊的情况需要看到明文敏感数据才能做管理运维,也可以把密钥赋权给相关人员。全流程加密,数据库内部全流程零解密 第二层是加密,数据库里的整个流程是没有解密过程的,这是GaussDB实现的最主要的能力,包括传输、查询、存储等操作都有对应的方式,不需要解密再处理。但是,如果不单是在客户端需要数据导出,假如后端也需要直接导出数据,我们也可以在某些特殊场景下把密钥授权给下游做临时解密。这是加密方面的情况介绍。客户端轻量化解析 业务层加密透明无感 另外,如何做到透明无感知?解析器是数据库里的关键组件,我们在客户端里面做了一个轻量化解析器,对用户输入进去的SQL语句做自动的语法解析,找到哪个字段需要加密,而对于返回过来的语法也进行对应的解析。做完这个解析,客户端可以获取到需要加密的数据以及该数据在原始语句中的位置,然后重新构造一个新的SQL语句,数据库实际收到的就是加密之后的数据。经过客户端的自动语法解析,自动密钥管理和自动加密后,就可以继承标准的SQL语法,实现业务的透明无感知。对于业务迁移,也只需要修改一下建表语句,配置数据加密的表和加密字段即可,在实际增删改查过程中,所有操作语句都是与明文一样的。全密态等值和传统加密有什么区别?我做了一个总结。应用案例 自己生产的降落伞自己先跳,GaussDB的全密态能力已经在华为的MetaERP系统商用了。不久前,华为宣布实现自主创新的MetaERP研发,完成对旧ERP系统的替换,目前已覆盖了华为公司100%的业务场景和80%的业务量。ERP作为华为企业经营最核心的系统,伴随着华为20多年的快速发展,支撑了每年数千亿产值的业务以及全球170+国家业务高效经营。我们分析过一个业务,其中有270多个绝密字段,任何一个环节发生数据泄露都是重大事故。而之前的传统方案,是强制在应用层加密,加密完成后存到数据库,用数据的时候,先把数据查询出来之后做解密再使用,数据库做不了任何事情,这种方案加密时间长,性能损耗大,密钥需要自管,所以上了全密态。刚开始做自己的ERP系统的时候,数据库的容量、性能,特别是对批量数据的查询和处理,都是空前挑战。因为ERP业务实际是不看TPCC等基准测试指标的,他们只看实际业务场景的性能,比如批量插入、批量查询等,这给我们提供了一个良好的训练场,我们对批量处理性能等多种场景的实际应用都进行很大的优化,确保MetaERP在全密态下能满足业务对性能的要求。另外,ERP应用的时候有一个特点,交易查询完之后,下游还有一个分析库处理,我们有一个密钥授权能力,在业务负责人将密钥权限授权下游处理节点后 ,数据库就把密文数据解密后托管给下游处理,这样后台数据就可以不经过客户端,不同的应用只需要使用同一个KMS(密钥管理)就可以操作同一部分数据。另外,只要业务负责人不把密钥授权给其他任何人,就没有人能处理这个数据,包括管理和运维人员。最后是获得的一些成绩,GaussDB是国内首个通过国际CC EAL4+认证的数据库,也是国内首批通过信通院全密态数据库评测、国内首家通过信通院防篡改数据库评测的数据库产品。今天的分享就到这里,欢迎小伙伴们一起交流。
-
本篇为大家分享GaussDB性能调优的实践。主要包括三个部分,分别是性能调优的整体介绍,性能调优的关键技术,性能调优的应用实践。GaussDB性能调优简介 我们知道数据库作为系统软件,在整个计算机体系中起到关键的承上启下作用。可以看到应用程序通过北向接口与数据库进行交互,数据库通过南向接口与操作系统和硬件进行交互。对于数据库系统的性能影响是多方面的,不管是硬件规格、操作系统配置、数据库系统的设计、应用和客户端的连接方式,都会对业务最终的性能表现产生很大的影响,所以数据库的性能表现本质上是整体计算机系统软硬件协调的结果。数据库性能优化充满复杂性和挑战性,既有主观的成分,也有复杂的一面。性能问题的主观性,举例来说,某个查询消耗是1s,它的性能是好还是坏,是否脱离业务目标很难讲清楚。所以描述性能问题时要目标清晰、描述具体、结果可度量。例如一个问题出现后,需要给出硬件配置、参数信息、部署形态、业务场景、当前结果、期望目标等信息。另一个面临的性能问题是复杂性,通过一个问题表象,很难一眼判断是哪个模块引起的,需要分析出一个明确的方向,进一步观察作业在不同模块间数据流动,用全局视角来分析问题;如果性能问题不是单点的问题,我们需要从中找到引起问题的主要矛盾,然后先解决掉大头,看看是否满足业务诉求。在遇到数据库性能相关问题时,经常会出现一些行业术语。比如:IOPS通常指数据库系统数据盘每秒读写IO的次数,反映了磁盘IO的读写能力;吞吐量,往往指的是数据库每秒处理事务数TPS或者查询数QPS,反映整体的负载状况;响应时间,指的是数据库中一条查询从发起到结果返回的时间开销,用来识别慢SQL;饱和度,指大并发场景下属于工作队列的任务数,反映当前系统作业被积压的情况,以及忙闲程度。GaussDB数据库的逻辑架构分析GaussDB性能问题前,先简单介绍一下其逻辑架构,主要包括以下组件:GaussDB数据库的查询处理流程了解GaussDB架构后,我们简单梳理一下查询处理流程,拆解到每个模块,展开一下每个模块的功能和性能关注点。GaussDB性能调优关键技术 下面介绍一下GaussDB在性能优化方面的几个关键技术。计划缓存计划缓存技术,一般在OLTP的业务负载中,因为涉及的数据量较少,通过索引加速数据访问路径后,查询解析、重写、优化占比就很高。对于模板行的语句,可以将模板语句的计划缓存起来,那么同模板不同参数语句执行时,可以直接使用缓存计划,大大提升并发吞吐量。我们设想一下,缓存计划是针对一个session,还是针对整个系统的,由此引申出两个概念,local plan cache和global plan cache。如果只在session上缓存已执行计划,可能会导致每个session上执行计划都很多,占用内存资源较高,GPC可以很好解决内存占用问题,但维护代价较大,管理成本高。还有一个问题是,缓存计划可能针对某一类SQL,如果参数变化后,执行计划不优怎么办。GaussDB实现了计划自适应选择的能力,可以自动为不同参数配置最佳的缓存计划。智能基数估计智能基数估计主要解决两个问题:一是什么时候创建多列统计信息?二是创建什么类型的统计模型?当前常见的方案是采用MCV(一种软件架构模式)和直方图的统计模型来实现。但这两个方案在单列场景估计的比较准确,在多列场景中仅支持单表,而且误差较大,无法应用。GaussDB创新性地设计出基于库内轻量级贝叶斯网络算子模型来实现多列场景下的基数估计;基于DB4AI的轻量级算子,在数据库内完成训练和推理,对内核几乎无影响;在自动analyze收集统计信息时,自动创建贝叶斯网络模型;优化器在进行多列基数估计时,调用训练好的模型,给出准确率的数值。分布式查询执行GaussDB分布式数据库在查询执行过程中,采用多种技术提升查询执行的性能。其中分布式执行框架用于实现分布式集群的多节点并行处理能力,提升集群整体的性能。在复杂语句查询时,会将重执行算子下推到DN节点执行,例如AGG算子等。在下推算子执行时,会考虑数据本地性,尽可能在本地计算,减少数据在网络中的传输开销,从而提升数据库整体的查询性能。在单节点内,通过SMP并行技术,利用多核CPU的并行加速,结合内存管控,提升单节点的性能。GTM LiteGTM负责全局事务的一致性。传统的GTM组件需要维护每一个活跃事务信息,作业执行时,需要从GTM获取快照时,拿到的是当前的活跃事务链表,如果量特别大,将对网络并发带来压力。GaussDB实现GTM lite能力,通过CSN号代替事务链表,获取的快照仅为CSN号,在事务提交时,也只需要原子加CSN号。在可见性判断时,基于CSN号进行,如果事物结束的CSN比快照中CSN值小,那么元组可见,否则元组不可见。日志并行流水线数据库日志系统非常关键,是数据持久化的关键保证。因为日志有顺序依赖关系,所以传统数据库一般采用串行刷日志的设计。GaussDB采用log writer日志写盘线程并行写机制,充分发挥多通道IO的能力。GaussDB日志并行流水线主要机制是将一把大锁,拆分为多个并行的小锁,部分worker线程的事务日志写到一个事务日志共享缓冲区,每个事务结束前保证对应的事务日志LSN已经刷盘,有全局LSN原子加保证顺序。NUMA AwareGaussDB在多核ARM架构下,通过NUMA Aware技术解决跨NUMA内存访问延迟问题。我们主要做了以下动作:全局数据结构NUMA化改造,关键数据结构包括CLOG、Wal insertlock、proc array等,降低了数据访问延迟;将内核工作线程与NUMA Node进行绑定,避免跨NUMA调度;利用原子操作指令集LSE,提升计算性能。GaussDB性能调优应用实践 最后介绍性能调优的应用实践。先看看性能调优的思路,遇到性能问题,先确定性能调优的范围,观察是否是某个系统资源达到瓶颈,或者是否存在SQL阻塞或慢SQL。如果是系统资源类问题,通过系统调优来进行诊断和优化;如果是SQL层面问题,通过SQL调优进行诊断和优化,最终看优化后效果是否满足业务需求,如果一次优化不能达成预期,则需要多轮迭代,最终达成目标。数据库系统整体性能问题的定位思路,先判断是数据库层面问题还是其他层面问题,其他层面问题是否是节点上其他进程引起的数据库性能下降,或者是操作系统参数配置不当引起的。若是数据库层面问题,需要对数据库占用的系统资源信息、数据库内核资源、主备状况等进行综合分析,最后确认问题根因。在分析单条SQL语句性能时,可以通过使用视图statement_history或者statement,查询语句每个阶段执行的时间消耗,确定语句执行的性能瓶颈。statement_history记录了执行时间超过阈值(log_min_duration_statement,默认3 s)的详细SQL信息,包含计划生成时间、执行时间、锁等待时间等信息;statement记录了SQL按照unique_sql_id归一化的执行信息,包括执行次数、总的执行时间、访问数据量、内存使用等信息。然后通过等待事件视图,查询阻塞会话和对象;最后通过执行计划,获取更细粒度的算子执行情况,如是否走索引、走正确的索引、分布式执行算子stream是否涉及广播等。讲到GaussDB全量SQL和慢SQL,他们包含哪些内容。GaussDB的多维度指标监控采集粒度不同,对系统性能的影响也不同,主要分为三个级别进行采集。下面介绍两个案例。第一个是应用升级后引起了性能剧烈波动,我们先观察一下实例整体执行的时间,看看在哪一步消耗的比重最高,通过归一化视图观察单个SQL,看每一步的执行消耗,发现是在网络发送部分引起的,我们把应用侧进行替换,应用程序更新后这个问题就解决了。第二个是集群整体性能劣化。我们先观察CN上线程等待状态,发现有些节点等待次数超高;在异常节点上分析等待事件,发现wal sync等待的时间较高,通过对比正常节点,确认该节点上存在wal sync的问题;最后分析出主备间日志LSN分片差异较大,一直在进行回放,影响系统整体性能。最后介绍一下GaussDB两个自调优利器,分别是索引推荐和分布键推荐,主要用于提供高效推荐。比如索引推荐,可以帮助用户根据业务负载自动推荐合适的索引组合,识别冗余索引和无效索引;在推荐索引时,同时输出正向提升SQL信息和负向提升SQL信息,帮助用户来决策是否使用推荐的索引。本篇分享就到这里,谢谢大家。
-
本篇将分享GaussDB数据库迁移的创新实践。易迁移能力是企业数据库替换选型的关键考量 数据库的选型除了要看数据库本身的能力外,能否很平滑地从其他数据库迁移到GaussDB,也是很多企业考量的关键因素。而数据库能否平滑迁移有两个非常核心的要素,一个是数据库本身,比如能否很好地兼容主流数据库的语法,让应用少改或者不改;另外一个是在数据库外围能否提供一些好用、易用的迁移工具,把应用中内嵌的SQL、数据库中的对象以及全量和增量数据,在业务近乎零停机的情况下从其他数据库平滑地迁移过来。这两点是企业做数据库选型时考量的两个迁移关键要素。结构(UGO)+数据(DRS) 一站式迁移解决方案在2021年的DTCC大会上,发布了华为云结构+数据一站式迁移解决方案,其中有两个核心工具。一个工具是UGO,主要做结构和应用的语法兼容性评估和转换,比如将数据库上层应用中内嵌的SQL捕获出来进行评估,对数据库内部对象的DDL进行评估,并输出一个报告,清晰地展示哪些是数据库本身兼容的、哪些是通过UGO转换可以兼容的、哪些不能转换需要人工介入进行改造等。另外一个工具是DRS,大家都知道,异构数据库替换过程中的数据迁移问题非常非常多,DRS要解决的就是怎么在业务近乎不停机的情况下快速把客户的存量数据和增量数据迁移过来,并保证数据在任何情况下不丢、不错、不乱,同时提供灵活、多样的数据比对和修复能力。UGO+DRS一体化解决方案 在实际项目中得到验证UGO+DRS一站式迁移解决方案近两年在很多项目中都得到了验证和应用,这里举几个实际的例子。第一个是我们公司自己内部的MetaERP项目,使用UGO自动转换了近7亿行的O数据库SQL脚本,转换成功率接近100%,同时GaussDB实现了并行逻辑解码,性能高达近300MB/秒,可以让DRS轻松应对MetaERP在月结、季结和年结时10~20倍的流量洪峰,保证数据同步<5s的低时延。第二个是某银行的数据库替换,这个项目迁移复杂度比较高,面临应用多、数据库对象多、存储过程和package深度依赖等困难,截至目前通过我们的一站式迁移解决方案,完成了近1.3亿行SQL脚本(包含近8000万存储过程)的UGO自动转换,转换成功率超过96%,采用DRS迁移了近300套左右的O数据库实例,实现了O数据库与GaussDB数据库的长时间并机稳定运行,正反向低时延数据同步。项目实施过程中遇到新的困难与挑战 在大量的项目实施过程中,UGO+DRS一站式迁移解决方案也遇到了一些新的困难和挑战,这些挑战相信大家也都会遇到,在此给大家做个分享。挑战一在做异构数据库替换时,如何快速识别异构数据库语法不兼容点,识别数据相同的情况下相同SQL在不同数据库中执行的性能差异,以及低版本向高版本升级时是否会存在不兼容或性能劣化,再有就是如何模拟业务流量洪峰时的数据库行为表现。挑战二当前很多企业的开发人员和DBA对GaussDB熟悉程度还不高,SQL编写水平参差不齐,而且在做应用开发时缺乏统一的SQL编程规范和有效的SQL审核机制,很多烂SQL都流入了生产环境,进而引发大量的应用性能问题,影响生产业务和客户体验。挑战三很多数据库当前的字符集在标准字符集的基础上做了很多扩展或者定制,导致数据迁移时相同字符集的不兼容,或者就没有对等的字符集,更有甚者,历史数据里已经存在了各种各样的乱码数据,这些特殊场景都会影响迁移的平滑性。当然,困难和挑战还有很多,但这三个是会阻塞或拖慢数据库迁移进程的,那么针对这三个挑战,我们都做了哪些探索和创新呢?再给大家分享一下。应对挑战一:孵化数据库流量录制与回放能力流量录制与回放的概念相信大家都不陌生,在数据库领域,有些数据库厂商也提供了相应的工具,GaussDB面临的业务场景比较多,所以需要的技术也因场景而异。如果源数据库是公有云服务,而且提供了全量SQL,那么直接获取全量SQL并进行回放即可;如果源数据库开启了审计日志,也可以直接下载并解析审计日志,当然开启审计日志会对数据库的性能有一定的影响;如果源端是自建数据库,而且未开启审计日志,那就需要部署一个agent,通过捕获网络数据包,结合数据库本身的通信协议来解析出应用下发的所有SQL。基本上这三种方案可以涵盖所有的场景,这里面还要注意几个点,首先是要研究透不同数据库的通信协议,其次是实现异构数据库替换场景下的SQL自动转换,另外是要具备SQL回放的流量控制能力,能加速或者放慢等,当然在解析、回放等出现异常的情况下,要做好记录。接下来就是在源数据库的镜像库和GaussDB数据库同时进行流量回放,而且保证镜像库和目标数据库的数据完全一致,回放的SQL也完全一样,最终输出一个分析报告,比对每一条SQL的执行耗时、资源消耗、甚至是执行结果,很容易看出来哪些SQL的性能GaussDB比源数据库好、哪些出现了劣化、哪些是基本持平的。GaussDB团队正在和某银行进行数据库流量录制与回放的联合创新,从实际应用效果来看,通过agent方式捕获流量包,SQL抓取成功率可以做到97%以上,解析成功率和回放成功率可以达到95%,在此过程中,还可以识别到语法不兼容、语义不兼容的异常情况。应对挑战二:孵化GaussDB数据库SQL审核能力SQL审核大家更为熟悉,很多大的企业都会进行探索和实践,但对于GaussDB来说,由于是纯自主创新的分布式数据库,很多企业的开发人员和DBA还不熟悉GaussDB的SQL语法,也没有制定较为完善的SQL编程规范,很多第三方SQL审核工具也没有针对GaussDB的审核能力,这种情况下,我们结合UGO成熟的SQL解析器,以及多个项目中的SQL调优实践,孵化出了GaussDB数据库的SQL审核能力。SQL审核的输入可以有多种类型,可以是代码仓,也可以是一个SQL文件,还可以是通过流量录制获取的动态SQL等等,可以审核直接获取到的原生SQL,也可以审核通过UGO转换后的SQL。截至目前,已经沉淀了81条审核规则,并在公司内部的两个项目以及外部的多个银行进行了应用,效果超出预期。应对挑战三:孵化字符集兼容性分析评估能力针对数据迁移,大家最担心的莫过于正式割接时出现各种各样的问题导致割接失败,除了迁移工具本身的功能之外,最常见的可能就是字符集不兼容、数据乱码、生僻字等等。举个例子,O数据库对GBK字符集做了扩充,可以存储UTF-8字符,而GaussDB数据库的GBK字符集非常规范,从O数据库向GaussDB迁移数据时,这些UTF-8字符根本无法写入,迁移必然失败。更有甚者,很多客户的海量历史数据中有大量的乱码数据,无法确定这些数据是什么时候写入的,哪些应用写入的,或者后续会不会再用到,但客户要求必须迁移过来。那么,面对这些挑战,我们尝试通过孵化字符集兼容性分析评估工具来提前识别。这个工具的原理很简单,首先是建立一个可以分析的字符集基线,比如GB系、Unicode系列等,其次是获取源数据库的元数据,包括字符集、索引信息、表结构信息(列类型、列长度)等,然后基于源数据库和目标数据库的字符集做好映射,最后再对数据库进行数据扫描和分析,输出多维度的分析评估报告。目前这个工具正在和某银行进行联创,从前期的试用效果来看,确实能发现很多问题,比如ZHS16GBK和AL32UTF8两种字符集混编、直接写入二进制格式导致数据乱码、ZHS16GBK字符集使用了大量生僻字等。对UGO+DRS一站式迁移解决方案 的演进思考 以上是在使用UGO+DRS一站式迁移解决方案过程中遇到的三个大的挑战,以及应对这三个挑战做的一些创新实践。现在GaussDB的迁移场景越来越多,也越来越复杂,所以会不断地进行探索和创新,让方案更完善,迁移过程更平滑,比如流量回放、SQL审核、字符集兼容性评估会支持更多的数据库,推出非常详细和全面的应用、结构、数据迁移可行性分析报告,实现SQL捕获、转换、审核、优化全流程一体化管理等等,也希望能和客户、伙伴以及各位同行进行合作。以上是GaussDB数据库在迁移方面的一些创新实践,谢谢大家,欢迎交流。
-
本篇为大家分享GaussDB高安全的关键特性,名字叫密态等值,是一个关于全密态的关键能力。数据成为生产要素,合规要求趋于严格 大家应该都有切身的体会,近些年数据的重要性越来越高,特别是国家已经把数据明确定义为了生产要素。生产要素是什么?就好像过去的石油,从工业革命时期开始,每一家工业企业几乎都要用到,是生产过程中必不可少的东西。现在,国家把数据定义为生产要素,意味着数据在各个领域也将要广泛地使用到。正因为这样,数据也上升成为了国家的“战略资源”。基于此,国家近些年发布了《中华人民共和国数据安全法》、《中华人民共和国个人信息保护法》等一系列法律,对数据安全的保护标准和使用规范越来越明确、越来越严格,这是我们切身体会到的一个大的趋势。数据库安全面临更大的威胁和挑战 在这种新形势下,数据库的安全也面临很大的威胁。我们做了一个梳理,从里到外,数据库的安全问题一共有以下几个方面:首先,数据安全传输从网络层面容易受到攻击。大概20年前,安全人员在网络上部署一台嗅探器,就可以获取到许多的敏感信息。而之后陆续出现相关的标准和技术,经过一段时间的演进逐步成熟,演变成稳定的安全协议或安全架构,被广泛使用起来。例如HTTPS、TLS等,通过这种安全协议上的消解,我们发现,现在很难通过网络攻击,直接获取到敏感的东西。随后我们发现,SQL注入,以及网页跨站等问题开始越来越明显,数据展示层的攻击虽然和数据库不直接相关,而是从数据库把数据拿出来之后放到业务层,在业务层引入的风险,但这些风险也可以通过数据库提供的能力进行消减,因此也纳入数据库威胁范围内。同样也是随着技术的发展,一些稳定的安全框架、安全编码规范形成之后,这部分的风险逐渐消减了。其次是存储。各类安全规范里经常会提及到存储安全保护,因为数据一旦存在磁盘里,有可能永远都在磁盘里,直到磁盘销毁的那一天。如果里面存放了敏感数据,理论上每一天都有被偷走的可能,所以存储安全非常的重要。关于这一点,相关的技术也在逐步成熟,像磁盘加密、透明加密等,而且各家机构企业也都非常重视对于物理硬件的保护,管理手段非常严格,所以磁盘被偷走的情况也很少出现。最近几年,经常看到各种各样的严重安全事件,主要在两个维度,一个是维护,一个是管理。维护就是后台操作系统的人员做一些数据库的维护操作,管理就是DBA通过数据库标准通道做一些管理操作。这也不一定是内部人员有问题,也有可能是这些内部人员的账号被泄露,近几年世界知名的一些大型数据安全事件,大部分是在这两个方面出了问题,都泄露了很多的数据,这是新形势下最大的安全威胁。GaussDB以数据为中心 构筑起3+1安全架构 面对这些挑战,GaussDB构筑起了3+1的安全架构。这个架构的最外层,是基于智能化能力做一些风险、异常行为的感知,先感知有没有恶意攻击,阻挡一遍攻击。中层是访问控制能力,加上口令、身份认证等,进一步控制用户访问风险。里层是数据加密、脱敏,直接在数据上做文章,因而攻击者即使将外层全部攻破,拿走的也全部是密文状态下的数据。最后在这三层之外是审计,GaussDB做了很多细粒度的审计能力,还有防篡改。我们的审计日志是改不了的,即使篡改了,也能看出来哪里被改了。所以,即使攻击者做了很多操作,把数据库也攻破了,但所有操作是跑不了的。而今天分享的就是全密态里面的等值查询。GaussDB全密态等值查询 实现数据全流程保护 全密态技术的原理很简单。比如在使用的时候输入一个SQL语句,加密驱动会找到哪个字段需要加密,然后用一个密钥把它自动加密,这样加密完后整个流程都是密文的,整个数据库跑的数据、以及跑完之后的结果都是密文数据,不论什么时候把数据拿走,拿走的也都是密文的,因为在整个数据库里面没有任何解密的过程。我们对查询回来的密文结果在客户端再进行解密,将明文数据返回给业务进行处理,从而能够做到无感知的使用和业务迁移。我们当前支持密态等值等查询,很快还会支持密态范围查询和模糊查询,都是基于密码学的算法。对于大规模数据,我们还可以基于密文数据进行索引和快速查询,并且支持JDBC、GO、Libpq等多种客户端驱动。客户端密钥管理,保障服务可信 对加密来说,密钥是最关键的,所以全密态最主要的是密钥的分配。我们的全密态密钥是在客户端管理,一般属于业务管理人员负责,业务管理人员拿到密钥后把数据加密再交给数据库。逻辑很简单,我们在驱动层做了一个加密驱动,里面做了自动加解密和自动解析,能够自动识别哪个字段需要哪个密钥,再自动找到密钥、自动加密。这样只要业务不把密钥权限分配给DBA和运维,他们就不能解密这部分数据,但是能够正常运维,如果有极特殊的情况需要看到明文敏感数据才能做管理运维,也可以把密钥赋权给相关人员。全流程加密,数据库内部全流程零解密 第二层是加密,数据库里的整个流程是没有解密过程的,这是GaussDB实现的最主要的能力,包括传输、查询、存储等操作都有对应的方式,不需要解密再处理。但是,如果不单是在客户端需要数据导出,假如后端也需要直接导出数据,我们也可以在某些特殊场景下把密钥授权给下游做临时解密。这是加密方面的情况介绍。客户端轻量化解析 业务层加密透明无感 另外,如何做到透明无感知?解析器是数据库里的关键组件,我们在客户端里面做了一个轻量化解析器,对用户输入进去的SQL语句做自动的语法解析,找到哪个字段需要加密,而对于返回过来的语法也进行对应的解析。做完这个解析,客户端可以获取到需要加密的数据以及该数据在原始语句中的位置,然后重新构造一个新的SQL语句,数据库实际收到的就是加密之后的数据。经过客户端的自动语法解析,自动密钥管理和自动加密后,就可以继承标准的SQL语法,实现业务的透明无感知。对于业务迁移,也只需要修改一下建表语句,配置数据加密的表和加密字段即可,在实际增删改查过程中,所有操作语句都是与明文一样的。全密态等值和传统加密有什么区别?我做了一个总结。应用案例 自己生产的降落伞自己先跳,GaussDB的全密态能力已经在华为的MetaERP系统商用了。不久前,华为宣布实现自主创新的MetaERP研发,完成对旧ERP系统的替换,目前已覆盖了华为公司100%的业务场景和80%的业务量。ERP作为华为企业经营最核心的系统,伴随着华为20多年的快速发展,支撑了每年数千亿产值的业务以及全球170+国家业务高效经营。我们分析过一个业务,其中有270多个绝密字段,任何一个环节发生数据泄露都是重大事故。而之前的传统方案,是强制在应用层加密,加密完成后存到数据库,用数据的时候,先把数据查询出来之后做解密再使用,数据库做不了任何事情,这种方案加密时间长,性能损耗大,密钥需要自管,所以上了全密态。刚开始做自己的ERP系统的时候,数据库的容量、性能,特别是对批量数据的查询和处理,都是空前挑战。因为ERP业务实际是不看TPCC等基准测试指标的,他们只看实际业务场景的性能,比如批量插入、批量查询等,这给我们提供了一个良好的训练场,我们对批量处理性能等多种场景的实际应用都进行很大的优化,确保MetaERP在全密态下能满足业务对性能的要求。另外,ERP应用的时候有一个特点,交易查询完之后,下游还有一个分析库处理,我们有一个密钥授权能力,在业务负责人将密钥权限授权下游处理节点后 ,数据库就把密文数据解密后托管给下游处理,这样后台数据就可以不经过客户端,不同的应用只需要使用同一个KMS(密钥管理)就可以操作同一部分数据。另外,只要业务负责人不把密钥授权给其他任何人,就没有人能处理这个数据,包括管理和运维人员。最后是获得的一些成绩,GaussDB是国内首个通过国际CC EAL4+认证的数据库,也是国内首批通过信通院全密态数据库评测、国内首家通过信通院防篡改数据库评测的数据库产品。今天的分享就到这里,欢迎小伙伴们一起交流。
-
本篇将分享GaussDB数据库迁移的创新实践。易迁移能力是企业数据库替换选型的关键考量 数据库的选型除了要看数据库本身的能力外,能否很平滑地从其他数据库迁移到GaussDB,也是很多企业考量的关键因素。而数据库能否平滑迁移有两个非常核心的要素,一个是数据库本身,比如能否很好地兼容主流数据库的语法,让应用少改或者不改;另外一个是在数据库外围能否提供一些好用、易用的迁移工具,把应用中内嵌的SQL、数据库中的对象以及全量和增量数据,在业务近乎零停机的情况下从其他数据库平滑地迁移过来。这两点是企业做数据库选型时考量的两个迁移关键要素。结构(UGO)+数据(DRS) 一站式迁移解决方案在2021年的DTCC大会上,发布了华为云结构+数据一站式迁移解决方案,其中有两个核心工具。一个工具是UGO,主要做结构和应用的语法兼容性评估和转换,比如将数据库上层应用中内嵌的SQL捕获出来进行评估,对数据库内部对象的DDL进行评估,并输出一个报告,清晰地展示哪些是数据库本身兼容的、哪些是通过UGO转换可以兼容的、哪些不能转换需要人工介入进行改造等。另外一个工具是DRS,大家都知道,异构数据库替换过程中的数据迁移问题非常非常多,DRS要解决的就是怎么在业务近乎不停机的情况下快速把客户的存量数据和增量数据迁移过来,并保证数据在任何情况下不丢、不错、不乱,同时提供灵活、多样的数据比对和修复能力。UGO+DRS一体化解决方案 在实际项目中得到验证UGO+DRS一站式迁移解决方案近两年在很多项目中都得到了验证和应用,这里举几个实际的例子。第一个是我们公司自己内部的MetaERP项目,使用UGO自动转换了近7亿行的O数据库SQL脚本,转换成功率接近100%,同时GaussDB实现了并行逻辑解码,性能高达近300MB/秒,可以让DRS轻松应对MetaERP在月结、季结和年结时10~20倍的流量洪峰,保证数据同步<5s的低时延。第二个是某银行的数据库替换,这个项目迁移复杂度比较高,面临应用多、数据库对象多、存储过程和package深度依赖等困难,截至目前通过我们的一站式迁移解决方案,完成了近1.3亿行SQL脚本(包含近8000万存储过程)的UGO自动转换,转换成功率超过96%,采用DRS迁移了近300套左右的O数据库实例,实现了O数据库与GaussDB数据库的长时间并机稳定运行,正反向低时延数据同步。项目实施过程中遇到新的困难与挑战 在大量的项目实施过程中,UGO+DRS一站式迁移解决方案也遇到了一些新的困难和挑战,这些挑战相信大家也都会遇到,在此给大家做个分享。挑战一在做异构数据库替换时,如何快速识别异构数据库语法不兼容点,识别数据相同的情况下相同SQL在不同数据库中执行的性能差异,以及低版本向高版本升级时是否会存在不兼容或性能劣化,再有就是如何模拟业务流量洪峰时的数据库行为表现。挑战二当前很多企业的开发人员和DBA对GaussDB熟悉程度还不高,SQL编写水平参差不齐,而且在做应用开发时缺乏统一的SQL编程规范和有效的SQL审核机制,很多烂SQL都流入了生产环境,进而引发大量的应用性能问题,影响生产业务和客户体验。挑战三很多数据库当前的字符集在标准字符集的基础上做了很多扩展或者定制,导致数据迁移时相同字符集的不兼容,或者就没有对等的字符集,更有甚者,历史数据里已经存在了各种各样的乱码数据,这些特殊场景都会影响迁移的平滑性。当然,困难和挑战还有很多,但这三个是会阻塞或拖慢数据库迁移进程的,那么针对这三个挑战,我们都做了哪些探索和创新呢?再给大家分享一下。应对挑战一:孵化数据库流量录制与回放能力流量录制与回放的概念相信大家都不陌生,在数据库领域,有些数据库厂商也提供了相应的工具,GaussDB面临的业务场景比较多,所以需要的技术也因场景而异。如果源数据库是公有云服务,而且提供了全量SQL,那么直接获取全量SQL并进行回放即可;如果源数据库开启了审计日志,也可以直接下载并解析审计日志,当然开启审计日志会对数据库的性能有一定的影响;如果源端是自建数据库,而且未开启审计日志,那就需要部署一个agent,通过捕获网络数据包,结合数据库本身的通信协议来解析出应用下发的所有SQL。基本上这三种方案可以涵盖所有的场景,这里面还要注意几个点,首先是要研究透不同数据库的通信协议,其次是实现异构数据库替换场景下的SQL自动转换,另外是要具备SQL回放的流量控制能力,能加速或者放慢等,当然在解析、回放等出现异常的情况下,要做好记录。接下来就是在源数据库的镜像库和GaussDB数据库同时进行流量回放,而且保证镜像库和目标数据库的数据完全一致,回放的SQL也完全一样,最终输出一个分析报告,比对每一条SQL的执行耗时、资源消耗、甚至是执行结果,很容易看出来哪些SQL的性能GaussDB比源数据库好、哪些出现了劣化、哪些是基本持平的。GaussDB团队正在和某银行进行数据库流量录制与回放的联合创新,从实际应用效果来看,通过agent方式捕获流量包,SQL抓取成功率可以做到97%以上,解析成功率和回放成功率可以达到95%,在此过程中,还可以识别到语法不兼容、语义不兼容的异常情况。应对挑战二:孵化GaussDB数据库SQL审核能力SQL审核大家更为熟悉,很多大的企业都会进行探索和实践,但对于GaussDB来说,由于是纯自主创新的分布式数据库,很多企业的开发人员和DBA还不熟悉GaussDB的SQL语法,也没有制定较为完善的SQL编程规范,很多第三方SQL审核工具也没有针对GaussDB的审核能力,这种情况下,我们结合UGO成熟的SQL解析器,以及多个项目中的SQL调优实践,孵化出了GaussDB数据库的SQL审核能力。SQL审核的输入可以有多种类型,可以是代码仓,也可以是一个SQL文件,还可以是通过流量录制获取的动态SQL等等,可以审核直接获取到的原生SQL,也可以审核通过UGO转换后的SQL。截至目前,已经沉淀了81条审核规则,并在公司内部的两个项目以及外部的多个银行进行了应用,效果超出预期。应对挑战三:孵化字符集兼容性分析评估能力针对数据迁移,大家最担心的莫过于正式割接时出现各种各样的问题导致割接失败,除了迁移工具本身的功能之外,最常见的可能就是字符集不兼容、数据乱码、生僻字等等。举个例子,O数据库对GBK字符集做了扩充,可以存储UTF-8字符,而GaussDB数据库的GBK字符集非常规范,从O数据库向GaussDB迁移数据时,这些UTF-8字符根本无法写入,迁移必然失败。更有甚者,很多客户的海量历史数据中有大量的乱码数据,无法确定这些数据是什么时候写入的,哪些应用写入的,或者后续会不会再用到,但客户要求必须迁移过来。那么,面对这些挑战,我们尝试通过孵化字符集兼容性分析评估工具来提前识别。这个工具的原理很简单,首先是建立一个可以分析的字符集基线,比如GB系、Unicode系列等,其次是获取源数据库的元数据,包括字符集、索引信息、表结构信息(列类型、列长度)等,然后基于源数据库和目标数据库的字符集做好映射,最后再对数据库进行数据扫描和分析,输出多维度的分析评估报告。目前这个工具正在和某银行进行联创,从前期的试用效果来看,确实能发现很多问题,比如ZHS16GBK和AL32UTF8两种字符集混编、直接写入二进制格式导致数据乱码、ZHS16GBK字符集使用了大量生僻字等。对UGO+DRS一站式迁移解决方案 的演进思考 以上是在使用UGO+DRS一站式迁移解决方案过程中遇到的三个大的挑战,以及应对这三个挑战做的一些创新实践。现在GaussDB的迁移场景越来越多,也越来越复杂,所以会不断地进行探索和创新,让方案更完善,迁移过程更平滑,比如流量回放、SQL审核、字符集兼容性评估会支持更多的数据库,推出非常详细和全面的应用、结构、数据迁移可行性分析报告,实现SQL捕获、转换、审核、优化全流程一体化管理等等,也希望能和客户、伙伴以及各位同行进行合作。以上是GaussDB数据库在迁移方面的一些创新实践,谢谢大家,欢迎交流。
-
数据库支持数据闪回技术概览简介数据闪回技术是一种数据库恢复机制,它允许数据库管理员(DBA)将数据库或其中的数据恢复到过去的某个时间点,以纠正由于误操作、错误数据或系统故障引起的问题。这项技术在多种数据库系统中都有所应用,包括但不限于Oracle、MySQL、PostgreSQL等。接下来,我们将详细探讨不同数据库系统中的数据闪回技术。Oracle数据库的闪回技术Oracle数据库提供了多种闪回技术,包括闪回查询、闪回表、闪回数据库等。这些技术基于数据库的日志文件(Undo日志)来实现数据还原。日志文件记录了数据库每次操作的详细信息,包括数据修改、事务提交等。通过解析日志文件,Oracle数据库可以将数据库还原到特定的时间点或操作前的状态。闪回查询闪回查询(Flashback Query)允许用户查询过去某个时间点的数据,而无需恢复整个数据库。用户可以通过指定时间点或系统更改号(SCN)来查询特定时间点的数据状态。闪回表闪回表(Flashback Table)可以将表恢复到过去某个时间点或SCN值时的状态。这项技术主要用于恢复指定表中的数据,而不影响数据库的其他部分。闪回数据库闪回数据库(Flashback Database)可以将整个数据库恢复到过去的某个时间点或SCN值。执行闪回数据库操作需要数据库启用归档日志模式,并有足够的磁盘空间来存储日志文件。MySQL数据库的闪回技术MySQL数据库原生不支持闪回功能,但可以通过第三方工具或自行编写脚本来实现类似的效果。例如,可以使用binlog来生成恢复SQL,进而实现数据的闪回恢复。第三方工具有开发者自行实现了MySQL数据库的闪回功能,如mysqlbinlog_flashback和binlog2sql等工具,这些工具可以解析binlog日志并生成用于数据恢复的SQL语句。PostgreSQL数据库的闪回技术PostgreSQL数据库提供了类似的闪回功能,包括闪回查询和闪回数据归档。它允许用户查询过去的数据版本,并在必要时执行数据恢复。闪回数据归档PostgreSQL的闪回数据归档(Flashback Data Archive)功能可以保留数据的历史版本,允许用户恢复到任意时间点的数据状态。总结数据闪回技术在不同数据库系统中的实现各有特色,但其核心目的是相似的:提供一种高效、可靠的数据恢复机制,以应对日常运维中不可避免的数据错误和损失。通过合理运用这些技术,DBA们能够在关键时刻保护企业的数据资产,确保业务的连续性和数据的完整性。
-
GaussDB(DWS)与GaussDB分布式版的区别概述GaussDB(DWS)和GaussDB分布式版都是华为推出的数据库产品,但在功能、架构和使用场景上存在一些差异。GaussDB(DWS)是一个云原生的数据仓库解决方案,而GaussDB分布式版则是指GaussDB的分布式部署形态。接下来我们将详细探讨这两个产品的区别。GaussDB(DWS)GaussDB(DWS)是华为云提供的云原生数据仓库服务,它采用全对称分布式架构,没有中心节点,所有节点都可以提供服务,实现千万条/秒入库吞吐,毫秒级入库时延,兼顾吞吐和时延要求。DWS具有高性能、高扩展、高可靠等特点,能够用一套软件替换多个数据组件,简化数据链路,统一运维,提供一站式数据分析解决方案。关键特性Serverless模式:支持按需资源,按需查询等灵活计费。存算分离:实现冷热数据自动管理,降低存储成本。数据格式兼容性:兼容Hudi/ORC/Parquet等开源数据格式,实现格式化和非格式化数据统一分析。表级细粒度容灾:按需创建容灾规模,最大化降低容灾集群投资。GaussDB分布式版GaussDB分布式版则是GaussDB的分布式部署形态,适用于可靠性、稳定性要求较高,实例规模较大的场景。分布式形态能够支撑较大的数据量,且提供了横向扩展的能力,可以通过扩容的方式提高实例的数据容量和并发能力。部署形态独立部署:数据库组件部署在不同节点上。高可用:采用一主两备或多活部署模式,提供高可用性。三副本:采用单节点的部署模式,包含一个控制节点和一个数据节点组件。性能优化智能查询优化技术:自动分析查询语句,选择最优的执行计划,提高查询效率。多种计算引擎:支持向量化执行引擎、列式存储引擎等,根据不同的应用场景选择最合适的计算引擎,实现更高效的数据处理。总结GaussDB(DWS)和GaussDB分布式版的主要区别在于它们的部署形态和所针对的使用场景。GaussDB(DWS)侧重于云原生环境和大规模数据分析,而GaussDB分布式版则更适合需要高可靠性和稳定性的企业级应用。两者都提供了高性能的数据处理能力,但GaussDB(DWS)在云服务和弹性扩展方面更具优势,而GaussDB分布式版则在独立部署和数据一致性方面更加突出。用户应根据自己的业务需求和技术背景选择合适的产品形态。
-
GaussDB数据库分页查询方式简介GaussDB数据库作为一款高性能的数据库产品,其分页查询能力是其核心功能之一。在处理大量数据时,分页查询可以帮助用户有效地检索和展示数据。本文将详细探讨GaussDB数据库中分页查询的具体实现方法和相关优化技巧。GaussDB分页查询的基本实现在GaussDB数据库中,分页查询通常涉及到LIMIT和OFFSET这两个关键词。基本的分页查询语句格式如下:SELECT * FROM table_name LIMIT offset, count;其中,offset参数指定了从哪一行开始查询,count参数指定了要查询的行数。例如,要查询从第11行开始的5行数据,则语句应为:SELECT * FROM table_name LIMIT 10, 5;这种方式在处理小规模数据时表现良好,但随着数据量的增大,性能可能会受到影响,特别是在没有合适的索引情况下。分页查询的性能优化为了提高分页查询的性能,可以考虑以下几个方面的优化措施:索引优化确保查询涉及的列上有适当的索引。例如,如果查询需要按某列排序,则应在该列上创建索引。这样可以减少数据库的排序开销,加快查询速度。子查询优化在某些情况下,可以使用子查询来优化分页查询。例如,可以先找出最后一页的最大ID,然后在下一页的查询中使用这个ID作为起始点,从而避免每次都从头开始扫描。窗口函数优化GaussDB支持窗口函数,如ROW_NUMBER(),可以在查询中使用它来计算每行的序号,进而进行分页。这种方法在Oracle数据库中被称为ROWNUM,但在GaussDB中使用窗口函数可以获得更好的性能。避免全表扫描尽量避免全表扫描,特别是在数据量很大的情况下。可以通过在WHERE子句中添加过滤条件,并结合索引使用,以减少扫描的数据量。总结GaussDB数据库提供了多种分页查询的方式,并通过优化技术提高了查询性能。在实际应用中,应结合具体场景选择最合适的方法,并根据数据量和查询特点进行相应的性能调整。通过合理的索引设计和查询优化,可以确保分页查询在面对大规模数据时仍能保持高效。
-
GaussDB、DWS、GaussDB A、GaussDB T、openGauss概念理解GaussDB数据库概述GaussDB是华为自主研发的关系型数据库,它支持x86和鲲鹏处理器,提供高并发事务实时处理能力、两地三中心金融级高可用能力和分布式高扩展能力。GaussDB数据库适用于金融、政府、电信、大企业等行业核心关键系统。GaussDB T数据库是GaussDB系列中的一员,专注于事务处理,而GaussDB A数据库则具备分析及混合负载能力,适合数据仓库、数据集市、实时分析等场景。GaussDB T数据库特性GaussDB T数据库特别适合于需要处理大量事务的系统,例如电信计费、银行交易等。它支持ACID事务、MVCC多版本并发控制,确保数据的一致性和完整性。GaussDB T数据库在基于鲲鹏处理器的16节点TPC-C标准测试中,性能达到千万级tpmC,显示出其在高并发场景下的优秀性能。GaussDB A数据库特性GaussDB A数据库支持行存储与列存储,提供PB级数据分析能力、多模分析处理能力。它适用于数据仓库、数据集市、实时分析、实时决策和混合负载等场景,广泛应用于金融、政府、电信、大企业等行业核心系统。GaussDB A数据库基于鲲鹏920处理器,相对通用同期芯片,TPC-H/TPC-DS性能提升30%。openGauss数据库概述openGauss是华为开源的数据库项目,旨在打造一个高性能、可伸缩、安全的开源数据库。openGauss社区聚集了众多企业和开发者,致力于推动数据库技术的创新和发展。openGauss社区已经有290多家企业和机构加入,近5000名开发者参与社区贡献,下载量突破190万次。GaussDB与openGauss的关系GaussDB和openGauss有着紧密的联系。GaussDB是华为基于openGauss开源社区的基础上开发的闭源数据库产品。两者共享相同的开源根源,但GaussDB作为闭源产品,提供商业级别的支持和担保,而openGauss则作为一个开放社区,鼓励开发者参与贡献,共同推动数据库技术的发展。总结综上所述,GaussDB、GaussDB T、GaussDB A和openGauss构成了华为在数据库领域的产品和项目矩阵。GaussDB系列数据库针对不同的应用场景提供了特定的优化和功能,而openGauss则作为一个活跃的开源社区,促进了数据库技术的普及和创新。通过这样的组合,华为不仅为行业客户提供了多样化的数据库产品选择,也为全球开发者提供了一个共建共享的开源平台。
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第五期2026/09/04 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;蒋春阳-华为云AI开发者案例开发专家
本期直播内容: AI工具体验营 · 第5-8课连讲。Agent-Team 多智能体协作完成毕业设计实践
回顾中 -
华为云开发者AI素养ClassRoom·第六期2026/09/08 周二 19:00-20:00
樊渊-2026华为软件挑战赛冠军
高手来了:看软挑高手解析二维排样问题—从工业难题到算法突破
回顾中
热门标签