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

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

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

在这种情况下,一些非常大的表会同时被 1-4 个进程非常有规律地查询。

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

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

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

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

我们目前还没有用完内存,但可能会为数据库分配更多内存。

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

数据库是postres 8.4。

谢谢。

答案1

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

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

请注意,当您设法缓解一个性能瓶颈时,另一个性能瓶颈就会成为新的性能瓶颈。

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

不要忘记,最显著的改进可能是算法上的——如果你可以用两种方式回答这个问题,一种是扫描 1 TB 的数据,一种是扫描 1 KB 的数据,那么第二种方法的性能将优于第一种,无论你对硬件做什么。


按照要求详细说明磁盘控制器。

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

答案2

  1. 内存
  2. 更快的 CPU
  3. 将数据库存储在 RAID0(如果需要冗余,则存储在 RAID10)上,并使用尽可能多的驱动器。
  4. 多核处理器。
  5. 增加了 L0 和 L1 缓存的大小。

答案3

我建议首先收集一些基本的性能指标并找出当前系统的瓶颈。这样您就可以知道您的钱花在什么地方最划算——I/O、内存还是处理能力。

话虽如此,根据我的经验,真正大型表最常见的瓶颈是磁盘 I/O。如果“所有软件/数据库优化都已完成”不包括使用适当的分区策略,请对该主题进行一些研究。如果您的磁盘子系统较旧,请考虑升级它。

答案4

更多的 RAM 应该可以做到这一点,当然你必须告诉数据库引擎使用额外的 RAM :)

相关内容