运行 SQL Server Standard 2016 SP2-CU1。我不太关心内存文件组,但我必须能够删除表对象?或者可能重命名它们?
跑步:
DROP TABLE [REF].[Work_xxyyzz]
Run Code Online (Sandbox Code Playgroud)
给出:
消息 12332,级别 16,状态 111,第 1 行
内存优化表不支持 DDL 语句 CREATE、ALTER 和 DROP 上的数据库和服务器触发器。
我的内存表上没有用户触发器或事件。5 个带主键的简单表。
这些表没有依赖关系或引用。它们就像临时表,我们将它们命名为Work_xxxyyzz表。但是,它们确实属于数据库模式。
我可以暂时保留文件组。我想删除这些表以创建同名的默认对象。
sql-server memory-optimized-tables drop-table sql-server-2016
我们在 Windows 上使用 SQL Server 2019,并在某些数据库上激活了内存中 oltp。服务器重新启动/服务重新启动后,内存数据库需要很长时间才能可用(超过一个小时),即使大多数表不持久。内存优化对象的大小非常小:10 MB
我们看到主数据库上有一个等待类型为(110514580ms)WAIT_XTP_RECOVERY的后台会话,并且几乎没有读取。CPU 核心利用率为 100%。磁盘闲置。
我们对此数据库使用透明数据加密(TDE)。该数据库使用同义词来访问同一实例上的另一个数据库。它使用服务代理。实例在数据库上设置了事务复制,但未激活内存。
添加 CPU 使其速度更快。这是一台低端机器,但并不垃圾。XTP 引擎 2.11。
知道发生了什么事吗?
将已经data compression启用减少存储在内存中的OLTP表使用的金额是多少?
如果是,我认为 CPU 工作负载会增加。
sql-server compression sql-server-2014 memory-optimized-tables
我创建了服务器范围 ddl 触发器来审核服务器上的用户活动。
现在,如果有人尝试创建内存表,该语句将失败并显示以下错误:
Error SQL72014: .Net SqlClient Data Provider: Msg 12332, Level 16, State 107,
Line 1 Database and server triggers on DDL statements DROP and CREATE are not
supported with memory optimized tables.
Run Code Online (Sandbox Code Playgroud)
我可以创建 ddl 触发器来忽略对内存表的操作吗?
sql-server in-memory-database sql-server-2014 memory-optimized-tables
内存优化表将 LOB 类型存储在内部表中。
我有一个没有显式 LOB 类型的表,但是当我对sys.memory_optimized_tables_internal_attributes运行查询时,我看到列出的 varchar(255) 列的 type_desc 值为INTERNAL OFF-ROW DATA TABLE。
SET ANSI_NULLS ON;
GO
SET QUOTED_IDENTIFIER ON;
GO
SET ANSI_PADDING ON;
GO
CREATE TABLE dbo.DERP
(
RECORD_KEY numeric(30, 0) NOT NULL
, COL_1 bigint NOT NULL
, COL_2 datetime2(0) NOT NULL
, COL_3 datetime2(0) NOT NULL
, COL_4 varchar(20) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
, COL_5 varchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
, COL_6 varchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
, COL_7 date NULL
, COL_8 bigint NULL
, …Run Code Online (Sandbox Code Playgroud) 如果两个表具有相同的架构,但一个是“正常”的,另一个是内存优化的,如果我研究索引应该如何用于“正常”,我可以对内存优化表进行直接推断吗?
找不到任何结论性的东西,所以我非常感谢链接、主题等。
我开始使用内存优化表,我遇到的问题是日志文件也随着数据库置于简单模式而增长。
在我的维护计划中,我检查点并缩小,但仍然存在问题。如果我将表恢复到普通磁盘表,一切看起来都很好。
有人知道原因吗?
数据库LOG_REUSE_WAIT_DESC在sys.databases.
所有的 mem opt 表都在 SCHEMA_ONLY 模式中,但仍然是完整的日志记录。
SQL Server 2017 版本 14.0.3037
我还在 SQL Server 错误日志中看到这些消息:
spid38s,Unknown,[INFO] 数据库 ID:[5]。删除不可恢复的检查点表行 (id: 669)
spid102,Unknown,[INFO] HkHostFreezeCkptTrimming()。数据库 ID:[5]。HkTrimLSN 冻结:1
spid102,未知,[信息] getMaxUnrecoverableCheckpointId()。数据库 ID:[5]。日志 LSN 开始:00001714:000004E0:0002 用于在完整备份期间修剪不可恢复的检查点文件表
sql-server transaction-log memory-optimized-tables sql-server-2017
在内存 OLTP 表中访问实体框架是否有任何限制?或者这是不可能的?
sql-server entity-framework in-memory-database memory-optimized-tables sql-server-2016
如果在 SQL Server 2016 中使用内存表,我可以将该表中的列定义为来自非内存(或磁盘绑定)表的外键吗?我知道外键确实需要是引用表的主键。
我只是想知道内存表的局限性和可靠性,以及它们与 SQL Server 2016 中的磁盘绑定表的配合情况。
我们所有交易的 99% 都是针对最近一周的数据,一个 WEEK_SELECTOR 列描述了哪一周被描述。按周对我们的 10 亿+ 行表进行分区将是有益的,如果最近一周的 50 万左右行位于内存分区中,则更是如此。
在尝试将前一周拆分到我们的内存优化文件组时
CREATE PARTITION FUNCTION [TPF](int) AS RANGE RIGHT FOR VALUES (N'1700114')
CREATE PARTITION SCHEME [TPS] AS PARTITION [TPF] TO ([PRIMARY], [memtest])
Run Code Online (Sandbox Code Playgroud)
我们收到以下错误:
Msg 7737, Level 16, State 1, Line 2
Filegroup memtest is of a different filegroup type than the first filegroup in partition scheme TPS
Run Code Online (Sandbox Code Playgroud)
我们现在假设分区的文件组必须是相同类型的,我们的计划是不可能的,但找不到文档说这是不可能的。
有人可以解释如何做到这一点,或者如果没有,请提供一个链接来说明?谢谢。
sql-server partitioning memory-optimized-tables sql-server-2016