我有一个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的空闲空间,在“处理”进程运行时,我可以看到所有的内存都被消耗了。当它被消耗完时,它会运行几个axtra秒,然后失败。此外,我知道导出到csv文件的3亿行数据集的原始格式是36 Gb,因此它应该可以完全放入内存中,而不需要任何压缩。
我还可以保证查询本身在源数据库上运行良好,因此"Query (25459) cancelled‘s request“消息也没有多大意义。
有没有人知道可能发生了什么?
发布于 2015-02-21 23:14:44
不能根据输入的字节大小估计输入行的导数(结果多维数据集)的内存消耗。它是立方体维度的所有不同值的笛卡尔图乘积的函数。
如果您正在构建一个具有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驱动程序在允许您读取之前将整个输入保留在内存中,那么在多维数据集生成完成之前,您必须考虑到输入和输出都驻留在内存中。
这个问题的答案要清晰得多:How to calculate the likely size of an OLAP cube
https://stackoverflow.com/questions/26296959
复制相似问题