如何加速数据库 - 仅限硬件

pst*_*ton 0 postgresql hardware windows database

简单的问题 - 仅使用硬件来提高数据库性能的最佳方法是什么?

在这种情况下,一次有 1-4 个进程会定期查询一些非常非常大的表。

我们正在执行数以千计的查询,其中许多需要 +10 秒才能返回,而且所有查询都只返回少量数据。这向我表明 HDD 寻道时间是瓶颈。

作为此过程的一部分,我们还需要根据原始数据表创建汇总表。其中一个查询可能需要数小时才能运行。

请假设所有软件/数据库优化都已经完成。

假设这是因为我们花了一些时间进行代码/数据库优化,并准备在硬件上花费一些预算。我知道更多的软件/数据库优化是可能的,但这不是当前的重点。

我们目前没有用完 ram,但可能会分配更多给 DB。

当前平台是windows,这可能会根据硬件解决方案而改变。

数据库是 postres 8.4。

谢谢。

Jon*_*ler 8

什么是性能瓶颈?通常的罪魁祸首是:

  • 如果系统受 I/O 限制,添加更多 CPU 将无济于事。添加更多内存可能会增加可缓存在内存中的数据库部分,但提高性能的最佳方法是增加 I/O 带宽。
  • 如果系统受 CPU 限制,那么如果 DBMS 软件可以很好地利用它们,那么添加更多内核将有所帮助。否则,提高 CPU 的速度会有所帮助。
  • 如果系统受内存限制——瓶颈是从 RAM 到 CPU 获取数据——那么提高内存带宽将提高性能。

请注意,当您设法缓解一个性能瓶颈时,其他之一将成为新的性能瓶颈。

在大多数运行数据库并扫描大量数据的系统上,系统受 I/O 限制。添加更多的磁盘控制器并将数据分布在它们之间会增加磁盘 I/O 的并行度,通常会提高性能。

不要忘记,最显着的改进可能是算法上的——如果你能以两种方式回答这个问题,一种扫描 1 TB 的数据,一种扫描 1 KB,无论你做什么,第二种都会胜过第一种硬件。


详细说明磁盘控制器 - 根据要求。

一个给定的磁盘控制器在一秒钟内只能将如此多的数据从磁盘传输到内存,通常使用 DMA。要增加带宽,您可以将数据分布在由不同控制器控制的多个磁盘上。然后,如果系统架构允许,您可以每秒从磁盘获取更多数据到主内存中——从而加快操作速度。请注意,如果数据库中的所有数据都在一个磁盘上,那么额外的控制器无济于事。如果 DBMS 无法从单独的磁盘触发并行读取,则额外的控制器无济于事。因此,额外的控制器是否有帮助取决于您的硬件和软件以及数据库中数据的组织。