在 Hana 中加载时间戳和时间值属性时出现问题(属性加载失败错误)

Issue in loading Timestamp and Time valued attributes in Hana (Attribute Load Failed Error)

我正在尝试对 HANA 数据库中的列存储 table 执行简单的 select * 操作。我观察到在数据库中的某些 table 上执行 select * 会导致以下错误:

column store error: search table error: [6923] Attribute load failed.SAP DBTech JDBC: [2048]:

某些列存储 table 由于此错误而未加载。

我为分配给我的 cal.sap.com 帐户重新启动了数据库实例,但没有解决问题。然后我暂停了实例并重新激活它,但是它导致了与数据库中其他 tables 相同的问题,这些 selects 在之前正确地得到 selected,即我能够读取他们的数据。 我注意到当 table 在 HANA 中有一个或多个类型为 ‘TIME’ /’TIMESTAMP’ 的列时,它通常会以 小时:分钟:秒:毫秒 [=] 存储时间戳值24=] 格式 。这是不一致的行为,因为我可以一直对这些 table 执行 select * 操作,除了 select * 失败且此问题突然出现的少数情况。我删除了 table 内容,然后使用相同的数据再次加载它们,然后 table 加载(selecting 来自 table 的值)工作正常。我尝试从内存中卸载 table 并重新加载它,但它无助于解决问题。

更新:发生此错误后跟踪文件内容:

ste::Exception type AttributeStoreFile error '1090922094766': attribute value is not a date or wrong syntax message  additionalInfo $ADDINFO$
exception throw location:
        CS/OptimizeCompression/Helper.cpp:431
    Attribute load failed; $message$=Attribute load failed;index=HAULMAX_UAT_SHIPMENT:Shipmenten,attribute='PickupTime' (228)
    exception 6923:
    CS/OptimizeCompression/Helper.cpp:431
    Attribute load failed; $message$=Attribute load failed;index=HAULMAX_UAT_SHIPMENT:Shipmenten,attribute='ActualDelTime' (212)
    (6923)'  (table=HAULMAX_UAT_SHIPMENT:Shipment (t 1337), passport=)
    [4810]{-1}[202/-1] 2017-06-27 10:48:52.458400 e optimize_compres OptimizeCompressionData.cpp(00857) : return value: false, error: exception 6923:
    CS/OptimizeCompression/Helper.cpp:431
    Attribute load failed; $message$=Attribute load failed;index=HAULMAX_UAT_SHIPMENT:Shipmenten,attribute='PickupTime' (228)
    exception 6923:
    CS/OptimizeCompression/Helper.cpp:431
    Attribute load failed; $message$=Attribute load failed;index=HAULMAX_UAT_SHIPMENT:Shipmenten,attribute='ActualDelTime' (212)
    (6923)  (table=HAULMAX_UAT_SHIPMENT:Shipment (t 1337), passport=)
    [4810]{-1}[200/16652466] 2017-06-27 10:48:52.459866 e Mergedog         Mergedog.cpp(01338) : Optimize compression failed: {IndexName: HAULMAX_UAT_SHIPMENT:Shipment, Trigger: 7, ReclaimDelta: false, DeltaMerge: false, OptimizeCompression: true, MainSize: 1119210}, error: exception 6923:
    CS/OptimizeCompression/Helper.cpp:431
    Attribute load failed; $message$=Attribute load failed;index=HAULMAX_UAT_SHIPMENT:Shipmenten,attribute='PickupTime' (228)
    exception 6923:
    CS/OptimizeCompression/Helper.cpp:431
    Attribute load failed; $message$=Attribute load failed;index=HAULMAX_UAT_SHIPMENT:Shipmenten,attribute='ActualDelTime' (212)
    (6923)

要了解列加载问题的真正原因,您必须检查索引服务器跟踪文件。 但是,我的猜测是,此时您在尝试加载列时遇到内存不足的情况。


将跟踪文件摘录添加到问题中,出现如下情况:

  • 在 "delta merge" 的 "compression optimisation" 部分为您 table "HAULMAX_UAT_SHIPMENT"."Shipment"。在此步骤中,table 的 所有 列被加载到内存中以确定每列的最佳压缩技术。 由于列中数据的排序不仅会影响对该列最有效的压缩技术,还会影响所有其他列的排序方式,因此 "compression optimisation" 试图在此解决一个相当复杂的问题。
    无论如何,这就是加载所有列而用户端没有任何操作的原因。

  • stopping/re-starting实例在这里无济于事,因为压缩优化将在下一次增量合并时再次触发。

  • 这里可用的数据太少,无法确定这是 HANA 错误还是例如其中一列("PickupTime""ActualTime")中的数据损坏。

因此,我建议打开一个 SAP 支持事件来调查和解决这个具体问题。

同时,可以通过禁用此特定 table 的自动操作来避免压缩优化:

 ALTER TABLE "HAULMAX_UAT_SHIPMENT"."Shipment" WITH PARAMETERS ('AUTO_OPTIMIZE_COMPRESSION' = 'OFF');

此外,最好 运行 对数据库进行一致性检查,看看是否有任何其他受影响的 table。