• [优秀博文] 技术创新+开放共赢 华为云GaussDB加速企业数字化转型
    文/陶然云、AI、5G等技术驱动,数据库行业迎来新的需求,云数据库也在不断演进升级。依托华为云与华为云Stack,通过全栈软硬件优化,华为云GaussDB进行了进阶与革新,以统一的架构,支持关系型与非关系型的数据库引擎。近日,在第十二届中国数据库技术大会上,笔者有幸采访到了华为云数据库CTO庄乾锋,庄老师向我们详细解读了GaussDB如何从产品架构革新,做到支持全场景全业务,并从解决方案与案例的维度分享了华为云数据库的优秀实践。华为云数据库CTO 庄乾锋华为云GaussDB打造全场景数据库云服务如今,数字化转型已从“以资源为中心”转换成“以应用为中心”,数字化转型进入新阶段。华为云GaussDB紧随时代发展潮流,紧密结合客户业务场景,不断进行自主创新,积极打造极致性能、高可用的数据库服务。 据庄乾锋介绍,华为云GaussDB数据库在2020年升级为全场景云服务以来,取得了一系列的突出进展: 首先,华为云在今年4月份的华为开发者大会上正式发布了GaussDB新品,主打金融政企核心业务场景,是能满足最严苛金融级需求的分布式数据库。 庄老师进一步表示,今年的新版本具备应对海量并发事务处理与复杂查询混合负载的能力,通过技术与全并行架构创新,性能大幅领先对手,并具备超过1000+节点的弹性扩展能力。 同时我们还推出全球首款纯软全密态技术,保障数据传输、计算、存储全链路的安全。并且通过将AI技术植入到数据库内核的架构和算法中,让数据库管理更加智能与高效。 不仅如此,华为云并没有停止前进的步伐。据介绍,在8月份,我们又重磅推出了两个内核新特性:Ustore存储引擎和基于Paxos协议的DCF高可用组件。 Ustore存储引擎是GaussDB内核新增的一种存储模式,这种数据存储能带来更高性能、更高效率,空间利用更充分,整体系统运行更加平稳,适应更多业务场景和工作负载。 而DCF组件则使得GaussDB在保证数据一致性的同时,在高可用方面可进一步得到增强,用户不仅可以免去系统脑裂的风险,还可以提升可用性。 其次,在9月份的2021华为全联接大会上,发布了GaussDB(for MySQL)2.0全新版本及三大核心技术,在原有基础上深度整合了华为云计算全栈的独特能力,在性能、可用性、扩展性等方面都进行了创新,实现了云栈垂直集成力量的最大化,让算力更快更猛,也能更好解决客户海量数据负载场景难点,助力企业客户业务创新。 最后,今年我们在公有云上也上线了数据库和应用迁移工具UGO,这是一款专注于传统数据库的结构迁移与语法转换的利器。未来我们还将在五大技术方向上持续创新,包括云原生多主、基于Memory Pool的HTAP、云原生Serverless、AI Native、全密态。打造一个有技术、更懂客户的数据库,与客户一起深耕数字化转型。 华为云GaussDB携手伙伴共建数据库生态 华为一直坚持合作开放共赢的生态理念。一个能使能客户成功的商业产品,不仅产品要做好,还需要一个成熟健康的生态。 据庄老师介绍,华为云GaussDB积极拥抱并完全兼容和支持业界主流的关系型数据库生态,如MySQL、PostgreSQL及非关系型数据库MongoDB、Redis等生态,另一方面华为公司2020年6月30日宣布开源的openGauss也是开放的生态。 华为云GaussDB对外开源,做到架构开放、代码开放、技术开放和社区开放,不会让客户从封闭的数据库走向另外一个封闭的数据库, openGauss这种方式,能让更多的“同道中人”一起来解决缺陷,一起来理解这个架构,从而维护起来更加方便。 在人才生态方面,华为致力于培养数据库人才,发起高校人才培养计划,计划3年投入5亿人民币,通过智能基座、教育部新工科项目,持续与高校联合开课,截止目前已经投入2亿多,有80+所合作高校,每年覆盖23000多名学生。未来一年计划覆盖200所高校,8万学生。 如今,GaussDB已经广泛应用在1500+政企大客户,涵盖金融、税务、医保、能源、交通、电信运营商、互联网、电商、物流等行业。 在对数据库要求最为苛刻的金融行业,6大国有大型银行中有4家银行已经选择了GaussDB,包括工行,农行,建行,邮储,以及多家股份制银行和保险证券机构。 在财政、税务、医保、自然资源等泛政府行业,GaussDB已和22+省级,100+市级单位开展合作,支持效率提升更好服务社会。 根据国际数据公司(IDC)最新发布了《2020年下半年中国关系型数据库软件市场数据跟踪报告》。报告显示,华为云数据库凭借GaussDB以9.8%的市场份额,占据本地部署市场国产数据库份额第一,同时公有云市场数据库份额增速第一。 面向未来,华为坚持做持续创新的数据库,数据库的持续创新离不开产学研的通力合作,一方面,与合作伙伴、高校以及开发者共建开源生态,鼓励有能力的合作伙伴发展基于openGauss的自有品牌数据库产品,为上层应用提供更多数据库选择,和业界共同繁荣数据库产业生态。 另一方面,华为也基于openGauss的生态,增强分布式内核能力,发布GaussDB商业版本,通过华为云和华为云Stack,满足金融政企客户、华为消费者云、流程IT以及运营商业务对分布式数据库的高性能、高可靠、高安全的需求。目标是打造世界级的国产数据库,为客户提供更优秀、更有竞争力的产品。
  • [其他] 万人逐鹿、十强争霸!华为云GaussDB数据库两大重量级赛事圆满落幕
    9月底,伴随着一场线上作品答辩形式总决赛的结束,历经几个月的2021年第三届华为云GaussDB数据库挑战赛终于在如火如荼的进行中落下了帷幕。同时,华为云GaussDB参与的由教育部与华为云数据库联合命题的第七届“互联网+”大赛产业命题赛道在10月份也终于迎来了终章。至此,华为云数据库本年度两场重要大赛画上了圆满的句号。万人角逐,最强10队突出重围获终极大奖2021年第三届华为云GaussDB数据库挑战赛以GaussDB分布式数据库相关特性为重点课题,由华为云数据库和Gauss松鼠会联合承办。华为云GaussDB数据库挑战赛自举办以来,始终秉承着“综合科研教学成果及商业需求,探索数据库领域技术问题的可行性,为需求方和开发者提供联接的桥梁”的宗旨,面向全社会开放,竭力搭建一个技术交流、人才培养、机遇共创的数据库开发者平台和生态,至今已成功举办了三届。作为数据库领域的重量级赛事,比赛的报名预热阶段就吸引了无数的行业人士,从个人开发者到企业团队都跃跃欲试。整个比赛过程中,11860位选手热情参与,组成1123个参赛团队披荆斩棘,经过初赛的紧张PK,1036支团队晋级复赛,在更为激烈的较量中,最终10支团队在这场激烈的角逐中脱颖而出,斩获终极大奖,共同瓜分20万超“壕”华奖品池。2021年第三届华为云GaussDB数据库挑战赛获奖榜单本届比赛的规模也在前两届的基础上有了空前的扩大。2019年,第一届华为云数据库挑战赛由近千人组成400多支队伍展开竞争,提交了近6000次作品;2020年,第二届华为云数据库挑战赛在开发者和伙伴们的高涨呼声中再次启动,近3000人参与竞赛,涵括了250+高校、30+行业;今年的比赛参赛人数上万,组成的团队上千,提交作品1500多次。这足以证明这场比赛在数据库领域中的影响力正在快速扩大。开发者作为创新技术的主力,是企业发展的源动力,因此,数据库人才的培养和生态建设,是华为一直以来都很重视的事情。华为云GaussDB数据库挑战赛举办三届以来始终坚守初心,与行业精英和数据库爱好者共同探索数据库领域的创新技术与工程实现。在这场呼声高涨的比赛中,这些团队无一不将自己内心对大赛赛题的层层推敲和专业能力的日夜沉淀都用键盘表达在了一串串的代码中,传达给屏幕前的我们,展现他们基于GaussDB数据库内核特性开发的能力,让评委们高赞十强团队选手的实力,作品不仅满足了赛题要求的基本功能,同时还实现了代码模块设计合理,性能最优化,内存资源占用尽量最小化。强强联合,联手教育部首次共创全新赛制10月中旬,由教育部牵头主办的第七届中国国际“互联网+”大学生创新创业大赛落下帷幕,至此,教育部联合华为云数据库共创的全新赛事——第七届“互联网+”大赛产业命题赛道·华为云GaussDB命题比赛也迎来了终结的篇章。本届大赛的产业命题赛道,是七届大赛以来的首创之举,目的是为了推进赛事组织的线上线下融合,推进高校创新创业教育与破解产业实际技术难题相结合,真正落实大赛“以赛促教,以赛促学,以赛促创”的重要任务。本次教育部联合华为云数据库以实际场景出发,以产业为主体,共创这样的全新赛道,为比赛的举办注入了全新的活力,开放、灵活的竞赛空间为这些朝气蓬勃的参赛者们提供了更多的机遇。作为本届大赛产业赛道的重要命题之一,华为云GaussDB命题深度融合“产、学、研”的技术创新体系,以此次教育部发起的互联网+大赛为载体,加强与高校、初创企业的创新合作,通过给定式命题“基于GaussDB(for MySQL)数据库实现高性能、高扩展性的bufferpool(缓冲池)”倡导参赛者基于企业实际业务场景思考并解决数据库领域技术问题,提高参赛者对数据库的理解、掌握与实际场景应用能力,从而促进数据库专业人才培养和产业升级。此次华为云数据库与教育部强力的联合共创,一方面丰富了国家、高校和企业对数据库人才培养的渠道和方式,能够有效提高人才培养的质量,另一方面通过企业和高校的紧密联动合作来提升开发者的实际业务场景应用能力和创新能力,有助于数据库人才和生态的双重建设。强力后援,专家坐镇为参赛者们保驾护航不管是第三届华为云GaussDB数据库挑战赛还是强强联合下的 “互联网+”大赛产业命题赛道,为了让参赛者们发挥出最好的水平,华为云数据库大赛组都做足了准备,提前向参赛者们提供了相关的学习资料,以确保有充分的准备应对知识闯关。不仅如此,大赛组还成立了由五位华为云数据库高级技术专家组成的权威专家团,全程为参赛者们保驾护航。从比赛开始,专家团就在为各位参赛者随时答疑解惑,从交流群疑难的答复,到日常的技术交流,都为选手们的参赛提供了充分的知识储备。为了让参赛者更好地了解赛题设计思路和命题方向,大赛组还精心准备了命题攻略和线上技术直播解读,华为云数据库资深架构师苏斌在直播间详细解读了GaussDB命题攻略,通过剖析数据库关键技术和赛题考点,助力选手们在比赛中稳操胜券。大赛组权威专家团成员近年来,国家的数字化进程不断加快,企业快速适应数字化的发展模式已经成为必然趋势,在这背后,是企业大量的业务需求对于行业新技术的高要求,技术的革新则是第一生产力,其核心开发者便成为其中重要一环。多年来,华为一直致力于数据库人才的培养,为开发者提供技术交流和机遇共创的舞台,携手更多伙伴共建合作、开放、共赢的生态。虽然目前两大赛事已经画上圆满的句号,不过接下来十一月份即将启动的华为云GaussDB海外亚太区域赛将会更加精彩,让我们拭目以待! 华为云数据库双十一优惠专场盛大来袭!新用户购买云数据库MySQL、PostgreSQL、DDS只需11.11元/年!4.5折超低折扣、7200元上云大礼包、消费满赠华为手机等豪礼享不停!活动详情→:cid:link_0
  • [优秀博文] 海量数据分析更快、更稳、更准!GaussDB(for MySQL) HTAP只读分析特性详解
    1      引言HTAP(Hybrid Transactional/Analytical Processing)这个词相信大家最近经常会听到,它能够同时支撑在线事务处理(On-Line Transactional Processing, 简称OLTP) 和在线数据分析 (On-Line Analytical Processing, 简称 OLAP)。令人惊喜的是,ClickHouse 作为近年来炙手可热的大数据分析系统可以通过 MaterializeMySQL 引擎挂载为 MySQL 的从库,作为 MySQL 的 "协处理器" 面向 OLAP 场景提供高效数据分析能力,这对解决异构数据库之间数据共享问题提供了新的途径。我们可以充分发挥 ClickHouse 的分析性能,结合 TP 类引擎如 MySQL 等提供 HTAP 能力。然而实际应用场景中 ClickHouse 仍然面临一些挑战,因此 GaussDB(for MySQL)的HTAP只读分析应运而生,除了拥有 ClickHouse 本身的极致性能外,GaussDB(for MySQL)的HTAP只读分析在 MaterilizeMySQL引擎的性能和稳定性等方面具有更优秀的表现,为提供更快更准的数据分析保驾护航。2      背景大数据时代的到来,数据量急剧增长的同时用户结构也越来越多样化,这些用户处理数据时发现,仅仅是创建一个可视化报表需要经过数据的抽取 (Extract), 转换 (Transform) 和装载 (Load), 整个周期可能长达数日甚至数周。事实上,ETL 模式的优点在于能够结合数据湖等处理多源数据,低成本处理海量数据且生态较完善,当然缺点也十分明显,传统的数据仓库和数据湖等无法支持大量实时并发的更新,数据分析时效性较低。除此之外,ETL 模式应对变化的能力也相对较弱,如上游数据源发生变化(例如表结构的变化等),整个数据链的处理过程都需要做相应的修改,增加了数据维护的难度。如何追求实时分析呢?答案是 HTAP。HTAP 可以支持大量并发的更新且数据同步时延通常在在秒级或毫秒级,有效避免传统解决方案中数据抽取,转换和装载等繁琐步骤,极大提升数据处理的时效性。3     极致性能-ClickHouseClickHouseClickHouse 是 Yandex 公司开源的面向 OLAP 的分布式列式数据库,具有实时查询、完备的DBMS、高效数据压缩压缩,支持批量更新及高可用等特性。此外,ClickHouse 拥有非常完善的SQL支持以及开箱即用等许多特点。在官方公布的基准测试对比中,ClickHouse 遥遥领先对手。Row Store & Column StoreMySQL 存储采用的 Row Store,表中数据按照 Row 为逻辑存储单元在存储介质中连续存储。这种存储方式适合随机的增删改查操作,对于按行查询较为友好。但如果选择查询的目标只涉及一行中少数几个属性,Row 存储方式也不得不将所有行全部遍历再筛选出目标属性,当数据表很宽(表的属性很多)时,查询效率通常较低。尽管索引等优化方案在 OLTP 应用场景中能够提升一定效率,但是在面对海量数据背景的 OLAP 场景仍然显得有些力不从心。ClickHouse 则采用的是 Column Store,表中数据按照 Column 为逻辑存储单元在存储介质中连续存储。这种存储方式适合采用 SIMD (Single Instruction Multiple Data) 并发处理数据,恰恰弥补了 Row Store 存储方式的缺陷,尤其在大宽表(属性很多)的时候,查询效率明显提升。此外,列存方式相邻数据类型相同,因此天然适合数据压缩,从而达到极致的数据压缩比。Performance下表是 Yandex 公司官方公布的性能测试数据,数据集 100 million,从上至下的三条数据分别表示:Cold Cache,Second Round,Third Round 的查询响应时间,可以看出 ClickHouse 的性能遥遥领先各大数据库引擎,相比于MySQL而言,性能甚至高达600多倍。注:以下实验数据均为单节点:2 * Intel (R) Xeon (R) CPU E5-2650 v2 @ 2.60GHz; 128 GiB RAM; md RAID-5 on 8 6TB SATA HDD; ext4.4    巨人肩膀上的 GaussDB(for MySQL) HTAP只读分析尽管 ClickHouse 拥有如此极致的性能,但实践生产过程中仍然面临一些困境。比如存在数据类型不支持,全量复制性能问题等方面的挑战。此外也有一些与引擎本身设计有关的性能问题:比如 FINAL 去重导致的查询性能问题等,给用户使用过程带来一些不好的体验。全量并行复制MaterializeMySQL 引擎通过消费 BinLog 的方式来订阅 MySQL 数据。数据同步过程分为三个步骤,首先是检验源端 MySQL 参数是否符合规范,然后是全量和增量复制阶段。ClickHouse 数据同步的全量复制过程是单线程的,在数据量较大时复制时延较高。GaussDB(for MySQL) HTAP只读分析对全量复制进行了并行化处理,优化后的复制性能平均提升 8-10 倍,对实际生产实践是十分有意义的。MVCC & SnapshotMaterializeMySQL 引擎在 DDL 转化过程中默认增加了2个隐藏字段:_sign (-1删除, 1插入/更新) 和 _version (数据版本)。下方是同一张表在 MySQL 和 ClickHouse 里的 DDL:Create Table: CREATE TABLE `runoob_tbl` ( `runoob_id` int unsigned NOT NULL AUTO_INCREMENT, PRIMARY KEY (`runoob_id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 --------------------------------------------------------------- ATTACH TABLE _ UUID '14dbff59-930e-4aa8-9f20-ccfddaf78077' ( `runoob_id` UInt32, `_sign` Int8 MATERIALIZED 1, /// _sign 字段 `_version` UInt64 MATERIALIZED 1 /// _version 字段 )MaterializeMySQL 引擎当前不提供 MySQL 数据的事务一致性视图,数据行以批量插入的方式同步到 ClickHouse 中,引擎底层使用的是 ReplacingMergeTree。如果数据发生了修改,获取最新的数据时需要指定 FINAL(类似于 GROUP BY)去重,并使用过滤器隐藏已删除的行。然而当数据规模很大时,FINAL 操作的性能往往不太理想。为了感知事务,GaussDB(for MySQL) HTAP只读分析实现了事务一致性并提供四种隔离级别,用户可以根据具体使用场景选择不同的隔离级别。此外,GaussDB(for MySQL) HTAP只读分析还提供了快照功能,优化 FINAL 带来的查询性能问题。read_uncommitted: 不提供 MVCC 支持,可能会引入脏读 read_committed: 提供 MVCC 支持(包括SubQuery),读最新已 commit 的数据 query_snapshot: 规避 SELECT + FINAL 查询中的 Merge 开销,直接查询快照 query_raw: 不做任何优化,返回所有数据(包括已删除和更新的不同版本)FINAL 性能优化前面提到 MaterializeMySQL 底层使用的是 ReplacingMergeTree,该引擎后台会按照一定规则执行 Merge 操作,用户想要获得最新数据则必须通过 FINAL 操作去重。除了采用 MVCC + Snapshot 机制保障查询性能外,GaussDB(for MySQL) HTAP只读分析从索引以及过滤策略等方面对 ReplacingMergeTree 引擎本身的 FINAL 操作进行了优化,即使不依赖 MVCC + Snapshot 也能提供不错的查询性能。5    GaussDB(for MySQL) HTAP只读分析兼容性及稳定性类型支持增强MySQL 和 ClickHouse 的基本数据类型之间都有对应的映射关系(见下表),值得一提的是 ClickHouse 将不支持的 MySQL 数据类型都转换为 String 类型存储。MySQL 不支持的 ClickHouse 类型也都被转换为 MYSQL_TYPE_STRING 类型。从下表中不难看出,ClickHouse 仍有一部分数据类型还未支持,而这部分数据类型在实际应用场景中是有可能出现的,因此 GaussDB(for MySQL) HTAP只读分析针对常用的数据类型例如 BIT 和 TIME 以及 YEAR 等做了适配,解决部分用户的刚要需求。Unique Key 同步支持MaterializeMySQL 引擎当前仅支持含有 Primary Key 的表同步,现实生产过程中是可能存在一些表格没有主键,但却含有 Unique Key 的,因此有必要支持这种表的数据同步。GaussDB(for MySQL) HTAP只读分析对仅含有 Unique Key (NOT NULL) 的表单独处理,使用 Unique Key 进行分区。优雅的复制中断重连实际应用过程中,全量数据复制的数据规模通常较大,同步时间较长,复制中断(网络,MySQL服务端宕机等)的情况是有可能发生的,ClickHouse 遇到上述情况时选择终止当前库的同步并返回错误。为了提升数据同步的稳定性,GaussDB(for MySQL) HTAP只读分析针对 MaterializeMySQL 引擎设计了重连,当中断发生时清理现场并在一定时间间隔内进行重连。与全量复制中断重连不同的是,增量复制中断后不需要清理现场,这与增量复制的方式有关,增量复制基于 BinLog Event,已经增量同步成功的数据不需要重新再来一次,重新建立连接后会根据全局 GTID 找到最新的同步点开始同步。更完备的异常处理机制GaussDB(for MySQL) HTAP只读分析不仅引入了 MVCC + Snapshot 以及并行复制等新特性,也为内核嵌入了更完备的异常处理机制。以全量并行复制为例,GaussDB(for MySQL) HTAP只读分析为所有并行线程维护独立的异常处理信息和堆栈。在新的异常处理机制下 GaussDB(for MySQL) HTAP只读分析更加稳定,更容易帮助用户发觉潜在问题的根源。6      GaussDB(for MySQL) HTAP只读分析个性化定制Show Slave Status 支持GaussDB(for MySQL) HTAP只读分析为用户提供了类似 MySQL 主备间的 SHOW SLAVE STATUS 指令,通过该指令可以直观地获取 MaterializeMySQL 引擎同步的数据库状态。这些状态信息除了反应同步线程是否异常之外,还涵盖了当前复制的 BinLog 位点,GITD 以及 Second Behind Master 等有价值的信息,为用户运维提供极大方便。ALTER Database 支持Alter Database 为 MaterializeMySQL 引擎用户提供了如下操作:ALTER DATABASE db MODIFY SETTING ... // 修改库级 settings ALTER DATABASE db ADD TABLE OVERRIDE tbl ... // ADD TABLE 且支持 Override ALTER DATABASE db MODIFY TABLE OVERRIDE tbl ... // MODIFY TABLE 且支持 Override ALTER DATABASE db DROP TABLE ...表定义重写 Override为了提供个性化的建库同步操作,GaussDB(for MySQL) HTAP只读分析为 MaterializeMySQL 引擎增加了 Over Write 功能,用户可以覆盖指定表的列并添加新列,添加索引并覆盖 PARTITION BY 或 SAMPLE BY 字段,使用示例如下:CREATE DATABASE test ENGINE=MaterializeMySQL('host:port', 'db', 'user', 'pw') TABLE OVERRIDE table1 ( _staged UInt8 MATERIALIZED 1 // 增加 MATERIALIZED 列,类型为 UInt8 ) PARTITION BY (...) // 覆盖分区字段适配 MySQL Partition数据分区是提升数据库使用性能的重要途径之一,ClickHouse 的分区策略是优先考虑日期,否则会选择类型长度较小的字段做哈希处理并进行分区。可以看到,ClickHouse 的分区策略和 MySQL 有一定区别,为了尽可能的支持 MySQL 的分区策略, GaussDB(for MySQL) HTAP只读分析目前支持 Range 分区,如果建表语句里没有 Range 分区,则使用 ClickHouse 默认的分区策略。黑/白名单过滤MaterializeMySQL 引擎建立的数据同步是库级的,意味着默认情况下会尝试将该库所有表全部复制,在某些实际应用场景中往往不需要复制全部的表,或者说有些表本身不适合复制(例如没有 Primary Key 或者 NOT NULL 的 Unique Key),GaussDB(for MySQL) HTAP只读分析不希望因为部分表无法复制导致整个库的复制失败,而是能够有选择的进行复制。GaussDB(for MySQL) HTAP只读分析针对这个问题设计了黑/白名单的过滤,允许用户自定义需要复制的表,这在生产应用是十分有意义的,用法参考如下:CREATE DATABASE test ENGINE = MaterializeMySQL('host:port', 'db', 'user', 'pw') SETTINGS black_list='T1,T2' // 将T1、T2加入黑名单7     场景示例前文分析了许多 GaussDB(for MySQL) HTAP只读分析的优点,那 GaussDB(for MySQL) HTAP只读分析到底能提供什么样的解决方案,为用户解决数据难题呢?上图以 MySQL + GaussDB(for MySQL) HTAP只读分析为例,用户既能得到 MySQL 完备的事务保障,又能享受到 GaussDB(for MySQL) HTAP只读分析的极致分析性能。用户从不同渠道获取数据并加载到 MySQL 引擎,GaussDB(for MySQL) HTAP只读分析作为 MySQL 的 “从库” 实时同步用户数据并提供高效的数据分析能力。高实效性与传统 ETL(T + 1)方案不同,GaussDB(for MySQL) HTAP只读分析搭配 MySQL 的 HTAP 解决方案能够提供秒级数据同步。数据压缩GaussDB(for MySQL) HTAP只读分析底层存储采取 Column Store,这种存储形式天然适合数据压缩,因此 GaussDB(for MySQL) HTAP只读分析拥有极致的数据压缩比,同等条件下能够为用户节约大量存储成本。历史备份相比在 MySQL 中备份,GaussDB(for MySQL) HTAP只读分析的存储成本更低,某些场景下更适合用于历史数据备份。存储分层为了进一步降低用户存储成本,GaussDB(for MySQL) HTAP只读分析提供 ESSD + EVS + OBS 分层存储方案,将热数据温数据和冷数据分别存在不同的存储介质中,进一步降低存储成本。8     小结HTAP 虽然不是一个非常新的概念,但随着现阶段数据业务越来越模糊(AP业务TP化 ,TP业务AP化),这个概念又重新回到了人们的视线。用户对数据处理和消费需求的不断迭代和升级,也为 HTAP 的发展创造了更多机会。GaussDB(for MySQL) HTAP只读分析站在 ClickHouse 极致性能的肩膀上针对实际生产遇到的问题做了一系列优化,获得更快更好的使用体验。相信未来 HTAP 的竞争会愈演愈烈,这对 GaussDB(for MySQL) HTAP只读分析来说既是挑战也是机会, GaussDB(for MySQL) HTAP只读分析会继续为用户提供海量数据的高效解决方案,助力企业数字化转型。更多产品了解,请戳https://www.huaweicloud.com/product/gaussdb_mysql.html 注:该功能目前在邀请测试阶段,想体验的小伙伴们欢迎评论区留言!
  • [热门活动] 【1024程序员节】学、练、考三部曲,带你一睹数据库芳华!
    !!!重要提示:本帖是副帖,参与活动请前往主帖,在主帖进行回复,副帖回复不参与活动评奖。主帖入口请戳文末链接或二维码↓↓↓1024程序员节欢迎来到数据库空间站活动时间:2021/10/20-2021/11/21活动主题:学、练、考三部曲,带你一睹数据库芳华!活动目的:本次活动为大家精心打造的数据库学、练、考三部曲,帮助大家快速了解华为云数据库、考取权威证书、实现技能提升。活动评奖(双重奖项哦):1. 参与活动中任何一个环节,均有机会获奖    学、练、考三个环节相互独立,每个环节都设置了对应奖项,因此,参与其中任何一个项目均有机会获奖。2. 获得打卡秘钥,抽取大礼包    参与活动且回复符合活动要求的用户,将会获得打卡秘钥,抽取大礼包。主帖链接:【星云闪耀1024<神奇空间站>】数据库空间站,学、练、考三部曲,带你一睹数据库芳华!主帖二维码【注意事项】1.获奖结果将在活动结束后7个工作日内进行公示,请报名和留言的伙伴关注社区内容,所有奖品将在活动结束后15个工作日内发放,有任何问题,请添加小助手微信18209232786。2.活动奖品颜色随机,且部分奖品数量有限发完将用等值奖品代替;另参与人数不能达到最低楼层,不开奖。3.活动参与需遵守《华为社区常规活动规则》;4.为保证活动的公平公正,华为云有权对恶意刷活动资源(“恶意”是指为获取资源而异常注册账号等破坏活动公平性的行为),利用资源从事违法违规行为的用户收回抽奖及奖励资格。5.本次活动一个实名认证账号只能对应一个获奖人,如同一账号填写多个不同获奖人,不予发放奖励;6.本活动最终解释权归华为云所有。
  • [数据库] 【第30课】云数据库 GaussDB(for MySQL)如何查看和优化慢SQL
    慢SQL产生的主要原因有SQL编写问题、锁等待、业务实例相互干扰对IO/CPU资源征用和服务器硬件等。在业务运行中,由于SQL编写导致的慢SQL的概率最大,故着重从SQL编写的优化入手,并结合具体案例进行说明。如何查看慢SQL1.   登录管理控制台。2.   单击管理控制台左上角的,选择区域和项目。3.   在页面左上角单击,选择“数据库 > 云数据库 GaussDB”。进入云数据库GaussDB控制台,在左侧导航栏选择“GaussDB(for MySQL)”。4.   在“实例管理”页面,选择目标实例,单击实例名称,进入“基本信息”页面。5.   在左侧导航树,单击“日志管理”。6.   选择“慢日志”页签,查看慢SQL语句的详细信息。慢日志功能支持查看指定执行语句类型或时间段的慢日志记录。如何进行慢SQL优化本部分从SQL编写角度介绍慢SQL可进行的优化。1.   字段类型转换导致不用索引,如字符串类型的不用引号,数字类型的用引号等,这有可能会用不到索引导致全表被扫描。2.   mysql不支持函数转换,所以字段前面不能加函数,否则将用不到索引。3.   不要在字段前面加减运算。4.   字符串比较长的SQL语句,可以考虑对一部分内容进行索引,从而减少索引文件大小,提高写入效率。5.   like %在前面用不到索引。6.   根据联合索引的第二个及以后的字段单独查询用不到索引。7.   不要使用select *。8.   排序请尽量使用升序。9.   or的查询尽量用union代替(Innodb)。10.   复合索引高选择性的字段排在前面。11.   order by/group by字段应该包括在索引当中,减少排序操作开销,效率会更高。慢SQL优化典型案例本部分以“mysql不支持函数转换,所以字段前面不能加函数,否则将用不到索引”优化点为例举例说明。原SQL语句:SELECT id,title,most_top,view_count,posttime FROM article where status=3 AND catalog_id in (select catalog_id from catalog where catalog_id=17 or parent_id=17) and DATEDIFF(NOW(),posttime)<=90 order by most_top desc,posttime desc limit 0,8 原因分析:通过explain可以看出来这个语句执行慢是因为ariticle表扫描了27298行,并进行了排序。优化步骤:1.   初步优化,对数据量进行限制。将原SQL语句修改为:SELECT id,title,most_top,view_count,posttime FROM article where status=3 AND catalog_id in (select catalog_id from catalog where catalog_id=17 or parent_id=17) and DATEDIFF(NOW(),posttime)<=90 order by most_top desc,posttime desc limit 0,8发现进行限制时间后并没有大幅度的提高。原因每次使用datediff运算导致不走索引即慢SQL优化点的第二条。2.   继续修改,修改为:SELECT id,title,most_top,view_count,posttime FROM article where status=3 AND catalog_id in (select catalog_id from catalog where catalog_id=17 or parent_id=17) and postime>='2017-09-05' order by most_top desc,posttime desc limit 0,8重新执行SQL后,SQL执行速度大幅提升。
  • [优秀博文] 华为云带你探秘Xtrabackup备份原理和常见问题分析
    本文来自华为云MySQL研发团队,主要分享了MySQL备份工具Xtrabackup的备份过程、华为云数据库团队对其做的优化改进,以及在使用中可能遇到的问题与解决方法。文章讨论的内容主要是针对华为云RDS for MySQL, 以及用户自建的社区版MySQL数据库,希望有助于大家理解和使用Xtrabackup,以后面对Xtrabackup问题也更加从容。一、Xtrabackup简介Xtrabackup是Percona团队开发的用于MySQL数据库物理热备份的开源备份工具,具有备份速度快、支持备份数据压缩、自动校验备份数据、支持流式输出、备份过程中几乎不影响业务等特点,是目前各个云厂商普遍使用的MySQL备份工具。当前Xtrabackup存在两个版本:Xtrabackup 2.4.x与8.0.x,分别用于备份MySQL 5.x与MySQL 8.0.x 版本。下面我们分别介绍 Xtrabackup如何备份MySQL社区版以及华为云上的Xtrabackup的备份原理。二、社区版MySQL的Xtrabackup备份Xtrabackup是为Percona MySQL设计的,同时也支持对官方社区版本MySQL进行备份,过程如下图所示:图1:Xtrabackup备份官方MySQL流程示意兼容性检查:Xtrabackup社区版本只支持 MyISAM , InnoDB , CSV , MRG_MYISAM 四种存储引擎的表,其他存储引擎的表不会备份;在这一步中,通过查询tables,若发现存在表的存储引擎不是上述四种引擎之一,会打印warning, 表明Xtrabackup不会备份该表。启动redo后台备份线程:启动redo后台备份线程,从备份实例的最近一次checkpoint LSN的位置开始备份所有增量的redo log,一直持续到备份任务结束。加载所有的innodb表空间:打开并扫描所有innodb表的数据文件,检查所有表空间的第一个页面,初始化所有表的内存结构。备份innodb表:遍历步骤3所构建的表的内存结构,备份每一个innodb表的数据文件,备份的过程中会检查每个页面的数据是否正确。加备份锁 FLUSH TABLES WITH READ LOCK (FTWRL):FTWRL锁是MySQL实例级的读锁,加锁过程复杂,且加锁之后,所有表的所有更新操作以及DDL都会堵塞。备份非innodb表:因为在步骤5我们已经对实例加了读锁,因此,此时备份非innodb表是安全的,此时一定没有写业务。记录binlog当前的GTID信息:请注意,此时我们仍持有全局读锁。这一步主要是方便我们使用该备份集快速地创建出备机。停止redo备份线程。释放锁资源,备份结束。需要注意的是,Xtrabackup 2.4.x与8.0.x在第7、8这两个步骤存在差异,这个差异有MySQL 8.0.x的原因,详情我们在下文介绍。三、华为云RDS for MySQL备份在备份社区版MySQL实例时,Xtrabackup会对实例加全局读锁(FTWRL),该锁对数据库的业务影响很大,严重时甚至会导致数据库“挂起”,这对客户来说是不可接受的。因此华为云MySQL团队对这个过程进行了优化,主要有两点:对MySQL 5.x以及0.x增加了备份锁:LOCK TABLES FOR BACKUP对MySQL 5.x新增了binlog锁:LOCK BINLOG FOR BACKUP优化之后,华为云Xtrabackup对MySQL的备份过程如下:图2 Xtrabackup备份华为云MySQL流程示意与FTWRL锁相比,备份锁 LOCK TABLES FOR BACKUP对客户实例影响很小,其加锁过程简单,加锁期间innodb表的DML操作不受影响,但是非innodb表的所有的更新操作以及DDL操作仍然是不允许的。备份完所有的表文件后,Xtrabackup需要获取binlog GTID信息。对于MySQL 5.x版本,Xtrabackup 2.4.x会执行 LOCK BINLOG FOR BACKUP 操作,对binlog加锁,然后获取GTID信息。对于MySQL 8.0.x版本,华为云Xtrabackup 8.0.x沿用官方的一致性备份点查询方法。Xtrabackup查询log_status 时,MySQL服务器会分别对redo log, binlog等加轻量级锁,获取一致性备份点,这个过程是非常短暂的,对实例的运行几乎没有影响。MySQL 8.0.x的备份一致性点,会告诉我们一致性的redo log LSN以及binlog的GTID;查询完备份一致点后,Xtrabackup会备份最后一个binlog文件,用于恢复时仲裁事务是否需要回滚;最后,redo log备份线程任务会在其读取到的redo log的LSN大于查询到的备份一致性点的redo log LSN处停止。由于Xtrabackup 2.4.x与8.0.x在处理binlog时存在差异,恢复过程也存在差异,我们会在后续文章中详细阐述。四、常见问题与解决方法华为云已经使用Xtrabackup为公司几乎所有的MySQL实例提供备份服务,在使用过程中,我们积极与社区保持联系,向Percona社区报告使用过程中的一些问题,帮助Xtrabackup向更好的方向演进。此外,对于发现的一些致命问题,若社区未能及时修复,华为云数据库团队会进行及时修复以保证备份数据的正确性。下面是我们总结在使用Xtrabackup备份过程各个阶段可能遇到的问题,分析其原因以及对应的解决方法,兼容性检查阶段问题现象:Xtrabackup启动后,立即长时间“挂起”,查看日志发现redo log备份线程也没有启动。原因:Xtrabackup兼容性检查时无法获取MDL锁。Xtrabackup兼容性检查是通过查询 imformation_schema.tables这个插件表实现:“SELECT CONCAT(table_schema, '/', table_name), engine FROM information_schema.tables WHERE engine NOT IN ('MyISAM', 'InnoDB', 'CSV', 'MRG_MYISAM') AND table_schema NOT IN ('performance_schema', 'information_schema', 'mysql')” 在查询每张表时,需要获取对应表的MDL锁,如果此时MySQL实例中存在长时间的DML或者DDL 语句,或者更严重者出现了MDL死锁,上面的查询会一直堵塞在等待MDL锁阶段,此时 Xtrabackup会长时间“挂起”。解决办法:若等待锁的原因只是因为其他SQL语句的堵塞,等待其他SQL执行完成即可;若是发生了死锁,此时需要分析出死锁原因,将死锁解除;华为云RDS for MySQL提供了MDL锁视图功能,可以很好地帮助用户分析业务的MDL死锁。redo log备份阶段问题现象1:redo log回卷,备份失败,Xtrabackup报如下错误信息:“xtrabackup: error:it looks like InnoDB log has wrapped around before xtrabackup could process all records due to either log copying being too slow, or log files being too small.\n");”原因:在备份的过程中,如果主机业务负载很高,导致redo log写入的速度很快,会发生Xtrabackup的redo log备份线程的备份速度小于redo log的写入速度,因为MySQL redo log文件写入使用了 round-robin的方式,使得新写入的日志覆盖了之前写入却还未备份的日志,因此备份失败。解决办法:推荐在业务低峰期进行备份,或者增大redo log的文件大小。 问题现象2:备份因DDL操作失败,错误信息如下:“An optimized (without redo logging) DDLoperation has been performed. All modified pages may not have been flushed to the disk yet. PXB will not be able take a consistent backup. Retry the backup operation”原因: 备份过程中MySQL实例发生了创建索引的DDL操作,因为创建索引不会写redo,若继续备份会引起数据不一致问题,所以Xtrabackup在这种场景中备份失败是预期行为。解决办法:不要在备份过程中创建索引,如果确实需要,建议在建表语句中直接带上索引,或者使用 lock-ddl 参数进行备份(阻塞实例上新的DDL操作)。 问题现象3:undo truncate导致备份失败,Xtrabackup错误信息如下:“An undo ddl truncation (could be automatic) operation has been performed.” 原因:在Xtrabackup备份期间,如果MySQL实例发生undo truncate时,有可能会出现写入新 undo文件(space id不同)的undo日志丢失导致恢复出来的数据存在问题。官方在Xtrabackup 8.0.14版本(基于MySQL 8.0.21)对该问题进行了修复,修复方法是redo备份线程,解析redo log时若发现该操作是undo log的truncate操作,则会备份失败。遗憾的是,该修复并没有完全解决问题,在以下两种场景中,社区版本的Xtrabackup仍可能会发生恢复出来的数据存在不一致的现象:MySQL版本低于MySQL 8.0.21;用户在备份过程中,自己创建了新的undo tablespace。解决办法:在备份期间关闭undo tablespace的truncate操作,并禁止用户创建undo tablespace, 能够有效地防止备份数据恢复出来不一致的问题;另外华为云Xtrabackup对这个问题进行了进一步的修复,可以有效地防止此类现象发生。 加载表空间阶段问题现象1:Xtrabackup报错:Too many open files原因:操作系统允许同时打开的文件数量是有限的,Xtrabackup在load tablespace阶段会同时打开所有的表文件,如果Xtrabackup打开的表的个数超过了该限制,则会备份失败。解决办法:调大操作系统,允许同时打开最大文件数的配置,或者使用 lock-ddl 参数(阻塞实例上新的DDL操作)。 问题现象2:rename table导致备份失败,错误信息如下:“Trying to add tablespace 'xxxx' with id xxx to the tablespace memory cache, but tablespace xxxx already exists in the cache!;”原因:在Xtrabackup打开表空间的全过程是没有加锁的,如果发生了rename table有概率会发生重复加载相同的表空间,此时Xtrabackup会检测到重复的tablespace id,因此备份失败。 解决办法:一般来说,加载表空间是一个很快的操作,rename table并不是一个很频繁的操作,这种情况重试即可(Percona Xtrabackup 2.4.x仅支持单线程加载表空间,华为云Xtrabackup支持多线程加载表空间)。 备份innodb表阶段问题现象:innodb表数据文件损坏,备份失败,错误信息如下:“xtrabackup: Database page corruption detected at page xxxx, retrying.”原因:Xtrabackup在备份innodb表数据文件时,会检查每个页面的checksum,如果发现checksum不对,则备份失败,这时说明MySQL实例的数据已经发生了损坏(例如磁盘静默错误)。解决办法:需要通过恢复前一次的备份数据或者其他的办法将数据进行修复之后,备份才能成功,在后续的文章中,我们也会详细介绍数据修复办法。五、结语本文主要对比介绍了Xtrabackup备份原理,备份社区版MySQL以及华为云对其的改进,并分享了Xtrabackup常见问题的排查与解决,后续我们也会为大家带来更深入的分析,更实用的使用技巧,希望对大家理解和使用Xtrabackup有帮助。我们也将持续为客户提供更好的数据库服务,并时刻守护客户的数据安全。 最后,告诉大家一个好消息,云数据库MySQL包年19.9元起,助力企业无忧上云,欢迎大家前来体验>>https://activity.huaweicloud.com/dbs_Promotion/index.html
  • [版主精选] 华为云发布GaussDB(for MySQL)2.0全新版本,助力企业业务创新
    9月23日,在华为全联接2021主会场,华为高级副总裁、华为云CEO、消费者云服务总裁张平安发表“深耕数字化,一切皆服务”主题演讲,并发布了GaussDB(for MySQL)2.0全新版本及分享了GaussDB数据库三大核心技术。张平安表示:“数据库是企业核心交易业务与关键数据处理的基石,华为坚持战略投入GaussDB系列数据库10多年,结合云原生和AI技术打造了高性能、高可用、高扩展等极致能力。本次发布的华为云GaussDB(for MySQL)2.0全新版本通过整合华为云计算堆栈能力,实现了云栈垂直集成力量的最大化,同时推出的GaussDB三大核心技术,进一步推动企业数字化升级。”华为高级副总裁、华为云CEO、消费者云服务总裁张平安发表演讲华为云GaussDB(for MySQL)2.0全新升级作为华为云推出的新一代高性能企业级分布式数据库,GaussDB(for MySQL)基于存算分离架构,完全兼容MySQL,最高支持128TB的海量存储,可实现超百万级QPS吞吐,支持跨AZ部署,数据0丢失。既拥有商业数据库的性能和可靠性,又具备开源数据库的灵活性。此次推出的GaussDB(for MySQL)2.0全新版本,在原有基础上深度整合了华为云计算堆栈的独特能力,在性能、可用性、扩展性等方面都进行了创新,如通过并行查询PQ技术和算子下推NDP技术提升查询场景的性能,实现了云栈垂直集成力量的最大化,让算力更快更猛,也更好解决客户海量数据负载场景难点,助力企业客户业务创新。华为云GaussDB三大核心技术揭秘 华为在数据库领域深耕多年,具有深厚的数据库技术积累,GaussDB目前已在1500+金融政企与泛互联网标杆大客户规模商用。GaussDB历经金融客户严苛场景考验,不断进行技术创新和贴合业务场景,提供了极致的数据库服务能力。在千行百业的锤炼和自主创新中,华为云GaussDB推出了以下三大技术升级:复杂查询场景优化。通过算子下推技术,实现大规模查询场景中,将90%的逻辑计算在分布式存储层完成,大幅度降低了网络I/O延迟,充分释放了云计算算力,在TPC-H测试中,相比社区版本性能最高提升了34倍。秒级伸缩,应用0感知。支持Serverless根据数据容量自动伸缩,存储自动打散负载压力,无需分库分表。云原生多主架构。通过分布式全并行架构提供极致的吞吐量性能,支持多节点写入,可以轻松应对海量高并发数据处理,提升高可用能力。华为云GaussDB的创新不是简单的单点技术创新,而是与客户一起积极探索,共同设计更贴合用户场景的数据底座服务能力,真正实现技术与业务更好融合,做到升级有道。面向未来,华为云GaussDB希望能与企业共成长,一起拥抱云化,共创数字化发展成果。更多精彩内容,欢迎点击链接回顾:https://live.huawei.com/huaweiconnect/meeting/cn/9483.html
  • [优秀博文] GaussDB(for MySQL)如何快速创建索引?华为云数据库资深架构师为您揭秘
    导读:云服务环境下,如何解决客户基于大量数据创建索引的性能问题,成为云服务厂商的一个挑战。华为云GaussDB(for MySQL)通过引入并行创建索引技术,很好地解决了批量索引创建和临时添加索引等性能瓶颈问题,帮助用户更快建立好索引。想要进一步了解快速创建索引的秘诀,请不要错过本文。关于MySQL索引       我们都知道,数据库使用索引技术加快数据的查询。MySQL数据库也支持若干种索引结构提高查询的性能(参见MySQL文档:https://dev.mysql.com/doc/refman/8.0/en/create-index.html),其中使用最广泛的是B+tree索引,因为B+tree索引在查询和修改的性能之间有很好的平衡,同时其存储和维护的代价也是比较优的。       MySQL的表本身由聚簇索引(必须是B+tree索引)表示,再加上若干个二级索引,包括B+tree索引,共同组成一个MySQL的独立表,可以说MySQL的表是由一组索引共同组成的。我们都知道索引是一把双刃剑,充分的索引可以更好地提升可以适配的查询的性能,但是需要维护这些索引使得其和数据同步,所以在数据修改操作阶段,更多的索引也会带来更高的开销。索引创建与否的权衡通常是动态的,用户不一定能做到在表定义之初就知道需要建立哪些索引,需要随着业务的发展变化而调整索引,这也带来了动态索引创建的一些问题。 MySQL的索引创建逻辑       我们先看一下MySQL索引创建的逻辑。首先,MySQL索引的创建可以使用两种不同的DDL(Data Definition Language: 数据定义语言)算法来实现。第一种是COPY算法,它非常低效,就是在两个表之间进行数据拷贝,来完成表结构相关的修改,尤其是它要求加表锁,现在基本不使用了。第二种是INPLACE算法,该算法不要求加锁,因此很多DDL操作是不阻塞DML(Data Manipulation Language: 数据操纵语句)操作的,比如创建索引。该算法具体的实现在存储引擎层面完成,可以进行更多的优化。实际上DDL语句还有一种INSTANT算法,但是它无法支持创建索引操作,这里不展开介绍。       对于INPLACE算法,在5.7版本之前,是采用索引记录不断地向建好的空索引插入的方式。由于插入的数据的无序性,该方法导致了明显的性能问题和潜在的空间浪费。在5.7版本以后,MySQL优化了建索引步骤,将其改进为对已排序的索引记录进行自底向上批量插入并且紧凑拼装的创建方式,如果有多个索引要创建,会单独对每个索引执行相同的算法。新的算法会经历读取数据、排序数据和创建索引这几个主要步骤。       总体而言,创建索引这类DDL操作,会比普通的DML等操作要费时,而该类DDL耗时会导致用户在继续动态添加索引加速查询的时候,需要等待很长的时间,极大影响业务;而且用户的MySQL实例开启了Binlog复制,耗时的DDL操作容易引起备库的长时间落后。MySQL的创建索引流程图云化场景下索引创建的问题       随着越来越多用户把数据托管在云服务上,以及用户数据量的不断增长,前述的动态添加索引导致的问题非常影响用户体验。同时客户的单表数据逐渐达到几TB甚至几十TB,客户对创建索引太慢所带来的性能问题的抱怨越来越多,尤其是创建索引周期如果太长,我们可能很难找到一段合适的业务低峰期来动态创建索引,避免业务的波动。因此,如何在云服务环境下,解决客户基于大量数据创建索引的性能问题,成为云服务厂商的一个挑战。       在云化场景下,还有一个主要场景对客户的体验非常重要。我们知道客户的业务要迁移上云,需要对数据进行大规模的迁移(华为云提供了数据复制服务DRS工具支持各类数据迁移场景),数据迁移比较高效的方式为:逻辑导出源端数据在目标端建表(注意,表不含二级索引)将源端导出的数据插入到目标端对目标端的表建立二级索引       如果涉及动态数据同步,相关步骤会更复杂一些,由于和该主题无关,这里不展开。以上步骤中,需要重点注意的是步骤2和4,在目标端创建表的时候先不创建二级索引。这个优化对性能影响很大,尤其是一个表有很多二级索引的场景。我们知道Btree索引的插入如果是有序的,对插入性能和结果的空间利用率是最好的,因为Btree索引的分裂会在插入区域的尾部产生,同时由于分裂算法的优化,分裂产生的页面填充率会比较高;相反地,如果是随机插入,尤其是并发地随机插入,很容易导致Btree索引在不同的节点进行分裂,并且分裂后的页面填充率都处于一个半满的状态,导致Btree最终的一个膨胀。 有了这个背景之后,我们就容易理解上面的问题,插入表数据的时候,我们屏蔽了二级索引,等所有数据都准备好了,再采用批量建立索引的方式创建二级索引,这对于二级索引创建效率是最高的。如果不这么做,每插入一条记录,就要去插入相应的二级索引,那么二级索引就是一个无序的随机插入,并发起来性能会变差很多。       虽然在数据同步准备好后,批量创建二级索引是一个有效的方案,但是如果数据量很大,这么创建二级索引还是非常耗时,导致客户在数据迁移完之后需要等待很长时间才能开展业务,这个等待周期可能是小时甚至天级别的。虽然可以考虑表级别的并发创建索引,但是这个方法也有明显的缺点:应用场景有限,要求有多表;以及表和表之间的并发其实不是一个最有效的并发形式,相互影响比较大。GaussDB(for MySQL)如何快速创建索引?       综上所述,在创建索引这个点上存在两个性能瓶颈点:一个是用户迁移数据之后的批量索引创建;第二个是用户临时需要添加一个二级索引。无论哪个点,我们都需要更快的建立好索引,提升用户的使用体验。       华为云GaussDB(for MySQL)引入了并行创建索引的技术,它改进了社区版MySQL创建索引只用单线程的问题,以此提高创建索引的效率,并一起解决了前述两个痛点。前面提到的社区版创建索引逻辑是单线程的,首先存在资源利用率不够饱满的问题;其次创建索引过程是CPU和IO开销交替进行的过程,在做一个操作的时候,即使不是资源竞争的操作也只有等待。多线程创建索引可以充分利用CPU和IO资源,同时有的线程在做CPU计算时,别的线程可以并发的做IO操作。       GaussDB(for MySQL)使用的并行创建索引,是一个全链路的并行技术。前面提到,创建索引包含了若干个阶段,我们的并行创建算法,对这里的每个阶段都做并行处理,从读取数据、排序、到创建索引,都是并行操作,每一步都由指定的N个线程并发处理。它的逻辑如下图所示:       GaussDB(for MySQL)尤其对数据的归并排序做了多种优化,使得我们常规的归并排序能够充分的并行,充分利用CPU、内存和IO的资源。在并行创建索引之后的合并步骤,也使用了一套简化的算法,正确处理各种索引结构的场景。支持的索引和场景       GaussDB(for MySQL)的并行创建索引功能,目前支持的索引为Btree二级索引。对于virtual index二级索引,将会在不久的将来提供全面的支持,而MySQL的spatial index和fulltext index不在该并行创建索引覆盖范围内。       特别要注意的是,主键索引的创建目前也是不支持并行的,因此如果一个并行创建索引的SQL语句包含创建主键索引,或者前面提及的spatial index与fulltext index,那么客户端将会收到一个告警,提示该操作不支持并行创建索引,同时该语句会采用单线程创建索引的方式执行完成。       从SQL语句的角度,如前所述,创建索引可以采用不同的算法,由于COPY算法(ALGORITHM=COPY)不是采用批量插入的方式,因此不会受益于该并行创建索引优化。而对于INPLACE算法,如果创建索引用的是非rebuild的方式,都可以受益于该优化;一旦需要使用rebuild的方式创建索引,因为涉及到主键索引的建立,将无法使用并行创建索引的算法。示例下面我们通过几个实例来了解一下如何使用并行创建索引算法加快创建速度,以及我们的条件约束是如何生效的。1. 我们使用sysbench的表,表内有1亿条数据2. 在该表的k字段建索引,采用社区默认单线程,耗时82s3. 通过设置innodb_rds_parallel_index_creation_threads = 4启用4个线程建索引,可以看到建索引耗时72s,速度提升3.79倍4. 假设我们要修改主键索引,虽然指定了多线程,但是会收到一个warning,实际上只能通过单线程建索引注意事项 首先对innodb_rds_parallel_index_creation_threads这个参数进行一下说明,它控制了系统中所有并行DDL可以使用的总线程数,取值范围是[1-128]。该参数取值为1表示使用原始的单线程创建索引,取值为N,表示接下来的DDL使用N个线程创建。如果一个DDL使用了100个线程在执行,那么另外一个也要使用并行的DDL且最多只能使用剩下的28个线程;而如果128个线程都被并行DDL语句占用了,新来的DDL只能走原始的单线程创建的逻辑。 虽然该并行创建索引加快了索引的创建速度,但是在具体使用场景下,还是需要有审慎的评估。我们知道在并行算法应用之后,该DDL对硬件资源的使用会尽可能的充分,这也意味着其它操作就得不到太多的资源了。因此,针对不同的场景需要具体地分析,它决定了我们如何创建索引。 对于迁移场景,由于这时候还没有任何业务接入,用户希望尽快完成所有索引的创建,因此可以尽量设置多线程数,比如我们是16核规格的实例,那么我们就可以把并行线程的数量指定为16,加速完成操作。 如果是用户业务运行阶段要创建索引,我们还是不希望DDL操作,对正在运行的业务如DML操作等有太多的影响。因此,这时候创建索引可以指定相对少一些的线程数量,比如2-4(或者根据CPU规格以及负载决定,同时不鼓励并发地执行多个DDL操作)。这样既能相对地加速创建索引的进程,也能保证DML的正常进行。         综上所述,GaussDB(for MySQL)支持了并行创建索引,通过缩短创建索引使用的时间,很好地解决了客户关切的两类问题,提升了客户的体验。但技术无止境,在创建索引领域,还有其它的问题需要我们优化解决,例如如何减少创建索引步骤对IO的影响等等。我们后续会针对这些点进行优化,给客户带来更多的惊喜。       目前,华为云GaussDB(for MySQL) 并行创建索引优化功能已上线,欢迎大家前往华为云官网体验:https://www.huaweicloud.com/product/gaussdb_mysql.html 附:华为云GaussDB(for MySQL)内核专家系列文章华为海外女科学家为您揭秘:GaussDB(for MySQL)云栈垂直集成的力量有多大?华为云数据库内核专家为您揭秘:GaussDB(for MySQL)并行查询有多快?
  • [问题求助] GaussDB 安装一周后无法启动
    can not get instance '/opt/gaussdb/data' process pid【配置文件信息】cat /opt/gaussdb/data/cfg/zengine.iniTEMP_BUFFER_SIZE = 1GDATA_BUFFER_SIZE = 2GSHARED_POOL_SIZE = 1GLOG_BUFFER_SIZE = 64MDBWR_PROCESSES = 8LOG_BUFFER_COUNT = 8SESSIONS = 1500LSNR_PORT = 1888LSNR_ADDR = 127.0.0.1INSTANCE_NAME = zenithENABLE_SYSDBA_LOGIN = TRUECONTROL_FILES = (/opt/gaussdb/data/data/cntl1, /opt/gaussdb/data/data/cntl2, /opt/gaussdb/data/data/cntl3)【截图信息】【日志信息】data/log下的run日志UTC+8 2021-09-13 21:28:39.061|ZENGINE|00000|3140|INFO>dbwr thread closedUTC+8 2021-09-13 21:28:39.063|ZENGINE|00000|3141|INFO>dbwr thread closedUTC+8 2021-09-13 21:28:39.203|ZENGINE|00000|3133|INFO>lgwr thread closedUTC+8 2021-09-13 21:28:39.205|ZENGINE|00000|18446743523953740858|INFO>begin to destory reserved session.UTC+8 2021-09-13 21:28:39.210|ZENGINE|00000|18446743523953740858|INFO>begin to destory user session.UTC+8 2021-09-13 21:28:39.212|ZENGINE|00000|18446743523953740858|INFO>begin to finalize kmc.UTC+8 2021-09-13 21:28:39.218|ZENGINE|00000|18446743523953740858|INFO>begin to destory sequence pool.UTC+8 2021-09-13 21:28:39.222|ZENGINE|00000|18446743523953740858|INFO>begin to free memory occupied by SGA.UTC+8 2021-09-13 21:28:39.222|ZENGINE|00000|18446743523953740858|INFO>begin to free configuration buffer.UTC+8 2021-09-13 21:28:39.224|ZENGINE|00000|18446743523953740858|INFO>finish to shutdown, mode abort, db lock trueUTC+8 2021-09-13 21:28:39.226|ZENGINE|00000|7233174016834407482|ERROR>failed to open kernelUTC+8 2021-09-13 21:28:39.228|ZENGINE|00000|3130|ERROR>Instance Startup Failed求救求救
  • [版主精选] 【墨天轮专访第四期】华为云GaussDB:发挥生态优势,培养应用型DBA
    导读:近期,受墨天轮平台邀请,华为云数据库业务负责人苏光牛先生接受了其策划的“国产数据库”话题专访,就一些与国产数据库相关的社会讨论度较高、网友较为关心的问题做了分享,阐释了华为云数据库的产品策略,并从数据库产品负责人的角度给出了一些更深层次的独到见解。华为云数据库业务负责人苏光牛负责华为云数据库业务的战略制定与发展,数据库云服务产品与解决方案研发、运营、运维和交付等。— 以下为采访全文 —1:介绍下贵公司的数据库产品及优势,以及主要的目标用户是谁?苏光牛:华为数据库GaussDB首先定位是云数据库,其次定位为分布式数据库,云和分布式的结合是数据库的未来。GaussDB首要的任务是解决华为的业务连续性需求,能不受任何约束地使用数据库,所以从一开始就思考如何完全的自主可控,从每一行代码、从生态,从电信的可靠、可用及性能等要求出发,再和云技术相结合,打造企业级分布式数据库。在当前的形势下,GaussDB上述定位更加符合金融、泛政府、电信、能源、交通、医疗、物流等重要行业的需求,真正能帮助客户实现数字化转型。GaussDB是一个产品系列,在整体架构设计上,体现了多模的设计理念。具体包括:关系型数据库:基于openGauss生态的分布式数据库GaussDB,是自主生态的分布式数据库基于MySQL生态的分布式数据库GaussDB(for MySQL),我们100%兼容MySQL,让更多的客户可以无缝迁移上来,同时这也是分布式数据库,不再是单机的主备的MySQL非关系型NoSQL数据库:基于文档的分布式数据库GaussDB(for Mongo),100%兼容Mongo的接口,解决了开源的协议风险,用3副本解决9副本的可靠性基于时序协议的分布式数据库GaussDB(for Influx),分布式方案解决了开源只有主备的容量问题基于宽表Cassandra的GaussDB(for Cassandra),解决了Java的GC抖动的严重问题,数据强一致基于KV接口的GaussDB(for Redis), 当前100%兼容Redis,未来可以兼容更多的KV协议,数据强一致,超大容量10TB+,解决了开源主备脱节等问题此外,还有一些重要的组件,如:数据迁移——DRS (Data Replication Service);应用结构的转换——UGO (Database and Application Migration UGO) (愚公移山);分布式数据库中间件——DDM (Distributed Database Middleware),中间件这一层完全自主开发,让整体具备分布式<分库分表>能力,满足需要MySQL生态但对可信要求不高的客户的诉求。华为云GaussDB全栈产品以及解决方案,目的是让客户:选型安心(自主生态,开源生态,NoSQL,分布式统一的架构,性能卓越)、迁移放心(从数据的在线迁移到应用的结构转换,让迁移的担忧不复存在)、生态无忧(无论基于开源的生态,还是对自主生态的要求,都能满足)。2: 贵司的数据库目前取得了哪些成绩?苏光牛:GaussDB汇聚全球资源,依托分布在全球7大区域的研究所、约2000+数据 库/数据仓库/大数据的高级内核引擎、算法、性能等专家与专业人才,持续战略投入10多年:市场份额:金融政企市场,GaussDB本地部署(即HCS的方案)取得国产数据库第一的市场份额(来源:2020下半年IDC中国关系型数据库软件市场数据跟踪报告);同时,全球DBMS市场份额进入了前十名(来源:Gartner Market Share Analysis: Database Management Systems, Worldwide, 2020)标杆客户:已在1500+金融政企与泛互联网标杆大客户取得规模商用,以金融业为例,GaussDB已经和工商银行、建设银行、招商银行、邮政储蓄银行、永安保险、众惠财产相互保险社、证券交易所等多家银行、保险与证券公司展开合作。学术研究:华为先后在SIGMOD、VLDB、ICDE三大顶级国际学术会议上发表数据库论文36篇。尤其在AI-Native方向,2021年新入选SIGMOD国际顶级会议的《Learned Cardinality Estimation for Similarity Queries》创新地提出了模型分割和数据分割解决方法来解决DNN训练难题。除此之外,GaussDB数据库每年举办数据库性能挑战大赛,设置实习生计划和优才招聘计划,提供华为和行业伙伴实习机会。从理论教学、动手实验、大赛历练、职业认证、人才招聘全流程支持,长期培养和输送GaussDB人才!高校生态:与教育部联合建设“智能基座”基地,GaussDB已与72所国内双一流高校建立合作关系,同时在教育部“新工科”项目的54所高校中开设GaussDB数据库课程。在高职、专科院校,通过实践实训培养面向社会的应用型人才。开课之外,华为数据库每年定期开展师资培训,联合多所顶尖高校教授出版GaussDB数据库教材、教辅,持续完善GaussDB数据库的人才培养体系!开发者生态:华为将GaussDB的核心能力贡献出来,形成openGauss的开源版本和openGauss的生态,当前有1700+开发者参与openGauss开源项目,20000+社区用户,来自全球74个国家506个城市的29万的下载量,10家厂商发行了基于openGauss开源内核的自主品牌商业数据库产品,民生银行、中国电信等43家头部企业加入社区。以华为云开发者社区为基础,提供39个GaussDB技术课程,发布和更新GaussDB初级、中级培训认证;和国内10+数据库以及开发者社区建立合作关系,积极支持和参与线上线下技术活动,和业界共同繁荣数据库社区,累计赋能15万以上开发者。合作伙伴生态:数据库产业的发展离不开上下游生态伙伴的支持,经过测试和认证,华为云GaussDB已和100+伙伴的产品形成联合解决方案,并推荐到华为云严选商城,共享市场机会,涵盖:a) 生态工具伙伴:迪思杰、英方、数见、航天壹进制、鼎甲等异构数据同步工具、数据库灾备工具b) 金融、政府等行业解决方案伙伴:例如神码融信、长亮科技等c) 咨询服务类伙伴:海量数据、云和恩墨等d) SaaS伙伴:金蝶、用友、甄云、泛微、致远互联等e) 基础设施伙伴:如麒麟OS和统信OS3: 贵司的数据库产品未来有什么规划,或者重点突破的方向苏光牛:未来,华为云数据库将在以下几个方面持续投入和布局:做好数据库生态:数据库要跟随华为云进入千行百业,离不开数据库生态的建设。除了构建openGauss自主可控的生态外,我们也积极拥抱并完全兼容业界主流的如关系型的MySQL、PostgreSQL及非关系型的Mongo、Redis、Cassandra和InfluxDB等生态。在伙伴生态建设上,认证多家ISV作为我们的伙伴,提供迁移、容灾等数据库上云解决方案,为更多的客户提供服务。促进联合创新:金融行业是对数据库稳定可靠、性能等各方面要求极为苛刻的典型行业,有上亿用户和高并发海量交易等丰富的应用场景,华为和工行等头部客户坚持长期联创,通过这些不可多得的严苛而丰富的场景和应用,帮助GaussDB数据库快速孵化提升能力,也帮助这些企业完成数字化的转型等任务。服务华为自身业务:华为GaussDB系列数据库已经规模承载了华为终端云服务和内部流程IT的业务,华为这2个业务有着苛刻的要求。GaussDB帮助了华为自身这种既有传统业务又有新型业务实现了数字化转型,这是一个非常好的范本。核心竞争力打造:多Region多活:支持全球化企业数据就近访问,全球多活容灾,数据多点写入;软硬协同:全面支持多样化算力,具备从算力到服务器、存储、操作系统、数据库的E2E研发能力,发挥数据库软硬协同、性能调优的独特优势;企业级分布式能力:交易型的数据容量从M到G,再到TB,几十TB,决定了分布式数据库是大势所趋,华为云数据库着力面向分布式场景打造极致的可靠性和扩展性;数据安全与可信:随着各行各业对数据安全和隐私保护的重视,GaussDB会通过全密态数据库为客户消除数据泄露的风险。AI-Native:上万台服务器,数据库数千个实例,100TB+的数据,海量节点规模下的数据的高效管理是必须面对的难题。华为致力于打造具备自感知,自恢复,自优化等能力的云数据库,实现高度自治,降低数据库运维成本4: 针对数据库行业,您认同“得DBA者得天下”这句话?苏光牛:本质上这句话的含义是:得生态者得天下。DBA是可以培养的,一个好的生态更容易培养出DBA,所以生态才是最重要的。当前的大环境形势,给了数据库及生态机会,我们要打造一个开放的、易学习易上手的生态,例如:openGauss,我们从2020年6月30日开始开源,从每一行代码开始来打造,同时尽可能兼容一个生态,这样就让大家更容易学习。目前国内有10家ISV已经基于openGauss打造了自己的数据库,我相信越来越多企业和个人会感受到openGauss在生态上的优势。5: 对于新手来说在学习GaussDB数据库方面有没有什么好的学习建议苏光牛:GaussDB推出了一系列学习资料,帮助大家从零开始学习和使用GaussDB, 主要包括:GaussDB的入门:注册华为云,进入华为云学院,在“学习路径”中找到“数据库学习路径“;同时,申请GaussDB实例进行调测,与实战相结合,熟悉云数据库方案设计与调优;GaussDB精品课:进入华为云学院,在“在线课程”中找到“数据库“,这里有内核专家精心录制的视频,每期围绕1个主题内容,详解1个业务难题。GaussDB慕课:登录中国大学MOOC网,由东北师范大学李雁翎教授团队与GaussDB专家团队联合开发,《数据库原理 GaussDB云数据库》已上线;培训认证:华为云同步推出了GaussDB初级以及高级课程以及认证,进入华为云学院,选择“职业认证”。同时也建议大家下载openGauss,购买《openGauss数据库核心技术》结合代码深入理解数据库内核,为社区做贡献,提升自己的影响力,成为大咖。华为云数据库产品团队不断推出新的线上学习课程,举办数据库训练营、挑战赛等,请大家关注微信公众号“GaussDB数据库”获取最新活动信息。6: 目前国内外对于数据库开源都有不同的意见。一些国产数据库也逐步进行了开源,那开源到底好不好?以及开源是否能带来直观的收益。苏光牛:数据库是讲究生态的产业,生态需要耐心持续的投入。华为积极参与和推进产业生态,2020年6月30日,华为开源openGauss, 与合作伙伴、高校以及开发者共建开源生态,鼓励有能力的合作伙伴发展基于openGauss的自有品牌数据库产品,为上层应用提供更多数据库选择,和业界共同繁荣数据库产业生态。GaussDB是华为基于openGauss的生态和部分内核增强了分布式能力的商业版本,通过华为云和华为云Stack(HCS),满足政企客户对分布式数据库的高性能、高可靠、高安全的需求。开源对数据库生态的帮助,整体来讲,是正向的积极的。但是开源需要真的开源,需要安全的开源和合规的开源,开源涉及大量第三方依赖包括专利的优化和调整,而不是代码放开就是开源;所以从这个意义上来讲,开源也要负责任,开源不是终点,更不是被迫的应对措施,开源需要帮助更多的伙伴能真正的用起来。同时,华为也积极拥抱并兼容和支持业界主流的生态如MySQL、PostgreSQL及非关系型数据库Mongo、Redis等生态,我们会把这些软件生态和华为的分布式存储、软硬件协同起来,让客户既能获得生态的好处,又能获得更高的性能、可靠性,这才是我们认为的真正符合客户需要的数据库产品。7: 您认为数据库国产化目前的难点是什么,或者说国产数据库发展的主要瓶颈有哪些?苏光牛:当前数据库产业的核心难点之一是人才,实际上芯片、操作系统和数据库这些根技术上都缺乏人才,其中一个原因也是因为一直以来普遍都更加关注应用开发,例如:很多大学生主要学习JAVA等高级开发语言作为未来的职业的主要语言,但这些根技术普遍还是C语言,这些系统级的软件需要C语言的精深的掌握,仅仅是这一条就让很多人不选择系统级的软件开发岗位;同时,这些根技术的入门台阶很高,学习了JAVA语言开发一个APP可能24小时就可以了,但数据库不行,特别是内核的开发可能需要半年,甚至更长的时间,这会让更多人即使进入后也会打退堂鼓;最后,长期以来交易数据库很重要,是IT系统的核心的核心,但数据库实际的营收却并不高,这里面有复杂的因素,但确实让很多企业望而却步,因为收益可能是未来的可能是隐形的,加上人才难以获得,很多企业就难以长期坚持下去。GaussDB从发展初期开始,对人才培养和获取就基于全球多个区域进行布局,同时长期坚持战略投入,解决上述2个因素带来的不利影响。8: 聊聊您对国产数据库未来的展望和寄语。苏光牛:在当前的大环境下,给中国的数据库带来了机遇,所以整体来讲,对数据库从业者来讲是一个好事。我们知道数据库的大体的理论框架和架构实际上经过了40年的发展,基本上是比较成熟的,核心挑战是工程化的难度,所以这是考验耐力和恒心的时刻,长期坚持战略投入是最基础的保障;同时当前的开源软件为开发数据库内核提供了原型式的范本,但这个直接拿来做一些简单的增强就希望成为“企业级”的数据库,实际上有很大的差距,本着为客户着想,其实需要做很多的工作;最后,国产数据库做到自主可控,每个企业每个人对自主可控的理解都可能不太一样,比如说:通过某个开源软件+一个中间件,到底算不算自主可控,到底算不算分布式数据库,这可能仁者见仁智者见智,不过,本着为服务的企业负责任的态度,我们要保证自己的业务连续(坚持做数据库,10年100年还做数据库),同时也要为客户负责,任何情况下,自己开发的软件符合安全和合规的要求,客户的业务才能连续。GaussDB首要的任务是解决华为的业务连续性的需求,同时也是要确保使用GaussDB的客户的业务能够连续,所以我们坚持战略投入,坚持从每一行代码,坚持从生态开始来构建整个数据库体系。
  • [其他] 华为云GaussDB首次亮相2021服贸会,为数字人民币提供坚实数据底座
     9月3日-7日,以“数字开启未来,服务促进发展”为主题的2021中国国际服务贸易交易会(简称服贸会)在北京举行。华为云GaussDB首次亮相大会,并在会上展示了GaussDB云原生创新技术及金融行业的数字化探索和实践,积极打造坚实的数字人民币数据处理底座,推动千行百业数字化发展。2021服贸会华为云GaussDB展区图 聚焦金融领域,打造坚实的数字人民币数据处理底座 与往届不同的是,今年服贸会聚焦行业热点和发展趋势,突出数字经济和数字贸易,在开幕会上,国家决策者还宣布设立北京证券交易所,打造服务创新型中小企业主阵地。这对于深化金融改革,促进科技与资本融合,推动金融创新发展具有重要意义。 作为服务过众多企业数字化转型的利器,华为云GaussDB早在2019年11月,中国人民银行数字货币研究所与华为签署的合作备忘录中,作为数字货币的坚实数据处理底座参与金融科技建设。华为云GaussDB面向金融行业提供了一系列企业级能力,并希望借助服贸会这一国际平台,与更多来自国内外的伙伴交流分享,助力数字领域的全球化合作和数字经济社会的发展,同时响应国家号召,为数字人民币提供坚实的数据处理底座,为企业提供创新型数字服务。 以云原生技术为抓手,推动金融行业数字化转型 华为云GaussDB是华为基于金融政企经验、华为内部流程IT与云底座深耕10年以上的数据库内核研发优化能力,结合云原生与AI技术倾力打造的金融级分布式数据库,满足客户对高性能、高扩展、高可用、高安全的要求,广泛应用于金融、电力、政府、智慧城市等领域。 高性能:具备企业级复杂事务混合负载能力,支持极佳的线性弹性扩展。在银行实测中,GaussDB通过单节点Numa-Aware和分布式GTM-Lite技术,32节点处理能力达1500万tpmC;基于云原生分布式优化器以及节点/算子/指令全并行架构,复杂查询时延降低82%;而且在1000+节点超大分布式集群弹性扩展方面有很好的线性性能提升。 高可用:通过Switch Turbo技术,实现在同城AZ(可用区)内、同城AZ之间、以及异地跨Region之间快速切换,数据0丢失,满足金融级两地三中心高可用诉求。 高安全:基于业界首个纯软全密态数据库技术,实现了数据在内存中的运算态加密,保证全链路数据安全、数据主权遵从以及应用透明。 华为云GaussDB当前已经助力国有银行在其核心交易系统、渠道以及办公系统中完成分布式改造,保障业务安全合规,支持跨AZ/Region容灾;同时利用华为云UGO(数据库和应用迁移)+DRS(数据复制服务)数据迁移组合解决方案,帮助降低了70%存储过程改造成本,极大加速了银行等金融企业的数字化转型进程。 成功不是一蹴而就的,在GaussDB能力背后,是华为在数据库领域布局全球研究、软硬能力协同、坚持10+年战略投入的结果。展望未来,华为公司有能力、有信心在数据库和数据赛道传承华为优良传统,打造以“解决客户实际问题”为原则的世界级产品,助力金融领域数字人民币高质量发展及企业快而好地完成数字化转型,实现互利共赢,共享服务贸易发展机遇,共促数字贸易发展。更多GaussDB详情了解,欢迎前往华为云官网:https://www.huaweicloud.com/product/dbs.html
  • [技术干货] 华为云数据库内核专家为您揭秘:GaussDB(for MySQL)并行查询有多快?
    作者:饶珑辉 华为云数据库内核专家       近期,华为云数据库团队推出了专家技术解读系列,该系列基于GaussDB产品,每期围绕1个核心技术点进行深度剖析。上期由华为瑞典研究所数据库Lab首席科学家吕漫漪女士解读《GaussDB(for MySQL)云栈垂直集成的力量有多大?》,本期将由华为云数据库内核专家饶珑辉针对吕漫漪文章中介绍的GaussDB(for MySQL)关键特性之“并行查询”(PQ: Parallel Query)进行详细解读。 一般来讲,数据库有两个非常广泛的应用场景,分别是“事务处理”和“查询分析”。开源MySQL作为国内使用最多的关系型数据库之一,很早在5.1版本就开始支持事务处理的场景。随着技术演进,开源MySQL在版本更新迭代过程中不但持续增强事务处理能力,并且最新的MySQL 8.0版本已经开始支持许多查询分析型的特性,比如Window function、CTE、Hash Join、列直方图、并行COUNT计算等等。 华为云GaussDB(for MySQL) 作为华为最新一代高性能企业级分布式关系型数据库,根植MySQL开源社区,不但继承了开源的所有查询分析特性,还面向企业级应用查询负载开发了许多增强特性,如并行查询、查询计算下推(NDP: Near Data Processing)等等。 在传统数据解决方案中,“事务处理”和“查询分析”分别放在不同类型的库上完成,这是因为事务处理以数据增、删、改,以及小数据查询为主,更加注重实时响应、高吞吐和事务性要求。而“查询分析”以大数据量复杂计算为主,更加注重数据容量扩展性、复杂计算能力等。下图展示的是传统数据解决方案:OLTP数据库满足在线事务处理需求,OLAP数据仓库满足分析型查询需求。 客户需要什么样的数据库? 当前业界对数据库的普遍需求是:实时响应、高吞吐、满足事务性、良好的扩展性以及支持复杂查询。这对于使用者而言有很多好处:首先是降低部署成本,用户只需要部署一套数据库集群即可;其次是解决了数据迁移时延的问题,更新和查询运行在同一套集群中;还有就是支持事务性查询,满足一致性、原则性、隔离性和持久性要求,查询结果会更加准确。 针对用户需求,华为云原生数据库GaussDB(for MySQL)通过技术创新,具备了同时满足事务处理和查询分析的能力。GaussDB(for MySQL)是一款100%兼容MySQL语法的OLTP事务关系型数据库,架构上采用了计算和存储分离的设计,计算资源和存储资源可以分别进行独立在线扩展。存储层使用了华为自研分布式存储系统DFV(数据功能虚拟化: Data Function Virtualisation),最大可以扩展到128TB容量,单个计算节点最大规格可支持64核CPU,512G的内存容量,最多可以支持1个写节点和15个只读节点。 除了强大的资源扩展能力,GaussDB(for MySQL)针对事务处理和查询分析分别作了优化,极大增强了事务读写和查询分析的能力。本文将重点介绍增强的查询分析能力之一:并行查询。 查询分析提升之道:释放CPU多核计算资源 众所周知,软件计算能力的提升一方面得益于CPU硬件能力的增强,另一方面也得益于软件设计层面能够充分利用CPU的计算资源。当前处理器普遍采用多核设计,如GaussDB(for MySQL)单个节点最多可以支持64核的CPU。单线程查询的方式至多能用满一个核的CPU资源,性能提升程度有限,远远无法满足企业大数据量查询场景下对降低时延的要求。因此,复杂的查询分析型计算过程必须考虑充分利用CPU的多核计算资源,让多个核参与到并行计算任务中才能大幅度提升查询计算的处理效率。 下图是使用CPU多核资源并行计算一个表的count(*)过程的例子:表数据进行切块后分发给多个核进行并行计算,每个核计算部分数据得到一个中间count(*)结果,并在最后阶段将所有中间结果进行聚合得到最终结果。 GaussDB(for MySQL)查询分析提升秘笈:并行查询 GaussDB(for MySQL)支持并行执行的查询方式,用于降低分析型查询场景的处理时间,满足企业级应用对查询低时延的要求。如前面所述,并行查询的基本实现原理是将查询任务进行切分并分发到多个CPU核上进行计算,充分利用CPU的多核计算资源来缩短查询时间。并行查询的性能提升倍数,理论上与CPU的核数正相关,就是说并行度越高能够使用的CPU核数就越多,性能提升的倍数也就越高。 下图展示的是:在GaussDB(for MySQL)的64U实例上查询100G数据量的COUNT(*)查询耗时,不同的查询并发度分别对应不同耗时,并发度越高对应的查询耗时越短。 GaussDB(for MySQL)支持多种类型的并行查询算子,以满足客户各种不同复杂查询场景。当前最新版本(2021-9)已经支持的并行查询场景包括:主键查询、二级索引查询主键扫描、索引扫描、范围扫描、索引等值查询,索引逆向查询并行条件过滤(where/having)、投影计算并行多表JOIN(包括HashJoin、NestLoopJoin、SemiJoin等)查询并行聚合函数运算,包括SUM/AVG/COUNT/BIT_AND/BIT_OR/BIT_XOR等并行表达式运算,包括算术运算、逻辑运算、一般函数运算及混合运算等并行分组group by、排序order by、limit/offset、distinct运算并行UNION、子查询、视图查询并行分区表查询并行查询支持的数据类型包括:整型、字符型、时间类型、浮点型等等其他查询 下图是GaussDB(for MySQL)并行查询针对TPC-H的22条查询场景所做的性能测试结果,测试数据量为100G,并发线程数据是32。下图展示了并行查询相比传统MySQL单线程查询的性能提升情况:32并行执行下,单表复杂查询最高提升26倍性能,普遍提升20+倍性能。多表JOIN复杂查询最高提升近27倍性能,普遍提升10+倍性能。子查询性能也有较大提升。 总而言之,GaussDB(for MySQL)并行查询充分调用了CPU的多核计算资源,极大降低了分析型查询场景的处理时间,大幅度提升了数据库性能,可以很好的满足客户多种复杂查询场景的低时延要求。目前,GaussDB(for MySQL)并行查询功能已经全网上线,更多并行查询场景正在不断解锁中,欢迎大家前往华为云官网体验: https://www.huaweicloud.com/product/gaussdb_mysql.html  Ps:看完觉得还不过瘾?下期将由我们另一位专家为大家带来GaussDB(for MySQL) “并行DDL” 技术解读,更多精彩,敬请期待!  华为将于2021年9月23-25日在上海世博中心&世博展览馆举办华为全联接2021,以“深耕数字化”为主题,汇聚业界思想领袖、商业精英、技术大咖、先锋企业、生态伙伴、应用服务商以及开发者等各方,探讨如何深入行业场景,把数字技术与行业知识深度结合,真正融入政企的主业务流程,解决核心业务问题,催生体验提升、效率提升以及模式创新;并发布场景化的产品与解决方案,分享客户伙伴的最新成果与实践,构筑开放共赢的健康生态。 了解更多信息,请访问官网www.huawei.com/hc2021
  • [热门活动] 《数据库原理▪GaussDB云数据库》MOOC活动合集
    活动时间:2021年8月16日~10月20日活动背景:大家知道,在我国近20年的“数据库原理及应用”的教学活动中,其教学实验环节,几乎没有国产数据库的身影。近年来,国产数据库软件日渐成熟,尤其是华为公司自主研发的国产云数据库,GaussDB(for MySQL) 和GaussDB for open Gauss的出现,给我们带来了新的气息,新的希望、新的前景。本课程是由东北师范大学博士生导师李雁翎老师团队和华为云数据库技术专家团队共同打造的新课,帮助大家掌握数据库操作技能,进而有能力数字化一切可以数字化的事物。课程简介:本课程由华为云数据库GaussDB国产数据库支撑,共有3个教学模块:数据库基础理论、数据库技术和数据库系统控制。每周开放一章节内容,循序渐进,掌握数据库操作技能,“零”基础也能学,学习请点击:https://www.icourse163.org/course/NENU-1464035185活动参与入口:【第1期 有奖竞答】跟专家学《数据库原理▪GaussDB云数据库》MOOC,更有书籍、玻璃杯、GaussDB字母笔等你哦!【第2期 开学见面礼】博导带你学MOOC,盖楼就享4000元代金券服务,还有8种好礼拿!【第3期 华为“云”赏月】分享数据库MOOC,价值199元华为云背包等你来拿!【第4期 国庆最嗨免费区】华为云数据库:MOOC免费学、沙箱免费玩,229元移动电源送不停!//*本帖为MOOC系列活动总帖,具体的活动参与方式和活动奖励以每一个具体的活动为准,有问题请添加小助手微信:1820232786
  • [技术干货] 【“互联网+”大赛华为云赛道】GaussDB命题攻略:支持三种开发语言,轻松完成数据库缓冲池
    目前,第七届中国国际“互联网+”大学生创新创业大赛火热报名中,为了帮助参赛者更好了解赛题设计思路和命题方向,华为云产业命题赛道举行了线上直播解读,华为云数据库资深架构师苏斌在直播间详细解读了GaussDB命题赛道攻略,通过剖析数据库关键技术和赛题考点,助力参赛选手轻松拿高分。数据库是什么?谈及数据库,可能有很多小伙伴不太了解,简单来说,数据库是存取和管理数据的软件(在生活中可以形象的类比为“大仓库”、“电子文件柜”等等)。当今世界是一个信息爆炸的时代,充斥着大量数据,我们的衣食住行,生活的方方面面都与数据有了不可分割的关系。为了满足各种类型的数据特点与爆炸式的数据增长与存储管理压力,社会催生了多种类型数据库的蓬勃发展,很多关键的数据库新技术,例如分布式、云原生等也应运而生。这类数据库相比传统数据库性能更强,可靠性更强,扩展性更强,容量更大,有了这类数据库,数据读取/存储速度更快了,时延更低了,应对故障场景更从容了,面对大流量洪峰再也不怕了……说到云原生分布式数据库的典型代表,华为云GaussDB(for MySQL)必须榜上有名。作为华为云GaussDB数据库的当家花旦,GaussDB(for MySQL) 100%兼容MySQL语法,是华为最新一代高性能企业级分布式关系型数据库。它基于华为最新一代DFV分布式存储,采用计算存储分离架构,最高支持128TB的海量存储,可实现超百万级QPS吞吐,支持跨AZ部署,数据0丢失,既拥有商业数据库的性能和可靠性,又具备开源数据库的灵活性。为了让开发者深入了解数据库技术,并用相关技术解决企业实际业务问题,本届“互联网+”大赛的产业命题赛道·华为云GaussDB命题推出了相关题目:基于GaussDB(for MySQL)实现高性能、高扩展性的bufferpool(缓冲池)。赛题解读:抢先掌握bufferpool(缓冲池)原理及技术,应战更从容数据库系统一般都会有一个Buffer Pool(缓冲池),用于将一些频繁访问的热点数据从磁盘读到缓存中,避免我们在数据库中读取或者写入数据时对慢速磁盘设备进行频繁访问,从而加快数据的访问速度,提升数据库的性能。本赛道赛题就是希望选手能借鉴并参考GaussDB(for MySQL)的设计理念和思路,实现一个高性能、高扩展性的Buffer Pool。比赛分为三个阶段,1)实现一个基本功能的Buffer Pool, 能够缓存固定大小(16K)的一些热点数据,需要保证从缓存中读取和写入数据的正确性。2)在保证正确性的前提下,使用LRU、LFU和LRU-K等淘汰算法及其变种,提升Buffer Pool     的命中率,从而提高热点数据访问速度。3)在云化场景下,为了提高资源利用率,会多种数据库共用同一存储资源池,每种数据库有不同的page size(页面大小), Buffer Pool需要有高扩展性,能够支持同时缓存各种page size(page size 固定为8KB、16KB、32KB和2MB)的数据。这里科普下赛题中的相关概念:Page:Page是数据库中磁盘和内存交换的基本单位,也是数据库管理磁盘空间的基本单位。比如MySQL中默认的page大小为16K,PostgreSQL page为8K。Data manager:数据管理器,用于管理数据的读取和写入。Meta manager:元数据管理器,用于管理page在内存中的信息。答题指南8月31日报名结束后(在互联网+大赛官网和华为云平台均需报名),提交作品入口正式对外开放,请参考赛事组提供的DEMO,该DEMO包含评测程序及简单Buffer Pool实现,请在此基础上完成Buffer Pool的代码编写与编译,并在平台上传参赛作品,获取评测分数与结果。赛题组针对C++语言提供了log4cxx日志组件,详情参见赛题组DEMO,Java/Python等语言请使用常用的日志组件。作品运行反馈界面同时也提供日志下载,同时请避免打印过多的日志。为了充分保证比赛的公平性,参赛选手不得使用第三方存储引擎库(如RocksDB、LevelDB、LMDB等),在其之上封装接口用来参赛;不得依赖第三方动态库,以免导致程序在评测环境不能运行;参赛程序初始化需在3分钟内完成,关闭需在10分钟内完成,测试需在30分钟内完成。 什么样的作品容易拿高分?如果想完成高质量作品在大赛中“一骑绝尘”,那么你可能还需要了解比赛的评分逻辑,每个作品的测评分为两个阶段,包括正确性评测和性能评测。正确性评测阶段,评测程序会进行纯读和读写混合测试。测试系统会随机对所有数据页面进行访问,访问包括读和写。对读取的页面,会对该页面进行正确性验证,页面验证不通过测试将结束,且测试不得分。对写入的页面,该页面可能在后续被再次访问,并进行正确性验证;同时当评测程序完成运行测试后,将发送信号关闭参赛程序,参赛程序需持久化尚未持久化的页面数据,评测程序将进行页面正确性验证。如果验证不通过,测试将结束,且测试不得分。只有通过正确性评测阶段,才会进入性能评测阶段。性能评测的评测模型会有多种,评测参数参考如下:在正确性验证通过的情况下,对每个不同评测模型的测试阶段整体计时,如果该阶段的正确检测全部通过,则成绩有效,根据总用时从低到高进行排名(用时越短排名越靠前)。评测程序将根据评测模型对参赛程序进行测试,计时从发送第一个请求开始,最后一个请求完成结束,最终计时为各项测试模型的测试阶段耗时之和。最后再次提醒大家,本次“互联网+”大赛GaussDB赛道的时间安排:报名和时间截止到8月31日,初/复赛截止9月30日,预计10月中下旬举行全国总决赛。点击链接进入大赛页面报名:戳它报名。想要了解更多赛题详解,欢迎观看GaussDB命题解读直播回顾:回顾链接。
  • [技术干货] 华为海外女科学家为您揭秘:GaussDB(for MySQL)云栈垂直集成的力量有多大?
    作者:吕漫漪  华为瑞典研究所数据库Lab首席科学家如今云计算越来越普及,云堆栈作为云计算的重要服务模式,其关键组件之一是事务数据库服务。在实际业务场景中,应用程序依赖于可扩展、高性能的托管数据库服务,以充分受益于云平台。而云数据库也需要高效利用底层云基础架构,以释放云规模运营的潜力。华为云GaussDB(for MySQL)是华为基于新一代DFV(全称Data Function Virtualisation,数据功能虚拟化)分布式存储,采用计算存储分离架构,完全兼容MySQL的高性能企业级云原生分布式数据库,以全托管服务形式为互联网和企业客户提供专业服务。在本文中,我将解释常见的客户工作负载,以及我们如何利用华为云计算堆栈的独特能力来处理这种工作负载。谁是云上的客户?他们的工作负载是什么?在国内,人们通常认为只有互联网初创企业才会使用云平台,而MySQL由于在互联网公司中广受欢迎,得到众多国内企业的青睐。但实际上,企业多年前就已经开始拥抱云概念,并在不断深入发展中,这也是中国当前的趋势。MySQL作为世界上最流行的开源数据库,在所有行业和互联网公司中都被广泛采用。那么,云数据库客户的典型工作负载是什么?我们观察到的两个特点是:1)数据量越来越大。从一开始就有几TB到几十TB的数据量,而且随着时间的推移,数据量会越来越大。2)简单的插入/删除/更新/点查和复杂的分析查询的混合。此外,偶尔也会有DDL操作。目前客户面临一个很大挑战,即如何在数据量大的情况下提升数据库性能。客户希望在复杂查询的同时,保持核心事务工作负载的吞吐量。因为企业的业务逻辑性质,查询通常会比较复杂。幸运的是,MySQL 8.0添加了期待已久的分析行SQL支持,例如windowing function和递归CTE。对于非结构化数据,MySQL的JSON支持已经非常受欢迎。GaussDB(for MySQL)架构概述GaussDB(for MySQL)的架构构建在多租户共享的分布式存储系统之上,目前一个数据库的最大数据量为128TB,一个主节点用于读写负载,最多15个只读节点用于读负载。SQL引擎是一个经过深度修改的MySQL 8.0,因此在语法和语义方面与MySQL 100% 兼容。计算节点和存储之间用RDMA网络。GaussDB(for MySQL)服务使用的存储系统是一种高可靠的跨AZ云存储。在公有云上,存储系统可以是一个有几十或数百个节点的大型群集,横向扩展能力比单租户线下方案高很多倍。SQL节点将redo log写到存储层,页面在存储层materialize,此设计显著减少了更新密集型工作负载的网络通信。属于单个数据库的页面以slice形式组织,slices分布在多个存储节点上,这个数据分布是就是分布式查询的基础。华为云GaussDB(for MySQL)架构图华为独特优势:垂直集成与传统的线下数据库不同,云数据库有垂直集成云栈中所有层的能力。华为作为在云栈各层领先的提供商,在云领域中有着独特的地位,有能力成为行业的领导者。云栈中最接近数据库的是存储,线下纯软数据库需要与通用型存储以及标准文件系统配合使用,在垂直集成方面,几乎没有优化空间。但在云上,存储和数据库的集成能发挥更大的作用,因为云存储在存储节点方面的可扩展性很强,并允许客户根据数据量和负载动态扩展。由于云存储是多租户之间共享,而且并非所有租户都会每时每刻有大型扫描,因此我们可以将部分查询处理卸载到存储层,以实现更高的资源利用率。通过并行提高性能(并行查询:PQ)提高性能的一个通用方法是并行,并行可以在多层上实现。MySQL 8.0的社区版本仅支持单线程查询执行,无法充分利用硬件提供的所有核来执行复杂查询。我们修改了MySQL执行器,允许使用多个线程并行执行单个查询。与线下解决方案不同的是,云基础架构允许我们在计算节点上利用它的垂直扩展的能力。最大的计算节点目前有64个核,这也代表了我们通过并行查询可以实现的最大并行力度。当大部分热数据可以放在buffer pool里时,此优化效果最好。并行查询将在另一篇文章中详细解释。客户工作负载不仅包含DML,还包含DDL,例如索引创建、更改列的数据类型。虽然大多数DDL在MySQL中都是在线处理的,但有些操作可能会被阻塞,而且使用逻辑复制会扩大堵塞。GaussDB(for MySQL)使用物理复制,避免了这个问题。当表很大时,DDL操作可能需要数小时才能完成。为了支持我们在云上常见的数据量,优化DDL的必要性是显而易见的。我们已经有一种创新的方法来处理DDL,这种创新将在后面的文章中探讨。另一个允许更高并行力度的层是存储层,因为存储系统可能有数百个节点和数千个核心。GaussDB(for MySQL)使用的这种云规模的分布式存储是我们提高查询性能的一个关键基础,结合并行查询,有可能实现查询性能提高100倍以上。利用云存储提高查询性能 (算子下推:NDP)GaussDB(for MySQL)中的数据以slice形式组织,分布在多个存储节点上。我们利用这个数据分布,把算子卸载到数据所在的存储节点上,利用当地可用的计算资源执行,无需将数据读到计算节点中。用数据库术语,我们将其称为近数据处理(NDP)或算子下推。其基本原理是:将查询处理的部分工作下推到数据所在的存储节点上,所下推的查询是数据密集型查询,例如全表扫描和索引扫描,投影和某些WHERE条件的过滤,以及聚合在存储层执行,仅将匹配行和列返回到计算节点,而不是完整的页。除了并行执行之外,因为提取到计算节点的数据量显著减少,这种方法还减少了网络IO。此外,NDP算子下推还允许充分利用缓存和存储介质的本地带宽,当查询需要扫描大量数据,且数据不在Innodb缓冲池中时,卸载到存储的效果最好。例如,下图显示了NDP算子下推和并行查询将TCP-H Q12的执行时间优化了34倍。另一篇文章会单独介绍NDP的技术细节,并提供全面的性能分析。未来方向GaussDB(for MySQL)的设计是为云而生,此架构具有极其强大和灵活的垂直集成能力,计算和存储资源解耦并且可以独立扩展,同时在功能上紧密集成,数据库操作可以在多层中执行。未来,数据库功能也可以卸载到网卡和其他云组件,而不限于计算节点和存储。我们相信,云栈的深度集成是释放云数据库力量的关键,华为在实现这一目标方面处于独特的地位,正如GaussDB(for MySQL)所展示的那样,未来将引领云领域方向。 综上所述,华为云GaussDB(for MySQL)基于存算分离架构,通过并行查询PQ和算子下推NDP等先进技术,极大提升了数据库性能,实现了云栈垂直集成力量的最大化,让算力更快更猛。文章所述功能均已上线,欢迎大家前去华为云官网体验:https://www.huaweicloud.com/product/gaussdb_mysql.html,也请继续关注我们,后续还有更多技术信息与大家分享!华为将于2021年9月23-25日在上海世博中心&世博展览馆举办华为全联接2021,以“深耕数字化”为主题,汇聚业界思想领袖、商业精英、技术大咖、先锋企业、生态伙伴、应用服务商以及开发者等各方,探讨如何深入行业场景,把数字技术与行业知识深度结合,真正融入政企的主业务流程,解决核心业务问题,催生体验提升、效率提升以及模式创新;并发布场景化的产品与解决方案,分享客户伙伴的最新成果与实践,构筑开放共赢的健康生态。了解更多信息,请访问官网www.huawei.com/hc2021
总条数:164 到第
上滑加载中