使用 flyway - 如何部署内存优化表

Posted

技术标签:

【中文标题】使用 flyway - 如何部署内存优化表【英文标题】:Using flyway - How can memory optimized tables be deployed 【发布时间】:2020-11-04 23:09:37 【问题描述】:

我正在使用 Redgate 的 Flyway Community Edition 6.3.2 并尝试部署内存优化表。

我的版本化脚本的内容是...

CREATE TABLE temp_memory_optimized.test 
( 
    id INT NOT NULL PRIMARY KEY NONCLUSTERED
) WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_ONLY); 
GO

在部署时我看到了这个错误...

ERROR: Migration of schema [dbo] to version 1.0.2 - add memory optimized objects failed! Changes successfully rolled back.
ERROR:
Migration v1.0.2__add_memory_optimized_objects.sql failed
---------------------------------------------------------
SQL State  : S000109
Error Code : 12331
Message    : DDL statements ALTER, DROP and CREATE inside user transactions are not supported with memory optimized tables.
Location   : C:\...\v1.0.2__add_memory_optimized_objects.sql (C:\...\v1.0.2__add_memory_optimized_objects.sql)
Line       : 1
Statement  : CREATE TABLE temp_memory_optimized.test
(
    id INT NOT NULL PRIMARY KEY NONCLUSTERED
) WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_ONLY);

MO 文件组配置正确,我可以成功地手动部署到我的测试盒上。

我在 migrate 命令上设置了-mixed=true

我知道我不可能是第一个遇到这个问题的人,但是事实证明,互联网搜索在试图找到解决方案方面毫无结果。

【问题讨论】:

鉴于缺少有关此任务的 Flyway 6.x 文档,issue 2062 中的解决方法似乎相关。 【参考方案1】:

正如issue 2062 中提到的那样,Flyway 没有检测到 CREATE TABLE WITH MEMORY_OPTIMIZED = ON 在自动交易中无效。您需要在每个脚本的基础上覆盖此行为,如下所述:https://flywaydb.org/documentation/scriptconfigfiles 并且需要对内存中对象的每个 CREATE/ALTER/DELETE 执行此操作。

【讨论】:

感谢@Julia Hayward 和 AlwaysLearning 的回复。是的,当我使用正确的选项添加特定于脚本的配置文件时,它现在正在成功部署。

以上是关于使用 flyway - 如何部署内存优化表的主要内容,如果未能解决你的问题,请参考以下文章

初识内存优化表

Java 收集和内存优化

优化系列 | MySQL Cluster 7.2.7内存表和磁盘表对比测试

SQLServer 2014 内存优化表

SQL Server 内存优化表 - 与临时表相比性能较差

SQL Server 内存优化表的索引设计