简单的问题 – 仅使用硬件来提高数据库性能的最佳方法是什么?
在这种情况下,通过1-4个进程一次非常有规律地查询几个非常大的表格。
我们正在执行数以千计的查询,其中许多查询返回+10,并且所有查询都只返回less量的数据。 这表明HDD寻找时间是瓶颈。
作为这个过程的一部分,我们还需要从我们的原始数据表中创build汇总表。 其中一个查询可能需要几小时才能运行。
请假定所有软件/数据库优化已经完成。
假设这是因为我们花了一些时间进行代码/数据库优化,并准备在硬件上花费一些预算。 我明白,更多的软件/数据库优化是可能的,但这不是当前的重点。
目前我们没有用完ram,但可能会分配更多的数据库。
目前的平台是windows,这可能会根据硬件scheme而改变。
数据库是postres 8.4。
谢谢。
性能瓶颈是什么? 通常的罪魁祸首是:
请注意,当您设法解决一个性能瓶颈时,其中一个成为新的性能瓶颈。
在运行数据库的大多数系统上,被扫描的数据量非常大,系统是I / O绑定的。 添加更多的磁盘控制器并将数据分散到磁盘控制器上,可以提高磁盘I / O的并行性,通常可以提高性能。
不要忘记,最显着的改进可能是algorithm – 如果你能以两种方式回答这个问题,一个扫描1TB的数据和一个扫描只有1KB,第二个将会超越第一个,不pipe你做什么硬件。
详细说明磁盘控制器 – 按要求。
给定的磁盘控制器只能在一秒钟内将大量数据从磁盘传输到内存,通常使用DMA。 要增加带宽,您可以将数据分散在由单独的控制器控制的多个磁盘上。 那么,如果系统架构允许,则每秒钟可以从磁盘获取更多数据到主内存中,从而加速操作。 请注意,如果数据库中的所有数据都位于单个磁盘上,则额外的控制器不起作用。 如果DBMS不能从单独的磁盘触发并行读取,那么额外的控制器将不会提供帮助。 所以,额外的控制器是否会有所帮助取决于您的硬件和软件以及数据库中数据的组织。
我build议收集一些基本的性能指标,并找出当前系统中的瓶颈作为第一步。 这可能会给你一个好主意,你的钱最好花在哪里 – I / O,内存或处理能力。
这就是说 – 从我的经验来看,真正大表最常见的瓶颈是磁盘I / O。 如果“所有的软件/数据库优化已经完成”并没有包括使用适当的分区策略,那么就这个话题做一些研究。 如果您的磁盘子系统是旧的,请考虑升级它。
正如jadew所build议的那样,存储在RAM中的信息越多,速度就越快。 另外,你也许想看看使用固态硬盘,这会加快速度,但是你需要研究这些数据存储介质的生命周期。 经过这么多的写作,他们都死了。
更多的RAM应该这样做,当然你必须告诉数据库引擎使用额外的内存:)