草庐IT

糟糕,数据库异常不可用怎么办?

华为云开发者社区 2023-03-28 原文
摘要:糟糕,数据库异常不可用怎么办?挺着急的,在线等。

本文分享自华为云社区《糟糕,数据库异常不可用怎么办?》,作者:GaussDB 数据库。

随着数字化转型的加速,数据量爆发式增长,用户对数据库运维能力要求更高,实现对数据库的高效智能管理,尤其是业务异常时,数据库运维平台能自动定位故障并修复,或者提供有价值信息,帮助客户快速定位解决问题。

华为云数据库团队打造的RDS for MySQL智能DBA助手,为数据库管理人员提供了一站式数据库运维方案,能够帮助用户快速处理异常,保持业务稳定运行。近期,我们新上线了自治限流功能,通过限流非核心业务SQL来保障核心业务稳定运行,下面将为您带来该项业界领先的功能的详细解读。

在遭遇异常流量高峰时,如何处理?

在实际运维场景中,客户因为业务变更或者业务高峰期会带来流量高峰,导致系统指标异常,实例CPU飙升近100%,会话SQL处理变慢,活跃连接数增加,数据库响应异常甚至不可用。可能的原因有以下两个方面:

  1. SQL问题:SQL执行效率慢,如对无主键、无索引的表进行查询操作时,CPU和 IO被打满。
  2. 流量问题:突发的流量急剧上升,数据库容量达到瓶颈,影响正常业务。

解决方案:

针对上述问题,一般会采用两种方式来处理:

方式一:先分析异常SQL,定位后手动Kill会话

方式二:简单粗暴,重启数据库。

但面对复杂问题,传统解决方案往往无法从根本上解决,定位解决问题花费时间长,导致业务受损。针对这一挑战,业界采用限流的方式来处理,不区分业务,即不会区分限流SQL所在的库或者客户端用户,这可能导致无差别的kill会话,核心业务受损。

我们今天介绍的自治限流功能是如何应对这一潜在风险呢?

自治限流,指的是通过预先设置限流策略,自动限定执行SQL的并发度,通过小部分业务受损,保障核心业务的正常运行。具体来说,可以通过以下三个策略来进行流控:

分库、分用户设置限流范围

自治限流功能支持分库、分用户两种方式设置,客户根据业务情况,识别核心业务库和客户端用户,按需选择相应的限流方式。

  • 按库设置:根据业务重要程度,选择对特定的一个或者多个库进行限流,默认不区分库名。
  • 按用户名设置:根据不同用户业务差异,选择对特定的一个或者多个用户进行限流,默认不区分用户。

设置限流时间:

通过设置限流时间窗(即自治限流功能只在该时间段生效)和每次最大限流时长(即自治限流生效后持续时长),方便定位SQL异常,请注意:同一天只在该时间窗内生效一次。

设置限流策略

条件1:根据业务情况,设置CPU利用率大于多少 【且/或】 活跃会话数大于多少,且上述条件持续时间大于多少分钟,会触发限流。

条件2:设置允许的最大活跃并发数,当前活跃会话数大于最大活跃会话数时,会将会话数清理到小于最大活跃会话数。

设置界面如下:

完成上述设置后,自治限流功能可以自动检测客户实例异常,触发限流策略后,根据配置的限流范围和时间,自动进行分库分用户限流处理,在保证核心业务SQL稳定运行的前提下,限制引发CPU飙升的新上业务SQL,带来活跃会话数逐渐降低,CPU下降到正常值,QPS恢复到业务正常水平,数据库实例恢复正常。

流量高峰常常是不可预测的,这给运维带来非常大的挑战和工作负担。华为云数据库自治限流功能,通过分库与分用户限流方式,自动检测数据库异常,并及时进行限流处理,保障核心业务的稳定运行,极大减轻了DBA的运维压力,使其更聚焦数据架构设计以及数据价值挖掘等核心工作。目前该功能已上线,欢迎大家体验。https://www.huaweicloud.com/product/mysql.html

 

点击关注,第一时间了解华为云新鲜技术~

有关糟糕,数据库异常不可用怎么办?的更多相关文章

  1. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  2. ruby-on-rails - Rails - 乐观锁定总是触发 StaleObjectError 异常 - 2

    我正在学习Rails,并阅读了关于乐观锁的内容。我已将类型为integer的lock_version列添加到我的articles表中。但现在每当我第一次尝试更新记录时,我都会收到StaleObjectError异常。这是我的迁移:classAddLockVersionToArticle当我尝试通过Rails控制台更新文章时:article=Article.first=>#我这样做:article.title="newtitle"article.save我明白了:(0.3ms)begintransaction(0.3ms)UPDATE"articles"SET"title"='dwdwd

  3. ruby - #之间? Cooper 的 *Beginning Ruby* 中的错误或异常 - 2

    在Cooper的书BeginningRuby中,第166页有一个我无法重现的示例。classSongincludeComparableattr_accessor:lengthdef(other)@lengthother.lengthenddefinitialize(song_name,length)@song_name=song_name@length=lengthendenda=Song.new('Rockaroundtheclock',143)b=Song.new('BohemianRhapsody',544)c=Song.new('MinuteWaltz',60)a.betwee

  4. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

  5. ruby - Ruby 中的隐式返回值是怎么回事? - 2

    所以我开始关注ruby​​,很多东西看起来不错,但我对隐式return语句很反感。我理解默认情况下让所有内容返回self或nil但不是语句的最后一个值。对我来说,它看起来非常脆弱(尤其是)如果你正在使用一个不打算返回某些东西的方法(尤其是一个改变状态/破坏性方法的函数!),其他人可能最终依赖于一个返回对方法的目的并不重要,并且有很大的改变机会。隐式返回有什么意义?有没有办法让事情变得更简单?总是有返回以防止隐含返回被认为是好的做法吗?我是不是太担心这个了?附言当人们想要从方法中返回特定的东西时,他们是否经常使用隐式返回,这不是让你组中的其他人更容易破坏彼此的代码吗?当然,记录一切并给出

  6. ruby - 在 Ruby 中重新分配常量时抛出异常? - 2

    我早就知道Ruby中的“常量”(即大写的变量名)不是真正常量。与其他编程语言一样,对对象的引用是唯一存储在变量/常量中的东西。(侧边栏:Ruby确实具有“卡住”引用对象不被修改的功能,据我所知,许多其他语言都没有提供这种功能。)所以这是我的问题:当您将一个值重新分配给常量时,您会收到如下警告:>>FOO='bar'=>"bar">>FOO='baz'(irb):2:warning:alreadyinitializedconstantFOO=>"baz"有没有办法强制Ruby抛出异常而不是打印警告?很难弄清楚为什么有时会发生重新分配。 最佳答案

  7. ruby - 怎么来的(a_method || :other) returns :other only when assigning to a var called a_method? - 2

    给定以下方法:defsome_method:valueend以下语句按我的预期工作:some_method||:other#=>:valuex=some_method||:other#=>:value但是下面语句的行为让我感到困惑:some_method=some_method||:other#=>:other它按预期创建了一个名为some_method的局部变量,随后对some_method的调用返回该局部变量的值。但为什么它分配:other而不是:value呢?我知道这可能不是一件明智的事情,并且可以看出它可能有多么模棱两可,但我认为应该在考虑作业之前评估作业的右侧...我已经在R

  8. ruby-on-rails - 我该怎么办 :remote location validation with CarrierWave? - 2

    我在我的Rails3示例应用程序上使用CarrierWave。我想验证远程位置上传,因此当用户提交无效URL(空白或非图像)时,我不会收到标准错误异常:CarrierWave::DownloadErrorinImageController#createtryingtodownloadafilewhichisnotservedoverHTTP这是我的模型:classPaintingtrue,:length=>{:minimum=>5,:maximum=>100}validates:image,:presence=>trueend这是我的Controller:classPaintingsC

  9. ruby - 我如何添加二进制数据来遏制 POST - 2

    我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_

  10. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

随机推荐