如何防止数据库雪崩

如何防止数据库雪崩

作者

digoal

日期

2016-09-08

标签

PostgreSQL , DDL雪崩 , 业务雪崩 , 语句超时 , 数据库雪崩 , 数据库预热


背景

在数据库的使用过程中,一些微妙的操作,在特殊的场景中就可能导致雪崩效应。

1. 当数据库中存在未提交事务,并且未提交事务已经持有了某个表的哪怕是最小的锁时,如果此时对这个对象发起DDL操作,这个DDL操作将会堵塞接下来的其他对该对象的任意操作请求,包括读请求。

因为PG的锁等待判断是整个等待队列的冲突判断,这种判断的目的是防止某些锁请求一直被打断,从而这样设计的。

这种情况很容易引起雪崩。

2. 业务系统异常,导致数据库请求暴增,从而引起雪崩。

这种属于业务系统设计或BUG导致。

3. 主备切换后,热数据不在缓存中,导致请求变慢,如果在高峰期,应用会疯狂递交请求导致雪崩。

4. 执行计划出现异常,导致快SQL变成慢SQL,如果此类请求是高并发的,会直接引起雪崩。

如何规避雪崩

1. 语句超时

使用这种方法,可以有效的避免雪崩,通常雪崩是由业务高峰期的高并发小事务引起的,对这类QUERY加语句超时,可以很好的防止雪崩。

待缓存预热,或者执行计划恢复后,就能恢复正常。

例子
事务内语句级别

postgres=# begin;
BEGIN
postgres=# set local statement_timeout='2s';
SET
postgres=# select pg_sleep(1);
 pg_sleep
----------

(1 row)
postgres=# set local statement_timeout='1ms';
SET
postgres=# select pg_sleep(1);
ERROR:  canceling statement due to statement timeout
postgres=# end;
ROLLBACK

会话级别

postgres=# set session statement_timeout='1ms';
SET
postgres=# select pg_sleep(1);
ERROR:  canceling statement due to statement timeout

2. 缓存预加载
PostgreSQL提供了缓存快照和缓存预加载的功能,用户在切换主备角色前,可以对缓存进行预热,防止冷数据过多带来的雪崩效应。

参考

https://www.postgresql.org/docs/9.5/static/pgbuffercache.html

https://www.postgresql.org/docs/9.5/static/pgprewarm.html

3. 绑定执行计划
参考

《AliCloudDB for PostgreSQL pg_hint_plan插件的用法》

《关键时刻HINT出彩 - PG优化器的参数优化、执行计划固化CASE》

Count

时间: 2024-07-31 23:33:31

如何防止数据库雪崩的相关文章

数据库案例集锦 - 开发者的《如来神掌》

背景 「剑魔独孤求败,纵横江湖三十馀载,杀尽仇寇,败尽英雄,天下更无抗手,无可柰何,惟隐居深谷,以雕为友.呜呼,生平求一敌手而不可得,诚寂寥难堪也.」 剑冢中,埋的是剑魔独孤求败毕生几个阶段中用过的几柄剑: 利剑无意:第一柄是青光闪闪的利剑,凌厉刚猛,无坚不摧,弱冠前以之与河朔群雄争锋. 软剑无常:第二柄是紫薇软剑,三十岁前所用,误伤义士不祥,悔恨不已,乃弃之深谷. 重剑无锋:第三柄是玄铁重剑,重剑无锋,大巧不工,四十岁之前恃之横行天下. 木剑无俦:第四柄是已腐朽的木剑. 无剑无招:四十岁后,不

技术流乱入拜年帖 - 小鸡吉吉和小象(PostgreSQL)Pi吉的鸡年传奇

我家有只小鸡鸡,它的名字叫吉吉. 吉吉有一位铁杆鸡友大象Pi吉哥哥(PostgreSQL). 吉吉给大伙拜年啦,祝大家鸡年吉祥,新年新气息,与好鸡友大象哥哥愉快的玩耍,鸡情四射. 故事从吉吉和好鸡友大象哥哥偶遇的那天开始. 有一天,大象哥哥摆下国际象棋擂台,邀请各路英豪前来,就这样和吉吉偶遇啦. <想挑战AlphaGO吗?先和PostgreSQL玩一玩?? PostgreSQL与人工智能(AI)> 我们家的吉吉很勤劳,每天早上都打鸣,勤劳的小伙伴闻鸡起舞(你收到我们吉吉发出的异步消息了吗) &

PostgreSQL 数据库开发规范

PostgreSQL 数据库开发规范 背景 PostgreSQL的功能非常强大,但是要把PostgreSQL用好,开发人员是非常关键的. 下面将针对PostgreSQL数据库原理与特性,输出一份开发规范,希望可以减少大家在使用PostgreSQL数据库过程中遇到的困惑. 目标是将PostgreSQL的功能.性能发挥好,她好我也好. PostgreSQL 使用规范 命名规范 [强制]库名.表名限制命名长度,建议表名及字段名字符总长度小于等于63. [强制]对象名(表名.列名.函数名.视图名.序列名

震精 - 数据库还能这样玩 - 三十六计 (下)

PostgreSQL 三十六计 - 下 25. 数据库端编程,处理复杂业务逻辑. 在传统企业.电商.运营商等涉及用户交互.或者多个系统交互的业务场景中,通常一个事务涉及到很复杂的业务逻辑,需要保证数据的一致性,同时还需要与数据库多次交互. 比如银行开户,涉及的业务系统多,逻辑复杂.在传统企业中,通常也使用商业数据库的过程函数,实现此类复杂的逻辑. PostgreSQL的数据库过程函数支持的语言非常丰富,比如plpgsql(可与Oracle pl/sql功能比肩),另外还支持语言的扩展,编程语言可

微服务转型,雪崩效应是绕不过的一道坎

1.星火燎原 1.1农民眼中的微服务 本文讲的是微服务转型,雪崩效应是绕不过的一道坎,近年来,微服务就象一把燎原的大火,窜了出来并在整个技术社区烧了起来,微服务架构被认为是IT软件服务化架构演进的目标.为什么微服务这么火,微服务能给企业带来什么价值? 1.1.1 以种植农作物的思想来理解微服务 我们以耕种为例来看如何充分利用一块田地的: 先在地里种植了一排排玉米: 后来发现玉米脚下空地可以利用,再间隔一段距离再种上豆角,豆角长大后顺着玉米杆往上爬,最后紧紧地缠绕在玉米杆上: 再后来发现每排玉米之

云数据库memcached之热点key问题解决方案

背景 在分布式K-V存储系统中,对某个key进行读写时,会根据该key的hash计算出一台固定的server来存取该K-V,如果集群不发生服务器数量变化,那么这一映射关系就不会变化. 云数据库memcached就是这样一种K-V缓存系统.因此在实际应用中,某些高峰时段,有的云数据库memcached用户会大量请求同一个Key(可能对应应用的热卖商品.热点新闻.热点评论等),所有的请求(且这类请求读写比例非常高)都会落到同一个server上,该机器的负载就会严重加剧,此时整个系统增加新server

【独家】一文读懂非关系型数据库(NoSQL)

前言 NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL". 现代计算系统每天在网络上都会产生庞大的数据量.这些数据有很大一部分是由关系型数据库管理系统(RDBMSs)来处理,其严谨成熟的数学理论基础使得数据建模和应用程序编程更加简单. 但随着信息化的浪潮和互联网的兴起,传统的RDBMS在一些业务上开始出现问题.首先,对数据库存储的容量要求越来越高,单机无法满足需求,很多时候需要用集群来解决问题,而RDBMS由于要支持join,union等操作,一般不支持分

高人自有妙计:罗龙九六招制服云数据库大流量峰值

在9月20日-21日举办的大流量高并发互联网应用实践在线峰会上,阿里云数据库专家罗龙九(花名:玄惭)分享的主题是<云数据库大流量峰值保障最佳实践>,他结合历年双十一活动中云数据库保障经验,从弹性扩容.访问链路.架构设计.高可用配置.性能优化.参数优化六个方面详解讲解云数据库大流量峰值保障的最佳实践.  以下为在线分享观点整理. 弹性扩容 多数用户在双十一到来之前都会进行弹性扩容,常见的弹性扩容分为两类:本机升降级和跨机升降级.例如现在有一个6G/6C的RDS数据库想要升级到12G/12C,如果

老司机的双11手记:这么牛的阿里云数据库,你造怎么用吗?

老司机的双11手记 2016年天猫双11购物狂欢节已经完美落下帷幕,高峰期间订单创建每秒达到了XX万笔,总订单量达到了XX亿,技术指标再次刷新世界纪录.其中XX%的订单通过聚石塔订单推送,并在阿里云云数据库服务(AliCloudDB,曾称RDS)中完成存储和处理.在持续高压力冲击下,整个双11期间AliCloudDB表现坚如磐石: 高峰期间集群的总QPS达到了近XX每秒: 单个商家最高处理订单的能力超过XXX万单: XX万商家在AliCloudDB上稳定运行,全网实现了0故障,0丢单. 华丽数字