IcCube模式加载速度优化

时间:2018-08-23 08:01:44

标签: iccube

当我将大表加载到IcCube架构中时,同一数据库的不同表之间每秒提取的行数差异很大。 不幸的是,我不知道如何优化此速度,因为我不知道该速度取决于什么。

例如,我有一个架构,其中包含3个不同的表,每个表具有超过2000万行。一张表的加载速度为15.000行/秒,另一张表的加载速度为100.000行/秒

是否有最佳实践,如何最大程度地提高速度?它是否取决于使用此表或其他内容的维度数量,度量数量,计算得出的度量数量? 以及不同的依赖性有多严重?

1 个答案:

答案 0 :(得分:3)

假设您正在谈论用于构建多维数据集的表的处理速度(实际上,您不太可能要处理几百万行中的维)。

维度处理

维度不应该像事实一样大,但事实可能如此。有一个约束条件可能会减慢它的“父级名称唯一”。如果尺寸加载速度不够理想,只需删除它即可。

事实处理

icCube通过首先从基础数据源中加载数据然后处理这些数据来构建事实(也称为度量值组)。 LOADING PROCESSING 可以同时发生,并且每个线程可以在多个线程中运行以加快速度(您可以在{{1}中查看更多详细信息}:icCube.xml)。

最后,icCube无法比从数据源传递数据更快地建立事实。因此,首先要检查的是数据源的速度(在您的情况下为SQL查询的速度)。

数据源速度

自icCube v6.8起,配置loadReadingThreadCount, loadProcessingThreadCount, ...允许处理事实而不构建事实。这样,查看事实的模式统计信息,您实际上将看到SQL查询的速度。为了简化操作,请确保使用icCube.loadProcessingFactsMode = NONE逐个加载事实。然后,您可以查看“装入详细信息”中每个事实的模式统计信息。例如,

icCube.loadReadingThreadCount = 1

从结果中,如果速度似乎很慢,则可以对SQL查询进行故障排除,并且/或者如果速度远远低于数据源的本机客户端的速度,则可以与icCube联系。

下一步是查看是否可以以相同速度并行加载多个事实。有了3个事实,您可以尝试:

  F : Cashflow.Facts
    Rows Count         : 100'000'000
    Rows/Sec           : 225'000

再次,检查生成的模式统计信息,并查看数据源是否可以按您希望的速度传递数据。

icCube处理速度

一旦了解了数据源的实际速度和可以使用的并行负载数,就可以确定最佳的处理线程数;您可以从2(开箱即用的配置)开始:

icCube.loadProcessingFactsMode = NONE
icCube.loadReadingThreadCount  = 3

并增加它,直到达到无法获得更多增益的极限;例如,我们使用以下设置获得了达到60万行/秒的客户:

icCube.loadProcessingFactsMode    = FULL
icCube.loadReadingThreadCount     = 3
icCube.loadProcessingThreadCount  = 2

在处理期间,icCube主要在构建内部索引。速度主要取决于要索引的层次结构的数量(您可以在每个事实统计信息中看到它们)。统计信息中提供了一些其他信息:

icCube.loadReadingThreadCount     = 3
icCube.loadProcessingThreadCount  = 6

核心计数

一个简短的说明, F : Cashflow.Facts Elapsed : 58m14s - whole processing : 2h16m22s -- greater than elapsed because of several threads of processing - resolve members : 1h25m49s -- from member "keys" to internal icCube members - index & columns : 50m30s -- mainly about building the index Page Lock Time : 25.45s -- the lower the better Page Lock Count : 105258 Cache Hit : 8'135'974'783 -- the higher the better (used by resolve members above) Cache Miss : 241'674'486 的数量应该少于可用内核的数量,因为处理工作受CPU / RAM的限制很大。

Java垃圾收集器

您还可以使用日志文件中的grep“ GC”调查GC行为(暂停)。如果出现问题,可以在启动icCube时使用以下Java选项增加RAM的数量和/或尝试使用G1:loadReading/Processing ThreadCount

希望有帮助。