Azure SQL 数据库是否支持内存优化表?

Does Azure SQL Database support In Memory Optimized Tables?

我正在尝试查看 SQL Server 2014 和内存优化表及其与 Power BI 的集成。我正在考虑将现有数据库(包含多个内存优化表)迁移到 Azure 的最佳方法是什么? Azure SQL 数据库是否支持内存优化表?

谢谢。

根据this MSDN article it is supported in Azure Sql Database and not supported in Azure Sql Data Warehouse. As for Azure Sql Database, it is in preview for Premium Azure SQL databases only. It is not supported neither in Basic nor in Standard tier (see more details in azure-specific documentation)。

如果您尝试使用 Visual Studio 为 Azure Sql 数据库开发,2013 和 2015 版本都会向您显示以下错误消息(您的数据库项目无法编译):

SQL71578: The element Table: [dbo].[*******] has property IsMemoryOptimized set to a value that is not supported in Microsoft Azure SQL Database v12.   

此时您必须考虑 Azure VM 中的 SQL Server 2014 或 2016,而不是 Azure SQL。

截至 2020 年第四季度,Azure SQL 仅 pricing-tiers 支持 In-Memory OLTP(又名 MEMORY_OPTIMIZED)。 This is half-documented in this (hard to find) Azure SQL documentation page,另一半我来自古老的博客文章和 Azure 门户中的 trial-and-error。

(再次注意,这仅适用于“Azure SQL”,不适用于 运行 VM 中的 full-fat SQL 服务器或托管实例服务)。

这是我制作的流程图:

  • 您使用的是 DTU 还是 vCore?
    • DTU:
      • 您使用的是 基本 层(5 个 DTU)吗?如果是,则否,不支持In-Memory。
      • 您使用的是标准层(10-3000 DTU)吗?如果是,则否,不支持In-Memory。
      • 您使用的是 Premium 等级(125-4000 DTU)吗?如果是这样,那么是的,支持In-Memory
    • vCores:
      • 您使用的是通用层吗?如果是,则否,不支持In-Memory。
      • 您使用的是 超大规模 层吗?如果是,则否,不支持In-Memory。
      • 您使用的是关键业务层吗?如果是这样,那么是的,支持In-Memory

您可以通过打开 SSMS、连接到您的数据库(您的 实际 数据库,而不是 master 来查看您的数据库是否启用了 MEMORY_OPTIMIZED 功能) 和 运行 这个:

SELECT DatabasePropertyEx( DB_NAME(), 'IsXTPSupported' ) AS IsXTPSupported;

如果您得到 0,那么您的数据库不支持 In-Memory OLTP。如果你得到 1 则表示支持。

如果你尝试这样做 CREATE TYPE dbo.Foo AS TABLE ( ... ) WITH ( MEMORY_OPTIMIZED = ON ); 你会得到这个错误:

Msg 40536, Level 16, State 2, Line 2
'MEMORY_OPTIMIZED tables' is not supported in this service tier of the database. See Books Online for more details on feature support in different service tiers of Windows Azure SQL Database.


Wrly,令我失望的是,尽管 Microsoft 一直在为 In-Memory OLTP 大肆宣传,但大多数 Azure SQL 客户无法使用它。更令人意外的是,In-Memory是为了减轻IO负担,这应该意味着In-MemoryOLTP会减少微软自己的operating-costsfor Azure。我猜他们在等着看客户如何使用它。考虑到使用它所需的额外技术细节和 thorough-understanding 系统,客户可能会 end-up mis-using 它 - 必须保护用户免受他们自己的伤害,你知道的。