Database 测试数据仓库性能的最佳方法?

Database 测试数据仓库性能的最佳方法?,database,postgresql,database-performance,Database,Postgresql,Database Performance,我有一个基于Postgresql的数据仓库 到目前为止,我一直在尝试在只包含真实数据库一小部分的数据库上运行查询。一旦我以某种方式编写了查询,使它们对这个小测试数据库有效,我就在真实的数据库上运行查询 问题是,一旦我在真实数据库上运行查询,真实数据库就会耗尽内存,并开始将索引和临时表之类的内容写入磁盘。这意味着,对于测试数据库和真实数据库,不同的查询可能是最佳的。这是否意味着我真的需要运行几分钟才能完成的查询才能知道哪个查询是最佳查询。三个问题: 1) 这些查询有多复杂?索引和临时表的生成表明服

我有一个基于Postgresql的数据仓库

到目前为止,我一直在尝试在只包含真实数据库一小部分的数据库上运行查询。一旦我以某种方式编写了查询,使它们对这个小测试数据库有效,我就在真实的数据库上运行查询

问题是,一旦我在真实数据库上运行查询,真实数据库就会耗尽内存,并开始将索引和临时表之类的内容写入磁盘。这意味着,对于测试数据库和真实数据库,不同的查询可能是最佳的。这是否意味着我真的需要运行几分钟才能完成的查询才能知道哪个查询是最佳查询。

三个问题:

1) 这些查询有多复杂?索引和临时表的生成表明服务器必须生成这些内容,因为对未索引列的操作非常复杂。这种可能性有多大?从你的报告来看,答案似乎是“复杂的”

2) 返回集有多大?最终结果是100行还是100万行?根据你的报告,答案可能是任何东西。我怀疑这个问题不那么重要,但至少知道这个问题很重要

3) 以不同的方式重复问题1,即使返回的集很小,是否有大量的中间结果需要在生成小结果的过程中进行编译?我再次怀疑,这里的答案是,正在生成大型复杂的中间结果

这意味着至少有些东西需要索引,也许数据需要在输入的过程中进行结构化,以便更接近您试图查询的内容

最后一个问题,对于大多数更重要的查询来说,这是一个普遍存在的问题,还是仅针对一个或两个查询

编辑以回应评论:我整天都在进行数据仓库查询,有些查询需要10分钟左右。有些需要几个小时,我把他们推到后台工作中,并把他们分成几个阶段,以防止一切陷入困境。这就是处理超大数据集的本质

我在原始答案中的问题旨在确定您的问题查询是否会完成。可能会在无意中编写一个查询,该查询生成的中间数据太多,您可以走开,两天后再回来,但它仍在运行。所以我要重申我原来的三个问题,它们实际上是完全回答你问题的唯一方法

是的,有些查询需要更长的时间,这是野兽的本性。您所能期望的最佳性能是与读取的数据量成线性关系,如果有1亿行需要处理,则需要几分钟而不是几秒钟。但更重要的是,如果一个查询在100万行上运行只需4秒,而在1亿行上运行则需要>>400秒(大约1小时),那么我提出的这些原始问题将帮助您找出原因,以优化这些查询。

三个问题:

1) 这些查询有多复杂?索引和临时表的生成表明服务器必须生成这些内容,因为对未索引列的操作非常复杂。这种可能性有多大?从你的报告来看,答案似乎是“复杂的”

2) 返回集有多大?最终结果是100行还是100万行?根据你的报告,答案可能是任何东西。我怀疑这个问题不那么重要,但至少知道这个问题很重要

3) 以不同的方式重复问题1,即使返回的集很小,是否有大量的中间结果需要在生成小结果的过程中进行编译?我再次怀疑,这里的答案是,正在生成大型复杂的中间结果

这意味着至少有些东西需要索引,也许数据需要在输入的过程中进行结构化,以便更接近您试图查询的内容

最后一个问题,对于大多数更重要的查询来说,这是一个普遍存在的问题,还是仅针对一个或两个查询

编辑以回应评论:我整天都在进行数据仓库查询,有些查询需要10分钟左右。有些需要几个小时,我把他们推到后台工作中,并把他们分成几个阶段,以防止一切陷入困境。这就是处理超大数据集的本质

我在原始答案中的问题旨在确定您的问题查询是否会完成。可能会在无意中编写一个查询,该查询生成的中间数据太多,您可以走开,两天后再回来,但它仍在运行。所以我要重申我原来的三个问题,它们实际上是完全回答你问题的唯一方法


是的,有些查询需要更长的时间,这是野兽的本性。您所能期望的最佳性能是与读取的数据量成线性关系,如果有1亿行需要处理,则需要几分钟而不是几秒钟。但更重要的是,如果一个查询在100万行上运行只需4秒钟,而在1亿行上运行则需要>>400秒(大约1小时),那么我提出的这些原始问题将帮助您找出原因,以优化这些查询。

了解如何解释输出,然后在运行查询之前,检查
EXPLAIN
输出是否显示大型数据库中所选的查询计划与您预期的类似。

了解如何解释输出,然后检查
EXPLAIN
输出是否显示大型数据库中所选的查询计划与您预期的类似,在运行查询之前。

我不是问如何优化查询,而是问如何测试查询。我希望能够测试任何查询,复杂、简单、大返回集、小返回集、大中间结果、小中间结果