问题标签 [memory-optimized-tables]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql-server - SQL Server 2016 中内存优化表分区的替代方法
我在现有的 SQL Server 2012 中有一个脚本,可以使用分区删除旧的/过期的会话。数据根据weekday分区从源表移动到staging表,并对源表进行truncate操作。
迁移到 SQL Server 2016 后,内存优化表不支持分区和截断。处理这个问题的最佳解决方案是什么?
sql - 从本机编译的存储过程遍历 Azure SQL 上的层次结构
我有一个简单的自引用内存表
我正在努力寻找一种优雅的方式来遍历由表表示的层次结构,即给定一个 Account.Id 我需要获取它的祖先列表。
通常,当不使用本地编译的存储过程时,我会使用 CTE 或 HIERARCHYID 数据类型。但是,本机编译的存储过程都不支持这些。
所以我的问题是,我可以使用什么技术来遍历与本机编译的存储过程兼容的这种层次结构?
样本数据和预期结果:
鉴于初始 ID 是 00000000-0000-0000-0000-000000000006 我希望看到以下结果
sql - 如何创建内存优化的表副本?
我有一个T1
使用 SQL Server 2016 中的内存过程在内存中创建的表。现在,我想将同一个表的副本创建T1
到另一个T2
应该具有相同架构的表中,即它也应该在内存中(应该是内存优化的)。
我知道要创建表的副本,我们使用以下查询:
但是当我使用上面的查询时,它会创建一个不在内存中的空白表T2
,即没有优化内存。那么,如何创建具有相同架构和相同数据的现有内存表的副本。
c# - SQL Server 内存中 OLTP 和会话隔离设置为快照的 ASP.NET 会话状态
我们在 Framework v 4.7.2 上部署了一个新版本。我们还部署了异步 Asp.Net 会话状态模块和内存 OLTP 提供程序,如此处所述
我们的测试环境很好,金丝雀服务器测试也很好。然后,我们将构建推广到场中的其他服务器,突然开始看到很多这样的异常:
System.Data.SqlClient.SqlException (0x80131904):当会话 TRANSACTION ISOLATION LEVEL 设置为 SNAPSHOT 时,无法访问或创建内存优化表和本机编译模块
我们的提供者配置如下:
编辑:
删除了对未在此处配置的 AllowConcurrentRequestsPerSession 的引用,而是作为应用设置
sql-server - 使用一些初始值填充 schema_only 表
是否可以在数据库启动时填充 schema_only 表(带有一些初始值),例如通过调用存储过程?
如果我必须检测是否发生了冷启动,则通常在此表上运行的逻辑会更加复杂。
编辑:
似乎sp_procoption
让我走到了一半。但是,这样配置的存储过程在运行时是不会执行ALTER DATABASE <dbname> SET ONLINE;
的。这是一个遗憾,因为数据在ALTER DATABASE <dbname> SET OFFLINE;
运行时确实会消失。
sql-server - 内存优化表的统计信息和本机编译的存储过程的查询计划的问题
内存优化表:
据我了解,内存优化 (MO) 表的统计信息是在创建表时创建的,并且是空的,并且永远不会更新。为了更新索引上的 MO 表统计信息,一旦表中有数据,我需要手动强制更新统计信息。
我的大多数 MO 表都替换了存储过程中的 #temp 表,并且定义为仅模式持久性。
对存储过程的每次调用都会被赋予一个“会话 ID”,我有一项工作会根据旧的“会话 ID”定期清理 MO 表。
话虽如此,MO表拥有最多数据的时间恰好是在清理之前。因此,在清理过程中并在删除语句之前更新表统计信息是有意义的。
本机编译的存储过程:
与 MO 表非常相似,本地编译 (NC) 存储过程的查询计划是在创建过程时生成的,并且仅在 SQL Server 重新启动时才更新。在创建过程或 SQL Server 重新启动时,MO 表是空的,因为它们是使用仅模式持久性定义的。重新创建查询计划的唯一方法是删除 NC 存储过程并在 MO 表中有数据时重新创建它们。这意味着该过程必须在没有适当查询计划的情况下至少运行一次。这是不可接受的——既不必在没有适当查询计划的情况下运行一次程序,也不必在正常操作期间重新创建 NC 程序。
另一种选择是在 NC 存储过程中的每个查询上使用索引提示和强制顺序。这迫使开发人员构建查询计划并忽略 SQL Server。如果是这样的话,我们还不如在 C++ 或 C# 中工作,而不必为 NC 程序而烦恼。
有没有关于如何更好地利用 MO 表和 NC 存储过程的建议?我正在使用 SQL Server 2014,但我相信这些适用于更新版本的 SQL Server。
c# - 获取未更新的 SQL Server 记录
我有一个可以处理多个处理器请求的 API。API 的工作是从内存优化表中选择记录并标记分配的状态并将其交给请求者。我有多个处理器可以同时请求工作,我们不断收到这种争用
我如何克服这个问题?
这是 API 中 GetWork 方法的示例
sql-server - SQL Server 内存中 oltp 事务快照隔离
试图了解事务隔离级别如何在 SQL Server 内存优化表(内存中 oltp)上工作。
如果我执行以下查询:
显示错误消息:
仅自动提交事务支持使用 READ COMMITTED 隔离级别访问内存优化表。显式或隐式事务不支持它。使用诸如 WITH (SNAPSHOT) 之类的表提示为内存优化表提供支持的隔离级别。
现在,如果我通过添加表提示来修改查询,它可以工作:
但是,如果我通过更改事务隔离级别SET TRANSACTION ISOLATION LEVEL SNAPSHOT
并删除表提示:
它再次显示错误消息不起作用:
当会话 TRANSACTION ISOLATION LEVEL 设置为 SNAPSHOT 时,无法访问或创建内存优化表和本机编译模块。
为什么它与表提示一起使用,并通过设置事务隔离级别
才不是?
更新:尝试设置MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT
为ON
,仍然从上次查询中得到相同的错误:
当会话 TRANSACTION ISOLATION LEVEL 设置为 SNAPSHOT 时,无法访问或创建内存优化表和本机编译模块。
sql - ALTER TABLE DROP INDEX 在未优化内存的表上失败
我正在尝试删除在表上创建的索引,但出现此错误 -
只有内存优化表支持“ALTER TABLE DROP INDEX”操作。
我需要删除这个索引才能在我的表中删除一个字段。有没有办法在不复制表和迁移所有数据的情况下做到这一点?
sql-server - 将现有的基于磁盘的表迁移到内存优化表
我们正在使用 ASP.NET MVC Core 开发一个 Web 应用程序,并使用 EntityFramework Core 进行数据访问。.net 核心版本是 2.2。现在,我们正在尝试将 SQL Server 2016 中的 MemoryOptimizedTables 用于我们现有的表。
我在 OnModelCreating 方法中添加了以下行,
modelBuilder.Entity<MailLog>().ForSqlServerIsMemoryOptimized();
然后我执行Add-Migration
它导致以下迁移文件。
我执行了更新数据库命令。我尝试使用空数据库。我尝试使用以下命令获取迁移脚本。
每次我收到以下错误。
谢谢。