全部产品

隔离等级

表的隔离级别定义了必须将某事务与并发事务所做的修改隔离的程度。Databricks上的Delta Lake支持两种隔离级别:Serializable和WriteSerializable。

说明

详细内容可参考Databricks官网文章:隔离等级

  • Serializable:最强的隔离级别。它确保提交的写入操作和所有读取都是可序列化。 只要有一个串行序列一次执行一项操作,且生成与表中所示相同的结果,则可执行这些操作。对于写操作,串行序列与表历史记录中的序列完全相同。

  • WriteSerializable(默认):隔离级别比Serializable低。它仅确保写入操作(而非读取)是可序列化的。但是,这仍然比快照隔离更安全。WriteSerializable是默认的隔离级别,因为对大多数常见操作而言,它使数据一致性和可用性之间达到良好的平衡。

    在此模式下,Delta 表的内容可能与表历史记录中所示的操作序列不同。这是因为此模式允许某些并发写入对继续进行(例如,操作X和Y),即使历史记录显示Y是在X之后提交的,但结果是Y在X之前执行的(也就是说,它们之间可序列化)。要禁止这种重新排序,请将表隔离级别设置为Serializable,以使这些事务失败。

设置隔离级别

可以使用ALTER TABLE命令设置隔离级别。

SQL

ALTER TABLE <table-name> SET TBLPROPERTIES ('delta.isolationLevel' = <level-name>)

其中<level name>是Serializable或WriteSerializable。

例如,要将隔离级别从默认WriteSerializable更改为Serializable,请运行:

SQL

ALTER TABLE <table-name> SET TBLPROPERTIES ('delta.isolationLevel' = 'Serializable')