问题标签 [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 中现有内存优化表的 DURABILITY 选项?
我想将 SQL Server 2016 中内存优化表的 DURABILITY 从 SCHEMA_AND_DATA 更改为 SCHEMA_ONLY。
Microsoft 文档建议以下 ALTER TABLE 语句应该起作用:
但它给出了以下错误:
更改表上的持久性设置的正确语法是什么?我还缺少任何其他步骤吗?
sql-server - SQL Server 内存优化表 - 与临时表相比性能较差
我正在尝试使用经典临时表对 Microsoft SQL Server 2016 中的内存优化表进行基准测试。
SQL Server 版本:
相对
这个测试做什么?
- 1000 个刀片
- 100 次随机更新
- 100 次随机删除
这会重复 1000 次。
第一个使用经典临时表的存储过程大约需要 6 秒才能运行。
第二个存储过程至少需要 15 秒,并且通常会出错:
开始执行循环
消息 3998,级别 16,状态 1,第 3
行在批处理结束时检测到不可提交事务。事务被回滚。消息 701,级别 17,状态 103,过程 CrudTest_memopt_hash,第 16 行 [Batch Start Line 2]
资源池“默认”中的系统内存不足,无法运行此查询。
我做了以下优化(在更糟之前):
哈希索引包括 Col1 和 SpidFilter
在单个事务中做所有事情使它工作得更快(但是没有它运行会很好)
我正在生成随机 id - 没有它,每次迭代的记录最终都在同一个桶中
我还没有创建本地编译的 SP,因为我的结果很糟糕。
我的盒子上有足够的空闲 RAM,SQL Server 可以使用它——在不同的情况下,它会分配很多内存,但在这个测试用例中,它只会出错。
对我来说,这些结果意味着内存优化表不能替换临时表。你有类似的结果还是我做错了什么?
使用临时表的代码是:
内存测试中使用的对象是:
使用它们的存储过程是:
指数统计:
更新
我包括我的最终测试用例和用于创建过程、表等的 sql 代码。我已经在空数据库上执行了测试。
SQL 代码:https ://pastebin.com/9K6SgAqZ
测试用例:https ://pastebin.com/ckSTnVqA
我的最后一次运行看起来像这样(临时表是表中最快的,但我能够使用内存优化表变量实现最快的时间):
sql - 内存优化表的条件唯一约束
我试图在我拥有的 MEMORY OPTIMIZED 表中保持完整性。该表中有一个指向另一个表的外键(唯一标识符)和一个表示记录是否处于活动状态的活动标志(位)。
如果传入记录与现有记录具有相同的外键,我想阻止插入发生,前提是现有记录处于活动状态(Active = 1)。
因为这是一个内存优化表,所以我无法做到这一点。我尝试创建一个唯一索引,发现它们在内存优化表中是不允许的。
更新:我最终使用存储过程来解决我的问题。存储过程将在插入或更新记录之前为我进行检查。
database-design - 在 RocksDB 中高效存储大列表结构,以便在页面中检索数据
描述:
RocksDB 是一个键值存储,因此我们可以简单地序列化对象列表并存储与键对应的值。如果列表中的数据足够小,这将是可以的。
但是如果列表很大并且不断增加,那么我们需要对数据进行分页。因此,在这种情况下,存储与单个键对应的整个序列化列表数据不是一个好主意;因为每次将新数据插入列表时都会出现性能问题用户需要。
例如:假设我们想将用户下的订单存储在 RocksDB 中。然后我们可以在 RockDB “u:1:li:o” 中以以下方式存储这些订单数据:Serialized([O1{}, O2{},….On{}])。但是,如果用户下达了数千个订单,我们希望以页面的形式检索订单(一次 10 或 20 条记录)。因此,将数千个订单存储在同一个键中并从该键中检索整个数据,然后提供所需的 10-20 条记录并不是一个好主意。此外,用户向同一键添加新订单也会影响上述性能。
所以我正在努力设计架构,以便在 RocksDB 中有效地存储和检索如此大的列表。
如果您可以就架构设计提出建议,那将非常有用。
sql-server - 如何从 UDF 返回 MEMORY OPTIMIZED 表?
如何将 UDF 返回表变量重写为函数返回内存优化类型 dbo.TypeOUT ?
memory-optimized-tables - 内存优化表中的时间消耗
我创建了一个演示,比如先创建一个临时表,然后创建一个内存表,然后将一些插入查询插入临时表,然后使用相同的插入查询插入内存表。在运行每个查询之前,我已经清除了缓冲区。最后发现In Memory表的耗时总是比Temp表大2-4secs。但它不应该。那么有人能告诉我为什么会这样吗?提前致谢。
sql-server - 使用内存优化表的跨数据库查询
我正在尝试通过使用内存优化表作为常用数据的缓存来调整系统。问题是我的系统设计有独立的数据库(在同一台服务器上),由核心功能隔离。例如,我想拥有一个在曲线管理方面具有高性能的曲线数据库。其他数据库使用该数据库上的数据进行估值等。我希望曲线数据库具有其他数据库可以快速读取的优化表,调用获取数据的函数或执行一些内存操作。问题是我遇到了这个限制:
访问内存优化表或本机编译模块的用户事务不能访问多个用户数据库或数据库模型和 msdb,并且它不能写入 master。
我尝试使用 Microsoft 创建内存优化表类型的示例,并使用它来存放数据以供在目标数据库中使用,但这没有用 - 得到了同样的错误。我看到了通过 tempdb 复制数据的示例。这两个示例都需要目标数据库中的数据副本,但我真正想做的只是读取数据并在目标数据库中使用它。有没有人能够跨数据库成功地完成这项工作?
从一些测试来看——它们的速度非常快,因此非常渴望让它们工作。网上有一些通用示例,但似乎找不到任何真实世界的示例来说明如何使它们真正有用。
asp.net - Web 配置与内存表/内存优化表
在我的 ASP.NET Web 应用程序的 web.config 文件中,我在<appsettings>
. 我应该将此 web.config 文件转换为 SQL Server 的内存中表/内存优化表吗?我会得到任何性能提升吗?web.config文件不会有写操作
sql - 当前事务试图更新自该事务开始以来已更新的记录。交易被中止
我正在尝试更新内存中 OLTP 的表。在这种情况下,我们可能必须并行更新同一行。在同一记录的并发更新期间,我得到低于报告的错误。这是我的示例更新声明。
在 SQL 窗口 1 中同时在窗口 2 中执行以下命令,我正在执行第二个更新命令
窗口 2:
现在我得到低于报告的错误。但同样适用于普通表,第二个窗口正在等待完成第一个窗口事务。我如何也为内存优化表设置至少相同的行为。
System.Data.SqlClient.SqlException (0x80131904):当前事务试图更新自该事务开始以来已更新的记录。交易被中止。该语句已终止。
在 System.Data.SqlClient.SqlCommand.<>c.b__126_0(任务1 result) at System.Threading.Tasks.ContinuationResultTaskFromResultTask
2.InnerInvoke() 在 System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext,ContextCallback 回调,对象状态)