当前位置: 首页 > 科技观察

「内存数据库」为插入和数据加载调整HANA性能

时间:2023-03-12 09:55:31 科技观察

插入和数据加载将写入新数据,而其他操作如SELECT、UPDATE或DELETE必须对现有数据进行操作。因此,典型的性能因素是部分不同的。如果想提高插入和数据加载的性能,可以考虑以下几个方面:AreaDetailsLockwaitssee1999998,必要时优化锁等待情况。插入需要等待锁的典型情况有:重要的保存点阶段同一个主键的并发插入SAPHANA内部锁同一张表上的DDL操作被激活列在插入期间,每个列必须单独维护,因此插入时间很大程度上取决于表的列数。索引每个现有索引都会减慢插入操作的速度。检查是否可以在繁重的插入和数据加载期间减少索引的数量。SAPBW提供了在数据加载期间自动删除和重新创建索引的可能性。主索引一般不能删除。如果加载大量记录,批量加载不应为每条记录执行插入。相反,您应该尽可能利用批量加载选项(即使用单个插入操作插入多条记录)。并行性如果要加载大量记录,则应考虑客户端的并行性,以便使用与SAPHANA的多个连接来加载数据。提交确保在执行大型插入时定期执行COMMIT(在每次批量加载之后)。Deltamerge大的增量存储会降低加载性能,所以一定要定期进行增量合并。避免重复合并小的增量存储或使用大量未提交的数据以避免不必要的开销。表锁与记录锁如果只有一个非并行插入是可能的,并且不需要对底层表进行并发更改,则使用全局表锁而不是大量的单个记录锁可能会很有用。可以通过以下方式设置表锁:LOCKTABLE""INEXCLUSIVEMODE之后,SAPHANA不再需要维护单独的记录锁。这种方法也适用于可以在内部并行化的INSERT...SELECT操作。保存点需要保存点将修改后的数据写入磁盘。通常主要目的是保持阻塞保存点阶段尽可能短,同时接受更长的保存点持续时间。在批量导入期间,相反的情况可能会更好:保存点更短并且阻塞阶段增加的风险更大。较短的保存点减少了写入磁盘的数据量,也减少了需要保留的日志量,降低了文件系统溢出的风险。在大量更改期间,可以考虑进行以下参数调整以减少整体保存点持续时间:global.ini->[persistence]->savepoint_max_pre_critical_flush_duration的值较低(例如300而不是900)global.ini的值较高->[persistence]->savepoint_pre_critical_flush_retry_threshold(例如10000而不是3000)错误以下SAPHANA错误可能会对插入性能产生负面影响:受影响的RevisionsDetails1.00.120-1.00.122.112.00.000-2.00.012.00如果大量空间数据在uncommittedInsertedrow-by-row,则可能由于SAPHANAbug和调用栈模块AttributeEngine::spatialae::DeltaComponents::reserveDocid耗费大量时间导致性能不佳。作为对“GeometryDeltaAttributeLock”的次要影响,争用是可能的。典型的吞吐量问题情况,例如长关键保存点阶段或其他锁<500条记录/秒正常,连续单行插入1,000-10,000条记录/秒高度并行批量加载1,000,000条记录/秒原文:https://www.stechies.com/performance-inserts-data-loads-tuned/本文:https://pub.intelligentx.net/tuning-hana-performance-inserts-and-data-loads