locking - 当我们向其中添加列时,HANA 会锁定整个表吗?
问题描述
我正在使用 HANA 的列存储来实现动态表结构,例如执行以下 SQL 在运行时添加新列:
ALTER TABLE test_table ADD (new_field1 VARCHAR(32));
我想知道在执行此 SQL 以衡量此操作的性能影响时是否会锁定整个表。
适合任何想法。
解决方案
这取决于 HANA 版本。使用 HANA 2 SPS 04 及更高版本时,ADD COLUMN
不会锁定表(更准确地说:这是一个在线操作,允许在添加列时在表上写入事务)。
但即使没有这个,添加列也不会设置持久的锁定,因为这实际上是对 DB 目录的更新和新列的空内存存储结构的微小设置。这导致锁定等待的主要情况是表上已经有打开的事务反过来阻止ADD COLUMN
继续进行。