阿里云的工程师你们好,请教一个问题:在行式存储的 Hologres 中新增一列,DB 会锁表吗?如果不会的话现在是怎么处理的呢?
在行式存储的Hologres中新增一列,确实会涉及到表结构的变化,因此会有可能触发表结构的锁定。这种锁定称作表Schema锁,当事务需要读取或修改表结构时会申请这种锁,大部分的事务在执行过程中都会申请这种锁。
具体到操作中,如果您想要在Hologres的表中新增一列,可以使用如下的ALTER TABLE语句:
ALTER TABLE IF EXISTS [schema_name.]<table_name> ADD COLUMN <new_column> <data_type>;
例如,如果您想在名为test
的表中增加一个名为id
的列,可以使用以下语句:
ALTER TABLE IF EXISTS public.test ADD COLUMN id int;
但需要注意的是,由于表结构变更可能会引发锁,所以在执行这类操作时要考虑到可能对业务的影响,并尽量避开业务高峰期进行此类重大修改。同时,如果表数据量较大,增加新列的操作可能需要较长的时间,具体情况和数据量、硬件性能等因素有关。
不会的。
ALTER TABLE语句可以给表增加列,仅支持在表的最后一列之后增加新的列。https://help.aliyun.com/zh/hologres/user-guide/alter-table?spm=a2c4g.11186623.0.i37
在Hologres中新增一列时,数据库不会锁表。Hologres使用了一种非阻塞的DDL(数据定义语言)技术,即使在执行DDL操作期间,也可以继续对表进行读写操作。
当您执行ALTER TABLE语句来新增一列时,Hologres会以一种无锁的方式进行处理。它会在后台创建新的列,并逐步将现有数据迁移到新列上。这样可以确保在新增列的同时,仍然可以对表进行正常的查询和修改操作。
需要注意的是,在新列完全添加和数据迁移完成之前,该列可能处于不可见状态。因此,在新增列后立即查询该列可能无法获取到预期的结果。建议等待一段时间,直到新增列的完全生效。
在Hologres中,对行式存储的表进行操作时,确实会有一些需要注意的地方。关于是否锁表的问题,根据我的知识库信息,我没有找到直接说明Hologres在添加列时是否会锁定整个表的信息。
通常情况下,在分布式数据库系统中,为了保证数据一致性,当执行某些DML(数据操作语言)操作时可能会涉及到表级别的锁定。然而,现代数据库管理系统也尽可能地减少锁的影响范围和持续时间,以提高并发性和性能。
对于Hologres这样的云原生实时数仓服务,它可能采用了更先进的并发控制机制来处理增删改查操作,而不是简单地使用全表锁。例如,它可能使用了行级锁、元组级锁或者乐观并发控制等技术。
具体到添加一列的操作,如果不会导致大量的数据迁移或重组,可能不需要长时间的锁表。但是,这仍然取决于具体的实现方式和表的大小。对于大规模的数据表,即使没有完全锁住表,也可能需要一些时间来完成这个操作。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
本技术圈将为大家分析有关阿里云产品Hologres的最新产品动态、技术解读等,也欢迎大家加入钉钉群--实时数仓Hologres交流群32314975