PostgreSQL 高性能调优指南

PostgreSQL High Performance Tuning Guide

像专业人士一样调整 PostgreSQL 的技巧 | 了解如何防止 Postgres 性能问题

你将学到什么

  • PostgreSQL 架构理论及其幕后工作原理
  • 了解如何设置shared_buffers以获得更好的性能
  • 了解如何配置 Vacuum 以保持数据库干净、快速
  • 如何有效地使用索引
  • 实践索引优化策略
  • 如何理解统计数据
  • 掌握如何发现查询问题
  • 练习查询优化技术
  • PostgreSQL 中扩展和复制的基本概念

要求

  • 您需要访问具有 10GB 可用磁盘空间的 Windows/Mac/Linux PC
  • 期望对数据库对象(例如表和索引)有基本的熟悉
  • 熟悉 Linux 会有帮助

描述

PostgreSQL 是最强大且易于使用的数据库管理系统之一。它得到了社区的大力支持,并且每年都在积极开发新版本。

PostgreSQL 支持 SQL 标准中包含的最高级功能。它还提供NoSQL功能以及非常丰富的数据类型和扩展。所有这些使得 PostgreSQL 成为软件系统中非常有吸引力的解决方案。

然而,从中获得最佳性能并不是一个容易解决的问题。您只需要正确的经验规则组合即可开始,适当的测试,可靠的监控和维护以保持系统良好运行,以及附加工具的提示来添加核心数据库不尝试处理的功能它自己的。

本 Udemy 课程旨在为您提供实施高性能 Postgres 的理论和实践知识。它将帮助您使用最新版本的 PostgreSQL 之一为企业应用程序构建动态数据库解决方案 

您将详细了解 PostgreSQL 的所有高级方面,包括逻辑复制、数据库集群、性能调整和监控。您还将使用 PostgreSQL 优化器,通过查看事务、锁定、索引和优化查询来配置 Postgres 以实现高速。

您应该接触一些数据库。需要对数据库对象(例如表和索引)有基本的熟悉。如果您没有或接触过 PostgreSQL,您会发现本 Udemy 课程非常有用。如果您已经使用 PostgreSQL 几年了,您仍然应该发现一些您不知道的有用命令或一些您没有尝试过的优化方法。您还将更深入地了解数据库的工作原理。

PostgreSQL 性能调优在线课程课程:

了解 PostgreSQL 服务器架构

  • 在本节中,我们将探讨 PostgreSQL 架构。
  • 共享缓冲区与操作系统缓存配合工作,而不是取代它。这些缓存通过减少所需的物理 I/O 来提高性能。
  • 为什么我们需要仔细设置检查点以限制崩溃恢复时间,同时不影响系统的其他性能?
  • 本节将向大家介绍为什么我们需要WAL Writer后台 Writer。
  • 查看查询处理器为了获取结果必须经过的阶段。
  • 实用程序子系统提供了维护数据库的方法,例如声明存储、更新统计数据和日志记录。

配置 Vacuum 以提高性能

  • 我们将理解为什么每次执行 UPDATE 或 DELETE 时,我们都会留下一个死行(并且可能是一个死索引条目),需要稍后通过某种形式的真空来清理。
  • 我们将了解到,当表由于过多的死元组而变得非常大时,性能往往会下降。因此,绝对不能避免 VACUUM 过程。
  • 本节解释了为什么最好使用数据库的 autovacuum 功能进行稳定的低强度清理工作,而不是禁用该功能并必须在较大的块中进行清理。

如何有效地使用索引

  • 了解每次在表中添加或更改行时添加索引都会增加开销。每个索引都需要满足足够的查询,以证明其维护成本是合理的。
  • 在本节中,我们将解释为什么查询的执行计划取决于表中的数据。如果数据的肉质性较低,PostgreSQL很可能会忽略索引
  • 在本节中,我们将了解为什么索引只有在具有选择性时才有用;它可用于仅返回表中的一小部分行。
  • 在本节中,我们将探讨如何有效地使用位图扫描

索引优化技巧

  • 除了使用索引之外,还可以为您的特定应用程序实施自定义策略以加快速度
  • 如何使用覆盖索引仅使用索引中的数据来回答查询。
  • 本节介绍为什么在外键上定义索引是一个很好的做法。
  • 在本节中,我们将探讨部分索引以及如何享受小而高效的索引。
  • 索引可能需要定期重建才能恢复最佳性能,并且根据索引顺序对基础数据进行聚类也有助于提高查询速度。
  • 我们将解释何时修改表的填充因子参数有用。
  • 在本节中,我们将了解在哪些情况下使用组合索引与多个独立索引更好。

利用统计数据

  • 在本节中,您将探索统计信息,这些统计信息可以帮助您查找和排序负责系统大部分负载的查询。
  • PostgreSQL 提供了大量统计数据。在本节中,我们将让您更轻松地利用他们的见解。
  • 我们将看到检测丢失索引的最快方法,但我们还将探讨何时需要删除索引。

发现查询问题

  • 我们将解释如何阅读查询计划并了解每种底层节点类型的工作原理。
  • 我们将了解查询如何作为一系列节点执行,每个节点执行一项小任务,例如获取数据聚合或排序。
  • 我们将探索查询中实际执行时间最长的部分,并查看它们是否具有适当的匹配成本。
  • 估计行实际 之间的差异可能会导致重大规划问题。我们将探讨在这种情况下我们可以做什么。

查询优化技巧

  • 我们将了解为什么在解决性能问题之前首先质疑语句的语义正确性很重要
  • 我们会明白为什么我们应该避免使用 SELECT *、ORDER BY 和 DISTINCT,除非我们确实需要它们并且没有其他方法
  • 我们将探索 PostgreSQL 功能,例如 CASE 语法和并行查询,以减少查询的执行时间

如何设置shared_buffers以获得更好的性能

  • 我们将看到 PostgreSQL 为默认的shared_buffers分配的值非常低,我们需要增加它以允许数据库有适当的共享内存大小。
  • 我们将介绍shared_buffers如何与操作系统缓存配合工作,而不是替换它,并且我们应该将其大小调整为总RAM的适度百分比。
  • 我们会明白,如果我们想要比为相对于操作系统缓存的shared_buffers分配一个百分比更好,我们需要分析缓冲区缓存内容

扩展和复制

  • 我们将看到复制如何通过将负载分布到多个数据库服务器上来提高软件系统的性能。
  • 在某些情况下,PostgreSQL 提供的复制功能还不够。有一些围绕 PostgreSQL 工作的第三方解决方案,提供额外的功能,例如 Pgpool-II 可以用作负载均衡器,Postgres-XL 实现了多服务器分布式数据库解决方案,可以操作大量数据并处理一个巨大的负载。

本课程适合谁:

  • 数据库管理员
  • 对影响应用程序设计和性能的高级数据库内部结构感兴趣的软件开发人员
  • 每个有兴趣构建更好的 PostgreSQL 应用程序的人
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。