Planet PostgreSQL,一个来自网络的Postgres博客文章的聚合器

2021-01-29 02:23:32

几天前,我写了关于在计划的时间在db中运行任务的工具。在撰写本文时,我错过了pg_cron。因此,让我们现在来看一下。和以前一样,我在Ubuntu 20.04上使用PGDB apt repo,所以安装pg_cron很简单:= $ sudo apt-get install postgresql-13-cron之后,我需要启用它,…继续阅读"如何在特定时间在没有用户干预的情况下运行某些任务? –第2部分。

TLS允许在系统之间安全地传输数据,也是许多生产环境的要求。设置TLS的一部分是确保在系统内通过网络进行通信的所有内容也都具有TLS。如果您不对所有端点之间的流量进行加密,则可以进行监听。

较早的帖子描述了如何使用Crunchy Data PostgreSQL Operator在Kubernetes上使用TLS设置PostgreSQL集群。此设置非常适合在应用程序和/ database之间创建加密连接。 Postgres Operator还支持pgBouncer连接池,这引出了一个问题:如何在Kubernetes中为pgBouncer设置TLS连接?

由于pgBouncer位于您的应用程序和PostgreSQL之间,因此为pgBouncer设置TLS是一个更加复杂的过程。 Postgres Operator简化了此过程,但有助于了解幕后情况,以确保整个通信都加密,这很有帮助。

我想展示一种工具,用于在单个实例,复制设置和Kubernetes中运行特定版本的开源数据库。 AnyDbVer部署MySQL / MariaDB / MongoDB / PostgreSQL进行测试和实验。

Docker(或Podman)或dbdeployer(MySQL-Sandbox的后继产品)也可以启动特定的数据库版本,但是这种安装与生产设置有很大不同。

为所有任务保留物理服务器或虚拟机是不切实际的。通常,您只需要几个数据库实例,并具有使用systemd重新启动它并使用journalctl检查日志的功能。 AnydbVer产生一个或多个由Canonical(Ubuntu)LXD管理的Linux容器,并且LXD容器不使用分层文件系统设置就支持systemd。

Linux容器不是仿真层。在“主机”系统中,您可以查看容器创建的所有进程和文件。因此,性能与物理服务器上运行的同一数据库非常相似。

LXD设置相对容易,但是有时您可能只需要使用几个命令即可运行AnydbVer。 Vagrant可以启动未修改的Ubuntu虚拟机,并自动为您配置AnydbVer。

假设您需要确切的CentOS 7软件包版本:适用于MySQL 5.6.43-rel84.3的Percona Server:

[...]

数据库可能发生的所有事情,损坏并不是经常发生的事情,但是一旦损坏,可能会导致大量的停机时间和数据丢失。对于DBA来说,这可能是最恐怖的事情之一,而处理它的最佳方法就是一开始就不要处理它。

数据库损坏可以定义为与原始数据的意外修改或实际数据的不正确存储有关的问题。它是指在读取,写入,存储或处理原始数据的意外更改期间发生的数据库错误。

数据库损坏的症状包括从日志文件中获取警告消息到数据库服务器崩溃以及拒绝启动。

在这篇博客文章中,我将尝试列出一些管理措施和最佳实践,为了避免PostgreSQL数据库首先损坏,我们可以遵循这些管理措施和最佳做法,随后的文章将讨论我们必须从损坏的数据库中恢复的选项。

PostgreSQL数据库,或出于任何原因而导致的任何数据库都可能由于各种原因而损坏,其中一些是可以避免的,而其他一些则可以缓解。数据库损坏的三个主要原因是硬件/软件损坏,配置错误和用户错误。

硬件故障是数据库损坏的最主要原因之一。最常见的是坏磁盘,而罪魁祸首很少是坏内存。当硬盘出现问题时,我们之前写入的数据将不再存在或变得不同。通常,它会导致数据库崩溃,有时还会出现其他症状。

虽然坏记忆很不寻常,但并非没有。发生这种情况时,数据甚至在被写入磁盘之前就已损坏,最终损坏的数据被存储在磁盘上,并且通常会出现与损坏的磁盘类似的症状。

[...]

关于PostGIS的最不喜欢的事情之一是,由于参与的几何形状不符合OGC有效性规则,因此空间分析(例如并集,相交,差异)可能会失败。支持PostGIS地理处理功能的引擎GEOS的新版本提供了重写的“ OverlayNG”功能集,有望实现更好的地理处理鲁棒性。最后,发布了GEOS 3.9和PostGIS 3.1,我决定测试这些新版本,以检查TopologyException是否真的消失了。

到目前为止(2021年1月),pgdg存储库中的PostGIS仍基于GEOS 3.7,因此无法使用OverlayNG功能。如果您不想从源代码编译PostGIS,对于Ubuntu,您可以使用ubuntugis-unstable仓库。仅为Ubuntu 20.04(Focal)提供PostGIS 3.1和GEOS 3.9软件包。

另一方面,PostgreSQL 13不是强制性的:您也可以将最新的PostGIS与Postgres 12配对。 我决定使用以下已知包含无效几何的波兰公共数据集来测试新的PostGIS: 从GDOŚWFS服务器下载的Użytekekologiczny(自然保护的最低形式), 我针对数据集运行了“多边形内线的总和”查询。 首先是自然保护数据: SELECT sum(st_length(st_intersection(a.geom,b.way))),a.nazwa从uzytki_ekologiczne a,planet_osm_line b在哪里st_intersects(a.geom,b.way)GROUP BY a.nazwa; [...] 确保数据能够安全传输是许多生产系统的要求。 PostgreSQL支持TLS,作为加密网络通信,验证主机以及允许基于证书的身份验证的一种方式。

PostgreSQL的TLS功能可扩展到Kubernetes部署中。自4.3版以来,Crunchy Data Postgres Operator就提供了对TLS的支持,使用Kubernetes Secrets将TLS组件安全地安装到每个Pod。 PostgreSQL操作员对用于生成TLS证书的PKI并没有意见,而是为PostgreSQL服务器加载TLS密钥对和证书颁发机构(CA)。

因此,您正在建立下一个独角兽创业公司,并热衷于考虑一种能适应未来发展的PostgreSQL架构来容纳您的字节吗?在过去的5年中,作为数据库顾问,我看到了数十种无可救药的过度设计/超大型解决方案,但我的建议是简短而直截了当的:不要过度思考,并在数据库方面保持简单!与其花哨的数据库,不如专注于您的应用程序。只是在实际需要时才将显微镜转到数据库。那天到来时,首先,尝试所有常见的垂直放大方法和技巧。尽量避免使用衍生的Postgres产品,或采用分布式方法,或不惜一切代价进行自制的分片–直到您拥有不到一年的呼吸空间。

哇,这对2021年有何建议?我说的是大数据时代和超扩展性时代的一种简单的单节点方法……我肯定一定是Luddite或只是对过多的除夕香槟感到头晕。好吧,也许是这样,但让我们从更远的地方开始……

在假期中,我终于有一点时间赶上我的技术阅读/观看TODO列表(虽然还剩下几十个项目,啊!)……关于分布式MySQL体系结构的过去和当前状态,有一个很好的演讲。由Percona的Peter Zaitsev撰写。哦,MySQL ???不,不,我们并没有突然改变“马”,PostgreSQL仍然是我们的主要重点。只是在与扩展有关的许多关键点中,实际上同样的约束也适用于PostgreSQL。毕竟,它们都被设计为单节点关系数据库管理引擎。

简而言之,我正在总结演讲中的一些想法,并添加一些我自己的想法。对于那些过于担心数据库性能的人,我想提供一些思考的东西-因此过早地使用了一些过于复杂的架构。这样,“担忧者”会牺牲单节点数据库的其他一些良好属性

[...]

PostgreSQL每周人物专访Franck Pachot:我是Franck Pachot。我出生于法国南部(阿维尼翁),曾在巴黎(奥赛)学习,曾在巴黎,布鲁塞尔,达喀尔,利伯维尔,塔那那利佛,索菲亚-安提波利斯……工作,现在在瑞士定居了10年。我一直在从事IT方面的工作,主要涉及数据库,开发(数据架构和建模)和操作(安装,迁移,高可用性,调优)的工作,并且主要是作为顾问进行培训。我对所有数据库都充满热情,并且在可以提高数据库性能和开发人员之间的交流时,会最喜欢它。

由于欧洲和世界范围内持续的大流行情况,Nordic PGDay 2021已被取消。

如果情况好转,我们将在2022年3月返回赫尔辛基。请访问我们更新的网站https://2022.nordicpgday.org/获取更新。

我们不打算运行会议的虚拟版本。相反,我们将集中精力在2月的FOSDEM 2022上帮助PostgreSQL跟踪。

在计算中,哈希表(哈希表)是一种实现关联数组抽象数据类型的数据结构,该结构可以将键映射到值。哈希表使用哈希函数将索引(也称为哈希码)计算到存储桶或插槽数组中,从中可以找到所需的值。在查找期间,将对密钥进行哈希处理,并且所得到的哈希值会指示相应值的存储位置。 —来自wiki

在PG源代码的src / backend / utils / hash / dynahash.h文件中,实现了动态哈希表的相关功能。它在PG的许多地方都使用,它提供了更高的哈希表搜索效率。同时,当需要扩展哈希表时,可以以较低的成本完成哈希表。那么如何在内部实现呢?

首先,在创建动态哈希表时,我们必须估计要存储的元素数量(nelem)。为了更加直观,假设我们希望存储1000个元素。我们可以通过其他参数来自定义许多熟悉的参数,例如哈希函数,哈希键和元素大小。我们不在这里。

理想情况下,哈希函数会将每个键分配给唯一的存储桶,但是大多数哈希表设计采用了不完善的哈希函数,这可能会导致哈希冲突,其中哈希函数会为多个键生成相同的索引。通常以某种方式容纳这种碰撞。

很简单地认为,如果我们处于“理想”状态,则每个存储桶都包含一个元素,那么我们需要的存储桶数量(nbuckets)等于元素数量(nelem)。但是实际上,我们使用相对于该数字的下一个更大的幂2作为存储桶数[1](为什么这样做?我们稍后再讨论)。在默认情况下,当nelem为1000时,nbuckets为1024。

在计算机中,频繁使用内存比一次性使用大内存效率低。因此,我们引入了一个新的词段。段代表

[...]

我为Orafce和plpgsql_check扩展名的x64 Microsoft Windows平台构建dll文件。 orafce-3.14-pg13,plpgsql_check-1.15.1

数据质量很重要。本文继续探讨通过PgOSM-Flex加载到Postgres / PostGIS的OpenStreetMap数据质量的提高。 osm2pgsql的新flex输出启用了这些改进,从而更易于理解和使用OpenStreetMap数据进行分析。

几周前,我开始研究Flex的输出,在此之前的文章使用了PgOSM-Flex v0.0.3。这篇文章使用PgOSM-Flex v0.0.7,并通过探索OSM地点数据突出了一些不错的改进。过去几周所做的一些改进是旧版PgOSM项目带来的想法。与社区的问题和对话刺激了其他改进,例如嵌套的管理多边形。

这篇文章重点介绍osm.place_polygon数据,该数据存储诸如城市,县和国家/地区边界之类的内容以及邻里和其他详细信息。地点数据的格式在本文中进行了许多改进:

此帖子加载的数据是Geofabrik的美国西部子区域。它是使用PgOSM-Flex中的run-all.lua和run-all.sql脚本加载的。

数据中心中ARM处理器的预期增长一直是讨论的热门话题,而且我们很好奇它在PostgreSQL中的表现。用于测试和评估的基于ARM的服务器的普遍可用性是一个主要障碍。破冰者是AWS在2018年在其云中宣布其基于ARM的处理器产品的时候。但是我们并没有立即看到太多兴奋,因为许多人认为它是“实验性”的东西。我们对于将其推荐用于关键用途也持谨慎态度,并且从未在评估它时投入过多精力。但是,当基于Graviton2的第二代实例于2020年5月发布时,我们要认真考虑。我们决定从运行PostgreSQL的角度来独立研究新实例的价格/性能。

重要提示:请注意,虽然很想在x86和arm上进行这种PostgreSQL比较,但这并不正确。这些测试将PostgreSQL在两个虚拟云实例上进行了比较,其中不仅包括CPU,还包括更多的活动部件。我们主要关注基于两种不同架构的两个特定AWS EC2实例的性价比。

,另一个是基于Graviton2的新。这两个实例都带有本地“临时”存储空间,我们将在这里使用它们。使用速度非常快的本地驱动器应有助于揭示系统其他部分的差异,并避免测试云存储。这些实例并不完全相同(如下所示),但距离足够近,可以被认为是同一等级。我们使用了来自pgdg repo的Ubuntu 20.04 AMI和PostgreSQL 13.1。我们使用较小(内存中)和较大(io绑定)的数据库大小进行了测试。根据北弗吉尼亚州Linux的AWS定价信息,对实例进行规范和按需定价。根据目前列出的价格,

便宜25% [...]

在PGCon 2020上,我作了一个演讲,建议PostgreSQL社区可以使用更好的基准测试工具为开源开发人员提供服务。我们中的一些人在不久之后的非会议期间继续讨论这一问题。在这里,我描述了一个开源框架可以运行但不一定限于用户定义的基准的概念证明,该基准遵循加载数据库和运行一系列查询的模型。

该框架的目标是以更简单的方式创建,修改和执行基准测试。我将尝试通过使用TPC-H Benchmark(TM)提供的dbgen和qgen进行演示。我的意图是仅使用此众所周知的基准来说明如何使用该框架自定义工作负载以进行测试和开发。对于不熟悉的人来说,这可以为数据仓库类型的系统建模,该系统可以执行大型和复杂的报告查询。

我将提供一些示例,例如更改表定义以及如何修改查询。

框架本身仅用于执行一组脚本。我已将此处引用的用户定义的基准命名为pgnottpch。我创建了一个简短的51秒演示来执行此基准测试。由于它仍然非常不稳定,因此它不再完全符合我在这里描述的内容,但是希望它仍将围绕此处显示的示例提供更多的上下文。

首先,让我们回顾一下pgnottpch用户定义的基准测试的信息(这是完整描述的摘录):

$ tsbyo1 info〜/ touchstone-udb / pgnottpch ...这不是** TPC-H。转到`_以获取真实的TPC-H。这是一组脚本,它们执行一些看似TPC-H基准的任务,但绝对不能与TPC-H基准进行比较。 ...阶段:00createdb 01load 02power

我想突出显示在STAGES标题下显示的行,该行对应于包含可执行脚本的pgnottpch下的子目录:

[...]

使用数据库中的动态图块构建地图很有趣:您可以获得最新的数据,不必考虑生成静态图块集,并且可以使用pg_tileserv以非常少的中间件来完成它。

但是,是时候将您的应用程序从开发转移到生产了,您应该考虑什么呢?

随着CYBERTEC的不断扩展,我们需要比以前更多的办公空间。目前,我们在工作中有一个解决方案:一栋新的办公楼。我们想要美丽的东西,所以我们开始研究数学比例以达到合理的美丽水平。我们希望使该建筑物不仅可用,而且希望我们的员工喜欢它。

我偶然发现了一些有关建筑比例的老书,然后开始工作。幸运的是,可以使用PostgreSQL进行一些所需的更基本的计算。

这当然是有关PostgreSQL的帖子,而不是有关体系结构的帖子,但让我解释一个非常基本的概念:黄金比例。美不是随便的。它倾向于遵循一些数学规则。音乐也是如此。 “黄金比例”是一个常见概念:让我们来看一下:

我们在这里查看一个神奇的数字:1.618。它具有一些不错的属性。如果我们反转,则基本上是“幻数– 1”。如果求平方,我们得到的是“幻数+1”。如果我们将一条线分成两段,则可以使用1:1.618。与使用1:1.8976左右的线来分割线条相比,人类会发现它更漂亮。自然地,我们可以利用这种智慧来创建一个基本的矩形:

基本布局为16 x 26米。它符合基本布局中要求的所有数学比例。

为了使建筑物看起来更具吸引力,我们决定在矩形中添加一个小的半圆形。问题是:半圆的理想直径是多少?我们可以使用与以前相同的公式:

[...]

我决定从今年开始阅读去年的笔记,并从中为您提取一小部分Postgres技巧,以此开始新的一年。从严格意义上讲,这可能不是新鲜的消息……但是,我想如今技术人员的平均RAM约为64KB左右,因此重复某些操作可能并不是一件坏事。

这是一个巨大的功能-如果您从未听说过此功能或使用得不够充分,您真的会错过这里……在我的日常咨询工作中,这种情况似乎经常发生!因此,这是去年我名单上的第一项。对于大量数据,由于工作负载或磁盘使用量意外增加,部分索引实际上可以挽救生命。此功能相对未知的原因之一是,大多数其他流行的DBMS引擎根本没有此功能,或者它们使用另一个名称进行调用。

事情的症结非常容易记住-停止索引最常见的值!由于Postgres知道您的数据是什么样子,因此当您搜索太常见的值时,它不会使用索引!一如往常,当您减少索引时,

......