阿里云PostgreSQL_开发实践 | 学习笔记

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
简介: 简介:快速学习阿里云PostgreSQL_开发实践

开发者学堂课程【PostgreSQL云上开发实践:阿里云PostgreSQL_开发实践】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/528/detail/7105


阿里云PostgreSQL_开发实践


目录:

一.如何解决

二.TOP SQL

.最耗 IO SQL

.当前慢 SQL

.plpgsql 函数性能诊断

.plpgsql 判断有无满足条件记录

.事务可靠性、可用性级别设置

.防雪崩

.DDL 操作建议

十. 限制慢 SQL 并发度

. 杀会话、杀 QUERY

比如说我们的查询的数据使用的过程当中发生了大量数据的变更导致数据比如说出现了一些倾斜,执行计划又没有及时的收集,导致执行计划的不准确,是一种,执行统计信息导致。

那么另外还有一种说使用绑定变量,使用了绑定变量之后,通用的指定计划和我们通常输入的一些变量,它的通用执行计划和custom的执行计划并不匹配,导致执行计划不准确,也是一种。

一.如何解决?

1. 更新统计信息

2. SQL Hint

l 强制扫描

l 索引扫描

SQL Hint 用法:

1. 创建 extension

2. 加载 SO 文件

3. 把 hint 写上


二.TOP SQL:

TOP SQL 是数据库使用过程当中,特别是优化的过程当中用的最多的。

pg_state_statements 这个插件可以实现很多功能。 

动态视图:

image.png 


三.最耗IO SQL

单次调用最耗 IQ SQL TOP 5

Select userid::regrole, dbid, query from pg_stat_statements order by(blk_read_time+blk_write_time)/call desc limit 5;

总最耗 IO SQL TOP 5

Select userid::regrole, dbid, query from pg_stat_statements order by (blk_read_time+blk_write_time) desc limit 5;

最耗时 SQL

单次调用最耗时 SQL TOP 5

select userid::regrole, dbid, query from pg_stat_statements order by mean_time desc limit 5;

总最耗时 SQL TOP 5

select userid::regrole, dbid, query from pg_stat_statements order by total_time desc limit 5;

响应时间抖动最严重 SQL

select userid::regrole, dbid, query from pg_stat_statements order by stddev_time desc limit 5;

最耗共享内存 SQL

select userid:regrole, dbid, query from pg_stat_statements order by (shared_blks_hit+shared_blks_dirtied) desc limit 5;

最耗临时空间 SQL

select userid::regrole, dbid, query from pg_stat_statements order by temp_blks_written desc limit 5;


四.当前慢 SQL:

运行中慢 SQL

-select * from pg_stat_activity where now()-query_start > interval '?s’;·长运行中事务

-select * from pg_stat_activity where state='active' now()-xact_start >interval "?s";

长空闲事务

-select * from pg_stat_activity where state=‘idle in transaction'now()-xact_start > interval '?s';

长2PC事务

-select * from pg_prepared_xacts where now()-prepared > interval '?s';

慢 SQL 执行计划详情:

auto_explain

慢 sQL 执行计划详情

-plan

- node time

-buffers, hints

-filter


五.plpgsql 函数性能诊断

l auto_explain

l plpgsql 函数中每一个调用的详细执行计划

plpgsql 函数debug

l pldebugger extension + pgadmin

l raise notice

l print stack

-GET STACKED DIAGNOSTICs variable {= | := } item[ , ...];

- GET [ cURRENT ]DIAGNOSTICs variable {= [ := }item[ , ... ]; 

 

六.plpgsql判断有无满足条件记录

l perform 1 from tbl where .... limit 1;

l if FOUND then

l else

l end if;

l DON'T use

- select count(* ) into var from tbl where ....;- if var >= 1 then

- else

- end if;


七.事务可靠性、可用性级别设置

-synchronous_standby_names

l on, remote_apply,remoie_write, local

-synchronous_standby_names

l [FIRST] num_sync ( standby_name L ...])

l ANY num_sync ( standby_name [. ...])

l standby_name [, ...]

image.png

通常来说,在业务系统里面有一些事物,比如说涉及到钱,涉及到资金对可靠性的要求特别高,另外一些只是一些用户的操作日志一些用户的行为跟踪日志,可靠性要求比较低。

 

八.防雪崩

statement_timeout

- 语句超时,防止雪崩

lock_timeout

- 锁超时

deadlock_timeout

- 死锁超时

idle_in_transaction_session_timeout,

- 空闲中事务超时

通常来说,业务系统会怎样,业务系统通常会发起更多的连接过来,因为一个连接一旦处理不过来的时候,一定会有新的请求过来,然后导致连接越来越多,把连接打满,另外一个是即使连接打满了那边的请求,还有堆积,有应用端还有堆积,因为你的数据库已经处理响应不过来了。

如何防止?

设 statement 这样一个 time out 的参数。 


九. DDL 操作建议

锁等待机制介绍

https://github.com/digoal/blog/blob/master/201705/20170521_01.md

DDL、大锁建议

- begin;

- set lock_timeout='ns';

- DDL

- end;

 

十. 限制慢 SQL 并发度

杀掉最近发起的慢 SQL,老的慢 SQL 继续,保证 N 个慢 SQL 并发

- select pg_terminate_backend(pid) frompg_stat_activity where now()-query_start >

interval '? second' order by query_start offset $N;

- 或pg_cancel_backend(pid)


十一. 杀会话、杀 QUERY

杀会话

- select pg_terminate_backend(pid);

杀某个会话

- select pg_terminate_backend(pid) from pg_stat_activity where

pg_backend_pid()<>pid;

杀所有会话

杀某个用户的所有会话

- select pg_terminate_backend(pid) from pg_stat_activity where usename=?and pid>pg_backend_pid();

杀 QUERY

- select pg_cancel_backend($pid);

.防 DDoS

auth_delay

- auth_delay.milliseconds = '500'

是否被 DDoS

V1、当前总连接数:

- select count(*) from pg_stat_activity;

V2、最大允许连接数:

- show max_connections;.

V3、当前已占用 slot 数:

- netstat -anplgrep -c $xxxx

DDoS 判断标准:

- (V2= v3)>V1

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
26天前
|
关系型数据库 分布式数据库 数据库
成都晨云信息技术完成阿里云PolarDB数据库产品生态集成认证
近日,成都晨云信息技术有限责任公司(以下简称晨云信息)与阿里云PolarDB PostgreSQL版数据库产品展开产品集成认证。测试结果表明,晨云信息旗下晨云-站群管理系统(V1.0)与阿里云以下产品:开源云原生数据库PolarDB PostgreSQL版(V11),完全满足产品兼容认证要求,兼容性良好,系统运行稳定。
|
2月前
|
关系型数据库 分布式数据库 数据库
阿里云PolarDB登顶2024中国数据库流行榜:技术实力与开发者影响力
近日,阿里云旗下的自研云原生数据库PolarDB在2024年中国数据库流行度排行榜中夺冠,并刷新了榜单总分纪录,这一成就引起了技术圈的广泛关注。这一成就源于PolarDB在数据库技术上的突破与创新,以及对开发者和用户的实际需求的深入了解体会。那么本文就来分享一下关于数据库流行度排行榜的影响力以及对数据库选型的影响,讨论PolarDB登顶的关键因素,以及PolarDB“三层分离”新版本对开发者使用数据库的影响。
74 3
阿里云PolarDB登顶2024中国数据库流行榜:技术实力与开发者影响力
|
2月前
|
关系型数据库 分布式数据库 数据库
阿里云瑶池数据库训练营权益:PolarDB开发者大会主题资料开放下载!
阿里云瑶池数据库训练营权益:PolarDB开发者大会主题资料开放下载!
|
3月前
|
存储 SQL Cloud Native
深入了解云原生数据库CockroachDB的概念与实践
作为一种全球领先的分布式SQL数据库,CockroachDB以其高可用性、强一致性和灵活性等特点备受关注。本文将深入探讨CockroachDB的概念、设计思想以及实践应用,并结合实例演示其在云原生环境下的优越表现。
|
22天前
|
机器学习/深度学习 分布式计算 数据挖掘
阿里云 MaxCompute MaxFrame 开启免费邀测,统一 Python 开发生态
阿里云 MaxCompute MaxFrame 正式开启邀测,统一 Python 开发生态,打破大数据及 AI 开发使用边界。
199 1
|
1月前
|
Cloud Native 关系型数据库 分布式数据库
热烈祝贺阿里云PolarDB登顶2024最新一期中国数据库流行榜
【2月更文挑战第3天】热烈祝贺阿里云PolarDB登顶2024最新一期中国数据库流行榜
|
2月前
|
关系型数据库 MySQL
MySQL学习笔记
MySQL学习笔记
|
2月前
|
安全 关系型数据库 MySQL
某教程学习笔记(一):09、MYSQL数据库漏洞
某教程学习笔记(一):09、MYSQL数据库漏洞
17 0
|
2月前
|
缓存 数据可视化 安全
开发阿里云 RPA 机器人的技巧
在当今数字化时代,机器人流程自动化(RPA)技术正逐渐成为企业提高效率和优化业务流程的重要手段。阿里云 RPA 作为一种强大的工具,为开发高效的机器人提供了丰富的功能和支持。本文将分享一些开发阿里云 RPA 机器人的技巧,帮助您更好地利用该平台的能力。
|
2月前
|
Cloud Native 关系型数据库 分布式数据库
2024最新一期中国数据库流行榜公布:阿里云PolarDB登顶
PolarDB登顶国产数据库流行榜,持续引领云原生数据库创新
2024最新一期中国数据库流行榜公布:阿里云PolarDB登顶