请记住,我是 sql/数据库领域的新手。
我每秒插入/更新数千个对象。这些对象正在以多个秒的间隔被主动查询。
我应该做哪些基本的事情来调整我的(postgres)数据库的性能?
请记住,我是 sql/数据库领域的新手。
我每秒插入/更新数千个对象。这些对象正在以多个秒的间隔被主动查询。
我应该做哪些基本的事情来调整我的(postgres)数据库的性能?
这是一个广泛的话题,所以这里有很多东西供您阅读。
当您用尽这些选项时:添加更多内存、更快的磁盘子系统等。硬件很重要,尤其是在更大的数据集上。
当然,阅读 postgres/databases 上的所有其他线程。:)
实际上有一些简单的规则可以让你在大多数情况下获得足够的性能:
指数是第一部分。主键会自动编制索引。我建议在所有外键上放置索引。进一步在所有经常查询的列上放置索引,如果在查询多列的表上有大量使用的查询,则将这些列上的索引放在一起。
您的 postgresql 安装中的内存设置。将以下参数设置得更高:
.
shared_buffers, work_mem, maintenance_work_mem, temp_buffers
如果它是专用数据库机器,您可以轻松地将其中的前 3 个设置为 ram 的一半(在具有共享缓冲区的 linux 下要小心,也许您必须调整 shmmax 参数),在任何其他情况下,这取决于多少 ram你想给postgresql。
http://www.postgresql.org/docs/8.3/interactive/runtime-config-resource.html
我推荐的绝对最小值是EXPLAIN ANALYZE命令。它将始终显示子查询、连接等的细分,显示操作中实际消耗的时间量。它还会提醒您注意顺序扫描和其他令人讨厌的问题。
这是最好的开始方式。
如果您信任您的文件系统,请将 fsync = off 在您的 posgresql.conf 中,否则每个 postgresql 操作将立即写入磁盘(使用 fsync 系统调用)。10 年来,我们在许多生产服务器上都关闭了这个选项,而且我们从未出现过数据损坏。