如果你在使用Azure Databases for PostgreSQL时遇到性能问题,这些问题通常可以通过执行基本的故障排除步骤来了解瓶颈的原因,然后探索修复它的选项来解决这些问题。
1 -资源利用率:
确保您没有超出任何资源限制,达到高水平的资源利用率将导致性能问题,这可以通过在Azure Portal上监控服务器的资源利用率来避免,这是很重要的。
在Azure数据库的PostgreSQL中,资源限制是由你使用的服务层,vcore的数量和你提供的存储大小决定的。所有的这些信息都被记录在这里和这里,你可以导航到你的Azure数据库PostgreSQL,并使用Metrics Bland引擎来检查你是否超出了资源限制。
如果您的工作负载已经达到这些服务器指标的最大值,请考虑扩展资源以适应工作负载,并检查顶级查询用户并调优它们。

2-确保使用应用端最佳业务:
a)连接池:通过重用现有连接,显著降低连接延迟,并在服务器上启用更高的数据库吞吐量(每秒事务数)。
通常,应用程序端池会打开一堆闲置在数据库上的连接。空闲应用程序在每个连接上消耗10MB的内存,还可能为建立新连接而产生争用,并降低查询速度。你可以在这里了解更多。
本质上,如果您看到大量的空闲连接,建议在适当的位置放置一个PostgreSQL特定的连接池(服务器端连接池)。我们建议使用pgbouncer来实现这一点。你可以在这里找到配置和安装pgbouncer的步骤。
b)加速组网:对虚拟机实现单根io虚拟化(SR-IOV),大大提升虚拟机的组网性能。这种高性能路径绕过了主机与数据路径,减少了延迟、抖动和CPU利用率,用于支持的VM类型上要求最高的网络工作负载。
c)使用查询缓存在Azure DB上为PostgreSQL提高读密集型工作负载的性能:Pgpool-II查询缓存,Redis缓存,Memcached是最受欢迎的外部查询缓存解决方案。
d)应用程序和数据库应该在同一个数据中心:确保应用程序和数据库服务器在同一个数据中心,以避免开销的网络延迟。
e) CPU耗尽:单线程应用程序可能导致一个CPU耗尽,而其他CPU未被充分利用。考虑将工作负载并行化,以利用所有可用的vCores。
f) TCP_NODELAY: TCP_NODELAY是一个客户端设置,应该考虑在客户端虚拟机(VM)上。受益于TCP_NODELAY选项的应用程序通常倾向于执行较小的非频繁写操作,并且对延迟特别敏感。例如,通过这个设置,延迟可以从15-40毫秒减少到2-3毫秒。
3-利用ANALYZE命令
ANALYZE收集数据库中表内容的统计信息,并将结果存储在pg_statistic系统目录中。随后,查询计划器使用这些统计信息来帮助确定最有效的查询执行计划。你可以在这里了解更多。
如果没有参数,ANALYZE将检查当前数据库中的每个表。通过一个参数,ANALYZE只检查那个表。还可以提供一个列名称列表,在这种情况下,只收集这些列的统计信息。
4 -总体缓慢
a)考虑禁用pg_stat_statements,这可以通过访问Azure Portal上的服务器参数刀片服务器并设置"pg_stat_statements "来完成。跟踪没有。
禁用此功能后,一些客户的工作负载的性能提高了50%。禁用pg_stat_statements的代价是无法解决性能问题。
b)网络时延:检查客户端与数据库服务实例之间的网络时延。您可以通过运行简单的查询’ SELECT 1 '来检查网络延迟。
c)考虑禁用以下服务器参数,以减少数据库端的开销。这些服务器参数有助于理解您的工作负载,但事实证明,启用这些参数会导致性能下降。
—log_duration = OFF
—log_min_duration_statement = -1
—log_statement_stats = OFF
d) Checkpoint:定时将缓存的数据刷新到磁盘上,以保证数据的持久性。这是一项IO紧张的工作,会对性能产生一些影响。对于较大的数据库,请考虑更改以下两个服务器参数:
-
bgwriter_delay = 20
-
checkpoint_completion_target = 0.2
e) Autovacuum:
PostgreSQL使用多版本并发控制(MVCC)来实现更高的数据库并发性。每次更新都会导致插入和删除,而每次删除都会导致行被软标记以便删除。软标记识别稍后将被清除的死元组。为了执行这些任务,PostgreSQL会运行一个真空作业。更多信息可以在这里找到。
需要调整“autovacuum_*”服务器参数,使其更有效、更少侵入性。
使用Microsoft Intelligent Performance工具来探索被认为是顶级用户的查询,并了解丢失的索引以及对工作负载的建议和全面分析。Azure数据库的智能性能包括:
1)查询存储:
Azure Database for PostgreSQL中的查询存储特性提供了一种跟踪查询性能的方法。查询存储通过帮助您快速找到运行时间最长和资源最密集的查询,从而简化了性能故障排除。查询存储自动捕获查询和运行时统计信息的历史记录,并保留它们供您查看。它按时间窗口分隔数据,这样您就可以看到数据库的使用模式。所有用户、数据库和查询的数据都存储在PostgreSQL Azure数据库实例的一个名为azure_sys的数据库中。
在这里了解更多关于查询存储的信息。
您还可以查看查询存储的一些使用场景和查询存储的一些最佳业务。
2)查询性能洞察
Query Performance Insight帮助您快速确定运行时间最长的查询是什么,它们如何随时间变化,以及什么等待正在影响它们。
3)性能的建议
性能建议特性分析您的数据库,以创建定制的建议以提高性能。为了生成建议,分析将查看各种数据库特征,包括模式。在服务器上启用查询存储以充分利用性能建议特性。在实现任何性能建议之后,您应该测试性能以评估这些更改的影响。
文章参考:
-
Performance updates and tuning best practices for using Azure Database for PostgreSQL
-
Performance best practices for using Azure Database for PostgreSQL
-
Improve Performance of Read Intensive Workloads on Azure DB for PostgreSQL using Query Caching
-
Set up Pgpool-II Query Caching with Azure Database for PostgreSQL
-
Steps to install and setup PgBouncer connection pooling proxy with Azure DB for PostgreSQL
原文标题:Performance Troubleshooting Basics on Azure Database for PostgreSQL
原文作者:Bashar Hussein
原文地址:https://techcommunity.microsoft.com/t5/azure-database-for-postgresql/performance-troubleshooting-basics-on-azure-database-for/ba-p/819227




