12个提升PostgreSQL_TSDB 插入性能的建议

作者: 北枫

本文将分别从以下两个方面给出提升插入性能的建议:

一提升PostgreSQL性能

二选择并配置TSDB以获得更好的插入性能

其中一些方法可能会让您感到比较新奇,但所有十二种方法都将帮助您在使用PostgreSQL和TSDB时提升写入性能。

写入性能对于许多常见的PostgreSQL使用案例至关重要,包括应用程序监控、应用程序分析、物联网监控等。虽然数据库早就应用于时间序列领域,但与这些用例使用数据类型有一个关键区别:与标准的关系“业务”数据不同,更多的场景数据更新被视为插入,而不是覆盖(换句话说,每个新值都成为数据库中的一个新行,而不是用最新值替换该行的先前值)。

如果您在一个需要保留所有数据的场景中运行,而不是覆盖过去的值,优化数据库写入性能变得至关重要。

以下,我概述了一些对改进PostgreSQL性能非常有用的技巧。之后,概述了一些特定于TSDB插入性能的相关建议。

 

一. 提升PostgreSQL性能

下面是一些在PostgreSQL中提升数据插入性能的测试结论:

1.合理使用索引

拥有合适的索引可以加快查询速度,但也不是绝对的。以增量方式维护每一新行的索引需要额外的工作。检查您在表上定义的索引数(使用psql命令\d table),并确定索引带来的性能提升是否大于存储和插入所用开销。由于每个系统都是不同的,因此对于索引的规则没有绝对的统一标准——只要合理就行。

2.慎重使用外键约束

有时需要从一个表到其他关系表构建外键(FK)。当存在外键约束时,每个INSERT通常都需要从引用的表中读取数据,这会降低性能。考虑一下是否可以对数据进行非规范化处理——我们有时会看到约束的使用非常泛滥,应该要合理地使用。

3.避免使用不必要的唯一约束

开发人员通常都习惯在数据库表中指定主键,许多orm框架也都支持使用这些主键。然而,许多场景(包括常见的监控或时间序列应用程序)并不需要它们,因为每个事件或设备读取都可以简单地记录为一个单独的事件,方法是在写入时将其插入超表当前块的尾部。

如果另外定义了唯一约束,则该插入可能需要索引查找来确定行是否已经存在,这将增加额外的开销,影响写入的速度。

4.对预写日志(WAL)和数据使用单独的磁盘

虽然有时候这是一个并不总是需要的更高级的优化,但是如果磁盘成为瓶颈,您可以通过为数据库的预写日志(WAL)和数据使用单独的磁盘(表空间)来进一步提高吞吐量。

5.使用高性能磁盘

有时开发人员会在低性能磁盘的环境中部署数据库,无论是由于性能较差的HDD、远程SAN还是其他类型的存储配置。因为在插入行时,数据会在事务完成之前

你可能感兴趣的:(涨知识,postgresql)