如何防止数据库雪崩

简介:

如何防止数据库雪崩

作者

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插件的用法》

https://yq.aliyun.com/articles/17212

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

https://yq.aliyun.com/articles/57945

Count

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍如何基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
机器学习/深度学习 编解码 PyTorch
DenseNet的应用--语义分割--(DenseASPP )
转载自:https://blog.csdn.net/u011974639 DenseASPP DenseASPP for Semantic Segmentation in Street Scenes 原文地址:DenseASPP 收录:CVPR2018(IEEE Conference on Computer Vision and Pattern Recognition) 代码: PyTorch 简介: 将DeepLab系列中的ASPP和DenseNet中的密集连接相结合,构成了DenseASPP。
6037 1
|
6月前
|
机器学习/深度学习 弹性计算 编解码
2026年阿里云服务器4核8G租用价格,可选实例收费标准与最新活动价格
本文解析2026年阿里云4核8G云服务器租用价格及选择策略。涵盖经济型e实例、通用算力型u1/u2a、计算型c9i等多规格实例,价格从经济型e实例1M带宽年费1595.11元至计算型c9i实例3147.56元不等。不同实例适配不同场景:经济型e适合轻量应用,u2a以高性价比适配预算敏感用户,c9i专为高性能计算设计。
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
机器学习/深度学习 人工智能 自然语言处理
ai人工智能课程学什么
本内容全面介绍了AI课程的核心体系,涵盖基础理论、核心算法、应用领域及伦理责任等方面。从数学基础与编程技能到机器学习和深度学习算法,再到自然语言处理与计算机视觉等应用领域,系统阐述了AI技术的全貌。同时探讨了开发框架如TensorFlow和PyTorch的使用,并关注AI伦理与社会责任。通过分步验证与实践经验,帮助学习者规避AI局限性。展望未来,生成式人工智能等新兴技术将持续推动课程发展,助力职业成长与社会进步。
|
编解码
Matlab实现OFDM编解码,交织编码,卷积编码,LS信道估计,块状导频
Matlab实现OFDM编解码,交织编码,卷积编码,LS信道估计,块状导频
310 0
|
Web App开发 编解码 vr&ar
使用Web浏览器访问UE应用的最佳实践
在3D/XR应用开发中,尤其是基于UE(虚幻引擎)开发的高精度场景,传统终端因硬件局限难以流畅运行高帧率、复杂效果的三维应用。实时云渲染技术,将渲染任务转移至云端服务器,降低终端硬件要求,确保用户获得流畅体验。具备弹性扩展、优化传输协议、跨平台支持和安全性等优势,适用于多种终端和场景,特别集成像素流送技术,帮助UE开发者实现低代码上云操作,简化部署流程,保留UE引擎的强大开发能力,确保画面精美且终端轻量化。
787 17
使用Web浏览器访问UE应用的最佳实践
简单好用的图片取色器【可取RGB数值】
这篇文章介绍了如何使用Snipaste工具进行截图和取色,包括按下快捷键F1截图、选择图片区域、移动鼠标取色以及复制颜色值的步骤,并提供了操作界面的截图。
|
存储 运维 安全
软件体系结构 - 信息系统架构
【4月更文挑战第20天】软件体系结构 - 信息系统架构
939 13
|
机器学习/深度学习 人工智能 算法
将 Visual Basic 与人工智能结合:机器学习的初步探索
【4月更文挑战第27天】本文探讨了Visual Basic(VB)在人工智能,尤其是机器学习领域的应用。VB作为易学易用的编程语言,结合机器学习可为开发者提供简单的人工智能实现途径。通过第三方库、调用外部程序或自行开发算法,VB能实现图像识别、文本分类和预测分析等功能。尽管面临性能、人才短缺和技术更新的挑战,但随着技术发展,VB在人工智能领域的潜力不容忽视,有望创造更多创新应用。
675 0