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

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: 简介:快速学习阿里云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数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
27天前
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
105 6
|
27天前
|
SQL 关系型数据库 MySQL
Mysql学习笔记(三):fetchone(), fetchmany(), fetchall()详细总结
MySQL中用于数据检索的`fetchone()`, `fetchmany()`, `fetchall()`函数的功能、SQL语句示例和应用场景。
49 3
Mysql学习笔记(三):fetchone(), fetchmany(), fetchall()详细总结
|
27天前
|
SQL Ubuntu 关系型数据库
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
本文为MySQL学习笔记,介绍了数据库的基本概念,包括行、列、主键等,并解释了C/S和B/S架构以及SQL语言的分类。接着,指导如何在Windows和Ubuntu系统上安装MySQL,并提供了启动、停止和重启服务的命令。文章还涵盖了Navicat的使用,包括安装、登录和新建表格等步骤。最后,介绍了MySQL中的数据类型和字段约束,如主键、外键、非空和唯一等。
64 3
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
|
27天前
|
关系型数据库 MySQL 数据库
Mysql学习笔记(四):Python与Mysql交互--实现增删改查
如何使用Python与MySQL数据库进行交互,实现增删改查等基本操作的教程。
55 1
|
1月前
|
人工智能 自然语言处理 关系型数据库
阿里云云原生数据仓库 AnalyticDB PostgreSQL 版已完成和开源LLMOps平台Dify官方集成
近日,阿里云云原生数据仓库 AnalyticDB PostgreSQL 版已完成和开源LLMOps平台Dify官方集成。
|
5月前
|
SQL Oracle 关系型数据库
MySQL学习笔记
MySQL学习笔记
35 0
|
3月前
|
SQL druid Java
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
53 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
|
3月前
|
SQL Java 关系型数据库
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(上)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
107 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(上)
|
3月前
|
SQL 关系型数据库 MySQL
MySQL学习笔记
这篇文章是一份关于MySQL数据库操作的学习笔记,涵盖了数据库的终端操作、数据类型、建表约束、事务处理以及SQL的连接查询等基础知识点。
|
3月前
|
SQL 关系型数据库 MySQL
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)(下)
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)
37 6