1

我有一个 SSAS 表格模式立方体,它使用 ODBC 从 Actian Matrix 数据库中读取数据。当我使用具有 100 万行的数据集时,该项目处理良好,但当我尝试使用更大的数据集(3 亿行)时,该过程运行大约 15 分钟并失败并显示以下消息:

The operation failed because the source database does not exist, the source table does not exist, or because you do not have access to the data source.

More Details:

OLE DB or ODBC error: [ParAccel][ODBC Driver][PADB]57014:ERROR:  Query (25459) cancelled on user's request
DETAIL:  Query (25459) cancelled on user's request
; 57014.

An error occurred while processing the partition 'XXXX' in table 'YYYY'.

The current operation was cancelled because another operation in the transaction failed.

该消息说数据库不存在,但它没有意义,因为它在第一种情况下工作得非常好(不同之处只是一个“where子句”来限制行数)

我正在使用具有 96 Gb FREE 运行的服务器,并且我可以看到在“处理”进程运行时消耗的所有内存。当它全部耗尽时,它会运行几秒钟并失败。另外,我知道导出到 csv 文件的 3 亿行数据集的原始格式为 36 Gb,因此它应该可以完全装入内存而无需任何压缩。

我还可以保证查询在源数据库上本身可以正常工作,因此“应用户请求取消查询(25459)”消息也没有多大意义。

有人对可能发生的事情有任何想法吗?

4

1 回答 1

0

输入行的导数(生成的多维数据集)的内存消耗无法根据输入的字节大小来估计。它是立方体维度的所有不同值的笛卡尔图乘积的函数。

如果您正在构建一个具有 2 个输入行超过 2 个维度和 2 个测量值的多维数据集:

State|City|Population
---------------------
NY|New York|8406000
CA|Los Angeles|3884000

State|City|Population|Number of records
---------------------------------------
NULL|NULL|12290000|2
NY|NULL|8406000|1
NY|New York|8406000|1
CA|NULL|3884000|1
CA|Los Angeles|3884000|1
NULL|Los Angeles|3884000|1
NULL|New York|8406000|1

您不能期望在输入数据行被处理为大小相等时生成输出。如果 ODBC 驱动程序在允许您读取它之前将整个输入保存在内存中,那么您必须考虑到输入和输出都驻留在内存中,直到多维数据集生成完成。

这个答案在这个主题上更清楚:如何计算 OLAP 多维数据集的可能大小

于 2015-02-21T15:14:43.960 回答