第16章 应该避免的一些常见问题

除了能够预期的一些日常安装以及设计上的问题之外,PostgreSQL数据库管理员以及开发者总会定期地碰到一些反复出现的尚未得到有效解决的问题。PostgreSQL在http://wiki.postgresql.org/ wiki/Category:FAQ当中有些可用的FAQ问题列表,即使其中的一部分主题会在本章中讲述,查阅其中的内容也会是有意义的。

这里可能会有两种略有不同类型的批量装载。第一种类型就是何时向一个空白的数据库中进行数据的初始化填充,这将是本节中主要关注的内容。有些时候也可能需要在表已经填充的状态下需要进行后续的数据批量装载。在这种情况下,其中的一些诸如删除索引或约束等技术将不再适用。在执行增量装载的时候,未必能够在调整服务器以便获得更好的装载性能中得到积极的响应。特别是诸如禁用fsync函数等降低整个服务器完整性的选项时,这只在系统初始化的时候才有意义。

能够得到将大量数据加载入数据库中的首选方法就是使用COPY命令。这是插入一系列数据行的最快速的方法。如果这种方法不太实用时,那么就不得不使用INSERT命令来替代。此时应当尝试在每次提交的时候尽可能多地包含数据行,并将其封装在一个BEGIN/COMMIT代码块当中。在大多数应用程序研究中发现,在批量插入时每次提交100行至1000行之间的数据能够得到较好的性能,不过这依然比不上COPY的速度。

通常在批量装载的时候插入速度的排名从慢到快依次按照如下的顺序排名。

(1)一次插入(INSERT)一条记录。

(2)一次插入(INSERT)较大块的数据。

(3)一次使用一个COPY命令,这是标准的pg_restore的做法。

(4)使用较大数据块多个并行线程插入( ...

Get PostgreSQL 9.0性能调校 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.