暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

首届腾讯云数据库王者挑战赛落幕,决赛选手无一超越AI

原创 腾讯云数据库 2020-02-18
1059

关注↑↑腾讯云数据库↑↑官方微信,回复“赛题复现”,即可进行比赛场景复现。

11月6日,由腾讯云主办的首届“DB王者—数据库诊断大赛”决赛在腾讯Techo开发者大会活动现场圆满落幕,此前800多名选手经过初赛的激烈角逐后,共有30位进入本次决赛。经过腾讯云智能数据库管家DBbrain的智能打分,最终雷孝龙以78分的成绩摘得本次冠军奖杯,亚军和季军则分别由赵文新和王加雷获得。

image.png
腾讯云数据库负责人林晓斌(丁奇)为获奖者颁奖
(一等奖得主远程参赛,所以很遗憾没有颁奖照片)

以下是本次比赛全部获奖名单:

image.png

本次“DB王者—数据库诊断大赛” 的规则是由参赛者领取唯一的腾讯云账号,通过在云服务器上模拟业务访问,造成每组的MySQL云数据库上出现故障、异常、隐患等现象,参赛者需根据云基础监控和日志信息,在不降低业务访问量的情况下,对业务代码或数据库进行优化。

比赛一大亮点是由腾讯云数据库智能管家DBbrain担任评审,对每个参赛用户的实例进行实时健康巡检和智能打分。比赛结束后,按照DBbrain的健康打分确定排名,分数相同则用时最短者获胜。DBbrain利用机器学习、大数据等技术吸收了大量资深 DBA 成熟经验,其作为智能评审官,不仅确保了比赛结果的公平性、公正性和权威性,同时DBbrain也跟选手同场竞技,真正实现了“故障秒级发现、优化秒级输出、性能明显提升”的7*24数据库无人值守的新模式,充分展现了DBbrain的强大数据库诊断和优化的能力。

决赛由MySQL之父 Michael Widenius亲自为获奖者颁发奖品,林晓斌、周彦伟、赵振平等业界大咖也就冠军队伍的优化思路进行了点评,DBbrain的能力获得了大家的一致认可。

诊断赛的题目均是从DBbrain为云上客户提供数据库智能优化服务中遇到的实际业务问题提炼出来的,且DBbrain能够实时给出优化建议。通过本次比赛也不难看出,DBbrain对用户有着不可替代的价值。

image.png

今天,数据君也为大家带来了决赛的赛题解析和建议优化思路,有兴趣的朋友可以关注“腾讯云数据库”官方微信,回复“赛题复现”,按照指示即可进行比赛场景复现,亲手体验哦~

初赛赛题解析请点击右侧文字跳转阅读:800人参赛只有1人全部答对,题目却是现实中发生过的故障?

一、赛题设置

显示不完全的代码,请左右滑动阅读。

原表结构

create table region  (
       regionkey  integer not null,
       name       varchar(25) not null,
       comment    varchar(152),
       primary key(regionkey)
);
create table nation  (
       nationkey  integer not null,
       name       varchar(25) not null,
       regionkey  integer not null,
       comment    varchar(152),
       primary key(nationkey)
);
create tablecustomer (
        custkey     integer not null,
        name        varchar(25) CHARACTER SET utf8 COLLATEutf8_bin not null,
        address     varchar(40) not null,
        nationkey   integer not null,
        phone       varchar(15) not null,
        acctbal     decimal(15,2)   not null,
        mktsegment  varchar(10) not null,
        comment     varchar(117) not null,
        primary key(custkey)
    );
create tableorders  (
        orderkey       integer not null,
        custkey        integer not null,
        orderstatus    varchar(1) not null,
        totalprice     decimal(15,2) not null,
        orderdate      date not null,
        orderpriority  varchar(15) not null,
        clerk          varchar(15) not null,
        shippriority   integer not null,
        comment        varchar(79) not null,
        primary key(orderkey)
    );

原始select1语句

select c.custkey, c.phone,sum(o.totalprice) totalprice
   from nation n
   inner join customer c on c.nationkey = n.nationkey
   inner join orders o on o.clerk = c.name
   where n.name = "CHINA" and c.mktsegment ="HOUSEHOLD" and c.phone like "28-520%"
group byc.custkey, c.phone

执行计划

image.png

原始select2语句

select *
   from (
       select custkey, orderdate, sum(totalprice) as totalprice
       from orders
       group by custkey, orderdate
    )
where orderdate= "2019-08-01"

执行计划

image.png

原始select3语句

select c.custkey, sum(o.totalprice)totalprice
   from customer c
   left join orders o on o.custkey = c.custkey
   where c.phone like "33-64%" and c.name likeconcat("Customer#00003", "%")
group byc.custkey

执行计划

image.png

原始select4语句

select c.custkey, c.phone
   from nation n
   inner join customer c on c.nationkey = n.nationkey
   where n.name = "CHINA" and exists (
       select 1 from orders o where o.custkey = c.custkey and o.orderdate ="1998-08-11"
    )

执行计划

image.png

二、赛题解析

优化后的表结构

CREATETABLE`region` (
    `regionkey`int(11) NOTNULL,
    `name`varchar(25) NOTNULL,
    `comment`varchar(152) DEFAULTNULL,
    PRIMARY KEY (`regionkey`)
    )
CREATETABLE`nation` (
    `nationkey`int(11) NOTNULL,
    `name`char(25) NOTNULL,
    `regionkey`int(11) NOTNULL,
    `comment`varchar(152) DEFAULTNULL,
    PRIMARY KEY (`nationkey`),
    KEY`index_0` (`name`)
    )
CREATETABLE`customer` (
    `custkey`int(11) NOTNULL,
    `name`varchar(25) CHARACTERSET utf8 COLLATE utf8_bin NOTNULL,
    `address`varchar(40) NOTNULL,
    `nationkey`int(11) NOTNULL,
    `phone`char(15) NOTNULL,
    `acctbal`decimal(15,2) NOTNULL,
    `mktsegment`char(10) NOTNULL,
    `comment`varchar(117) NOTNULL,
    PRIMARY KEY (`custkey`),
    KEY`index_1` (`phone`,`nationkey`,`name`),
    KEY`index_2` (`nationkey`),
    KEY`index_0` (`name`,`phone`)
    )
CREATETABLE`orders` (
    `orderkey`int(11) NOTNULL,
    `custkey`int(11) NOTNULL,
    `orderstatus`varchar(1) NOTNULL,
    `totalprice`decimal(15,2) NOTNULL,
    `orderdate`dateNOTNULL,
    `orderpriority`char(15) NOTNULL,
    `clerk`char(15) NOTNULL,
    `shippriority`int(11) NOTNULL,
    `comment`varchar(79) NOTNULL,
    PRIMARY KEY (`orderkey`),
    KEY`index_0` (`orderdate`,`custkey`,`totalprice`),
    KEY`index_3` (`clerk`,`totalprice`),
    KEY`index_1` (`custkey`,`totalprice`)
    )

优化后的select1语句

select c.custkey, c.phone, sum(o.totalprice) totalprice
    from nation n
    inner join customer c on c.nationkey = n.nationkey
    inner join orders o on o.clerk   = c.name  COLLATE utf8_bin
    where n.name = 'CHINA'and c.mktsegment = 'HOUSEHOLD'and c.phone like'28-520%'
groupby c.custkey, c.phone

执行计划

image.png

优化后的select2语句

SELECT
    `t`.`custkey`,
    `t`.`orderdate`,
    SUM(`t`.`totalprice`) AS`totalprice`
    FROM
    `dbaas`.`orders`AS`t`
    WHERE
    `t`.`orderdate` = '2019-08-01'
    GROUPBY
    `t`.`custkey`,
    `t`.`orderdate`

执行计划

image.png

优化后的select3语句

select c.custkey, sum(o.totalprice)totalprice
   from customer c
   left join orders o on o.custkey = c.custkey
   where c.phone like "33-64%" and c.name like concat("Customer#00003","%")
group by c.custkey

执行计划

image.png

优化后的select4语句

SELECT
    `t1`.`custkey`,
    `t1`.`phone`
    FROM
    (
        SELECT
        *
        FROM
        `dbaas`.`nation`AS`t`
        WHERE
        `t`.`name` = 'CHINA'
    ) AS`t0`
    INNER JOIN`dbaas`.`customer`AS`t1`ON`t0`.`nationkey` = `t1`.`nationkey`
    INNER JOIN (
        SELECT
        `t2`.`custkey`
        FROM
        `dbaas`.`orders`AS`t2`
        WHERE
        `t2`.`orderdate` = '1998-08-11'
        GROUPBY
        `t2`.`custkey`
    ) AS`t5`ON`t1`.`custkey` = `t5`.`custkey`

执行计划

image.png

三、DBbrain

作为腾讯云推出的数据库智能诊断和优化产品,DBbrain 可以通过实时的性能诊断和安全防护,高效地帮助用户定位故障原因、优化建议、协助用户从源头进行预防;并通过 AI 调参能力,提升数据库整体性能。另外,它可以将大量数据库问题的诊断优化工作自动化,利用机器学习、大数据手段快速复制资深 DBA 的成熟经验,帮助DBA高效的管理数据库和解决数据库疑难杂症,为企业进行技术赋能,同时也能够结合客户的有效反馈,共同构建数据库完善的生态体系。

DBbrain还借助微信小程序生态,为用户提供了PC端、移动端的多终端模式。结合用户使用习惯和场景,提供管理实例、监控告警、诊断优化、日报订阅和推送等数据库高频操作等一系列功能。

未来,腾讯云将每月开展一次“DBbrain诊断日”活动精选出实际业务中会遇到的数据库运维难题,同时邀请资深数据库专家结合DBbrain的智能诊断进行业务场景优化解析,为数据库管理贡献腾讯力量。

往期推荐

腾讯对分布式数据库技术的深度思考与实践
800人参赛只有1人全部答对,题目却是现实中发生过的故障?
3个DBA和1个不可能完成的任务
image.png

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论