范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

拒绝爆雷!GaussDB(forMySQL)新上线了这个功能

  本文分享自华为云社区《拒绝"爆雷"!GaussDB(for MySQL)新上线了这个功能-云社区-华为云》,作者:GaussDB 数据库。 什么是最大读取行
  一直以来,大数据量查询是数据库DBA们调优的重点,DBA们通常十八般武艺轮番上阵以期提升大数据查询的性能:例如分库分表、给表增加索引、设定合理的WHERE查询条件、限定单次查询的条数……
  然而,DBA再厉害,应用程序千千万,写代码的程序员万码奔腾,大数据量的查询像地雷,不定什么时候就爆了。比如隐藏在某段代码里的查询,因为一个新手程序员的经验不足,查询代码写得欠佳,没有WHERE子句或缺少索引引发了不必要的多行读取,甚至全表扫描,给服务器带来了过度的压力,导致业务执行缓慢,甚至最后服务器OOM崩溃。
  为了避免这种"爆雷",GaussDB(for MySQL)近期上线了最大读取行特性。优化器产生执行计划后,如果优化器预估的读取行数超过了所设置的最大读取行阈值,则自动中止查询,将雷的导火索切断。
  这种机制的优点在于:执行计划阶段就对查询进行了干预,而不是语句开始执行后在执行过程中进行中断。既杜绝了劣质查询对服务器和业务运行造成的风险,又大大节省了时间和资源。 如何设置最大读取行
  在GaussDB(for MySQL)中,设置rds_max_row_read,指定查询允许读取的最大行数。GaussDB(for MySQL)收到查询指令,执行查询之前,会对查询要读取的行数进行估计。当估值超过所设置的最大读取行时,将中止查询,即查询没有机会运行,提前规避不必要的资源消耗。
  下面是一份测试数据,说明了开启最大读取行前后的差异。
  假设表t1有4M大小的行,当开发人员或应用程序尝试运行以下查询时,运行需要7分钟。 mysql> SELECT  *  FROM t1;
  WHERE子句的缺失致使需要全表扫描,查询耗时长。对于更大的表,这类查询将需要更多的耗时,使服务器消耗更多资源,查询耗时甚至可能高达数小时。
  最大读取行特性的使用,可以节省宝贵的时间和资源。比如假设将最大读取行数指定为1000000: mysql> set rds_max_row_read =1000000; Query OK, 0 rows affected (0.00 sec)
  修改后,重新运行不含WHERE子句的查询,收到了读取行超限的提示,查询被停止。    mysql> SELECT  *  FROM t1; ERROR HY000: Expected number of read rows exceeds the maximum allowed (see @@rds_max_row_read)
  通过最大读取行,相当于拥有了一个工具,DBA或者软件工程师根据业务情况可以自如设置和调整限制规则,保证业务正常运行的同时,限制次优查询,避免性能异常。 适用范围
  适用于SELECT、CREATE SELECT和INSERT SELECT。 功能开启
  默认情况下,该功能是禁用的,只有当rds_max_row_read设置了值时,该功能才会被激活。
  为了功能的稳定,避免无心的错误设置对业务造成不必要的影响,rds_max_row_read做了最低值限制,不允许用户设置比最低值更低的值。 实现原理
  GaussDB(for MySQL)通过遍历每个查询块并聚合各查询块的贡献来整体评估查询的读取行数:也就是对各join对象的读取行数评估后累加。
  如果在累加评估过程中的某一刻,估计值超过了所设置的限制,查询将被终止。
  对于关联子查询,评估办法为:评估子查询的读取行数,然后乘以查询被执行的次数。
  需要特别说明的是,对每个JOIN对象的估计是执行计划预估返回的行数,可能与真实执行返回的行数有偏差。这虽然是一个相对简单的评估模型,但是我们坚信其具有足够的鲁棒性。
  对于复杂查询,GaussDB(for MySQL)还通过optimizer trace提供了更多信息以帮助您确定优化器做决策的原因及如何优化查询。 示例示例1mysql> EXPLAIN format=tree SELECT * FROM table_1, table_2; +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | EXPLAIN                                                                                                                                                                   | +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | -> Inner hash join (no condition)  (cost=6.50 rows=54)     -> Table scan on table_1  (cost=0.19 rows=9)     -> Hash         -> Table scan on table_2  (cost=0.85 rows=6)  | +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) mysql> SET rds_max_row_read =20; Query OK, 0 rows affected (0.00 sec) mysql> SELECT * FROM table_1, table_2; ERROR 1888 (HY000): The expected number of read rows exceeds the allowed maximum (see @@rds_max_row_read)
  查询读取的行太多,我们尝试在optimizer trace的帮助下寻找原因: SET optimizer_trace="enabled=on"; SELECT * from table_1, table_2; SELECT * FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
  在optimizer trace中,可以找到: {             "Max_row_read": {               "select#": 1,               "current_estimate_of_rows": 54,               "rows_contributed_by_this_query_block": 54             }           }
  这表示此查询中的唯一查询块,行读取数为54。 执行计划中的这个评估有多准确呢?
  执行如下查询查看语句实际被执行的次数: mysql> show status like "handler_read_rnd_next"; +----------------------------+-------+ | Variable_name              | Value | +----------------------------+-------+ | Handler_read_rnd_next      | 17    | +----------------------------+-------+ 1 rows in set (0.00 sec)
  handler_read_rnd_next显示实际上的读取是17行,而不是54行。
  这个17是怎么来的呢?
  这是一个哈希连接:
  -遍历整张表时,左表有9行数据+1行额外行。
  -右表有6行+1行额外行。
  优化器中会预估返回读取行,例如,54。在这个示例中,它并没有很好地猜测到返回的行数,它高估了行读取的数量。在大多数情况下,读取行数的估计不够精确,但可以肯定的是,它是足够稳健的,能达到相应的目的。 示例2
  创建例表t1: mysql> CREATE TABLE t1(a INT);
  在表中填充1536行数据后。将rds_max_row_read设置为500,进行以下测试查询: mysql> SELECT * FROM t1 WHERE a>6; ERROR HY000: Expected number of read rows exceeds the maximum allowed (see @@rds_max_row_read)
  在optimizer trac的帮助下,可以看到优化器估计的读取行数是512行,因此查询被终止。如果在a字段上添加索引(这是一件明智的事情),同一查询的估计读取行数是1,查询检测顺利通过。
  这个简单的示例说明:最大读取行能帮助您编写更加优质的查询语句。 结论
  最大读取行特性针对读取过多行的查询,识别和过滤出效率低下的查询。用户可以为读取行数设置阈值,超过该阈值则终止查询。为了识别此类查询,GaussDB(for MySQL)在优化器中进行了读取总行数的粗略估计。当查询终止时,可以检查optimizer trace,从中收集线索,以帮助重写更高效的查询。
  简而言之,最大读取行为用户提供了一个工具,使他们可以更充分地利用手上的资源。
  关注#华为云开发者联盟#  点击下方,第一时间了解华为云新鲜技术~
  华为云博客_大数据博客_AI博客_云计算博客_开发者中心-华为云

太原火工区厂矿搬迁改造,加速产业转型布局,老城北迎来百年蝶变即将走进崭新的2023年,太原城市建设在哪里变化最大?将成为新兴的投资置业沃土?在2022年12月中旬,山西省召开的经济工作会议,给11座地级市建设重点定调,其中明确太原市的两个重比潘通好看?日本流行色彩协会公布2023流行色预测!Pantone潘通在12月刚公布VivaMagenta2023流行色预测,日本色彩协会JAFCA也紧跟其后,于近期正式公布了由该协会结合本年度情绪的关键词所选择的2023年度代表色武汉三镇主帅佩德罗比赛不需过多动员,球员都想拿冠军扬子晚报网12月27日讯(记者张晨瑆孙云岳张昊)北京时间12月27日,在2022赛季中超联赛第33轮的一场事关争冠的焦点比赛中,武汉三镇队20击败浙江队,距离中超冠军仅一步之遥。赛某经纪人如果文班亚马不受伤,他将是历史最伟大球员一位NBA经纪人称赞维克托文班亚马说如果他不受伤,他将成为历史最伟大球员。文班亚马效力于法甲联赛,场均得到22。7分9个篮板。他在全世界最有运动天赋之一的联赛打球,他是联盟最佳球员没钱导致的降级!失去了利用价值,投机商许老板还会要广州队么?自从李玮锋和郑智分别在广州两队上任后,都明确告知自己的球员,必须要在赛季结束后压对手一头。一来是为了保级,二来同样是菜鸟教练,同样是昔日国足大佬,都不希望被对方骑在头上!而这一次李班切罗所有人都知道,詹姆斯是我从小到大最喜欢的球员魔术新秀保罗班切罗今日在赛前训练后接受了采访。谈到将生涯首次迎战勒布朗詹姆斯的感受,班切罗说对我来说,这太棒了。这对我来说是个特别的时刻,伙计。任何认识我的人都知道,从我小时候起,范德法特梅西不是球王,他的职业成就不如罗纳尔多和里瓦尔多荷兰足球名宿范德法特认为,随着梅西带领阿根廷夺取了卡塔尔世界杯,对于35岁的梅西来说,这是一件非常不容易的事情,甚至很多人及一些媒体把梅西和马纳多纳,贝利称为球王,我认为梅西根本没广州队提前降级,让人唏嘘,中国足球纯粹到几乎没有了!广州恒大14不敌长春,提前一轮降级,作为中超曾经的八冠王,在亚洲赛场上也两夺亚冠。但是现在命运好像不太眷顾广州队,现在他们提前一轮降级,曾经的中超霸主面对降级的处境,真的让人不禁唏杨鸣太冤了!CBA裁判坑惨辽宁队,范子铭赛后道歉戳穿裁判误判CBA常规赛第19轮上演了一场焦点大战,辽宁本钢大战北京首钢,两支球队都作为总冠军级别的球队,历来也有很多的故事和渊源,两支球队本赛季整体的表现都不错,排名也非常接近,所以说本场比波特不确定詹姆斯的伤势如何,他的受伤对我们是一个打击直播吧12月28日讯英超第17轮,切尔西主场20战胜伯恩茅斯。赛后切尔西主帅波特接受了BBC的采访。谈到本场取胜,波特说道这是球员们的功劳,你永远不会知道打破僵局后,场上会发生什么70!三镇稳夺3连冠末轮将与泰山齐赢30,创3年神话中超联赛收官在即,筹备组和足协决定本年度结束本赛季的所有比赛,如果没有伤病问题,这个计划似乎没有问题。可惜,计划赶不上变化,因为多队伤病满营,导致多场关键比赛无奈被弃赛,第33轮比
没买车的人,是利大于弊还是弊大于利很多人没买车时会觉得买辆车很好,但有的人买辆车又认为没买车更好,到底是利大于弊还是弊大于利呢,那小编今天就带大家来看看买车的优点扩展生活半径没有车之前,住所位置直接决定了你的生活方2022年还能出国旅游吗?为何出国打工,许多单位不协助办理护照?最近期间接到很多粉丝咨询,说很久没出国了,想出国旅游一趟,问一下现在好办理吗?2022年还能出国旅游吗?现在想出国旅游,将要面临大概五个难点。护照问题如果你的护照到期了,或者是你现秦帝桥祭我舅奶奶家姓陈,住赣榆青口三洋港。小时候去舅奶奶家,站在门口,向东隔着海能看到连绵的云台山,我知道,我们家在那里向北能看到海上有一个小岛,舅奶奶告诉我说那个岛上有泰山奶奶庙,叫奶奶好玩博山文旅即将开学!来博山做个填空题吧!家乡的山水,家乡的美食家乡的牵挂马上就要开学啦!在你踏上车的一瞬间想念家乡的思绪也就不由自主地飘起来了吧在开学前一起再()一次!开学前再去吃一次熟悉的早饭吧每个地方都有自己的早餐之助力乡村振兴黔货进万家社区活动第一站从黔出发在小车河街道举行8月27日至28日,黔货进万家全国大型社区农特产品推介展示活动第一站从黔出发,在小车河街道R区财富广场举行。据悉,此活动通过线上展示线下互动产品推介社区市集民俗表演等方式,充分展示容易上瘾的五子棋游戏我下得最多的棋,当属五子棋。最近在微信小游戏中,玩得比较频繁。总共已对弈了300多盘,累计胜率为67左右。依稀记得我还在四五岁时,有一次在伯父家里做客,一个姐姐教会了我下五子棋。规乐视起死回生了,256GB存储仅999元,iPhone13Pro的外观说起乐视就让人想到贾跃亭,很多网友说他是骗子,割完韭菜后就跑美国去了,每次都说下周回国,没有一次回来的,贾跃亭的确坑了不少大佬明星和投资者,毕竟以当初的市场,过早进入新能源汽车了,8月31日晚间,刚刚得知3个重要消息,明天怎么走?最新消息!今天是8月31日星期三,晚上23点27分,正准备睡下,就发现在证券市场的消息很不简单,其中有三条特别重要,事关明天的行情走势,给所有人一个关键提醒消息一国常会支持刚性和改Redmi首款平板曝光售价或在1500元以下,又走性价比老路?这两年平板电脑的需求量逐步扩大,也正因此越来越多的手机品牌加入了这一行列,而小米平板在停更了3年之后,推出了全新的小米平板5系列,并且小米凭借着这一系列打了一个非常漂亮的翻身仗。可最近值得熬夜追的五部剧,罚罪只能排第三,你在追哪一部?进入8月底,国产电视剧又一次井喷热播,拯救观众们剧荒的同时也再一次掀起了一波又一波观剧热潮。而今天我就最近热播多部电视剧中,给大家推荐值得熬夜追的五部剧,不懂有没有你正在追的那一部苍岩山游记头条创作挑战赛苍岩山位于河北省石家庄市西南50公里,地处井陉县境内,为中国历史文化名山国家重点风景名胜区国家4A级旅游区,苍岩山福庆寺做为苍岩山的核心景区被列为中国重点文物保护单位