在sql server 2016中创建内存中表时的Bucket count帮助

在sql server 2016中创建内存中表时的Bucket count帮助,sql,sql-server,sql-server-2016,in-memory,in-memory-oltp,Sql,Sql Server,Sql Server 2016,In Memory,In Memory Oltp,我有一些业务需要每天运行,并且将影响表中的所有行。一旦一条记录被修复,并且不能通过逻辑再次更改,它就会被移动到磁盘上的表中。在其最大值下,表中将有大约3000万行。它非常简单,只是将项目链接到主表和标记表的键。标志键将被更新 我的问题是,当我准备一个这样大小的表时,我应该在索引上使用哪种大小的桶计数 该表开始时很小,4月份可能只有几十万行,但到财政年度结束时,它将增长到前几年所述的最大值,我不确定开始时这个几乎是空的桶是否会有任何问题,或者是否可以将计数定在3000万大关 提前感谢您的评论、建议

我有一些业务需要每天运行,并且将影响表中的所有行。一旦一条记录被修复,并且不能通过逻辑再次更改,它就会被移动到磁盘上的表中。在其最大值下,表中将有大约3000万行。它非常简单,只是将项目链接到主表和标记表的键。标志键将被更新

我的问题是,当我准备一个这样大小的表时,我应该在索引上使用哪种大小的桶计数

该表开始时很小,4月份可能只有几十万行,但到财政年度结束时,它将增长到前几年所述的最大值,我不确定开始时这个几乎是空的桶是否会有任何问题,或者是否可以将计数定在3000万大关

提前感谢您的评论、建议和帮助

我已经提供了下面的代码,并且我试着用谷歌搜索如果bucket count很高,但是随着表的增长,初始行数很低会发生什么,但是没有发现任何东西可以帮助我理解是否会因此而出现性能问题

CREATE TABLE [PRD].[CTRL_IN_MEM]
(
    [FILE_LOAD_ID] INT NOT NULL,
    [RECORD_IDENTIFIER] BIGINT NOT NULL,
    [FLAG_KEY] SMALLINT NOT NULL,
    [APP_LEVEL_PART] BIT NOT NULL

--Line I'm not sure about
    CONSTRAINT [pk_CTRL_IN_MEM] PRIMARY KEY NONCLUSTERED HASH ([FILE_LOAD_ID], [RECORD_IDENTIFIER]) WITH (BUCKET_COUNT = 30000000),
    INDEX cci_CTRL_IN_MEM CLUSTERED COLUMNSTORE

) WITH (MEMORY_OPTIMIZED = ON, DURABILITY=SCHEMA_AND_DATA)

为什么首先要使用内存中的表?它们旨在处理高流量场景,而不是“加速”数据访问。表数据访问已被缓冲。30m行/年是少量数据。如果要创建事实表或任何其他类型的报表表,请考虑在物理表上使用CultSt店索引。您可以通过deltastore获得压缩、内存处理优势、100倍性能和快速插入。不过,德尔塔斯托尔的限制是100万行。由于数据太少,您必须等待数月,服务器才会自动将其中的任何行移动到columnstore。你必须安排一个
改变索引。。。重建
例如,每天晚上都要避免这种情况。嗨,谢谢。这不是事实表。此表用于更新标志键。在该标志引用表中有大量的标志,它们支持不同的数据视图。通过将标志键更新为相关的新键,我不需要为每一行保留所有标志,只需要一列,我就可以在客户看到的视图中加入这些标志,并向他们展示他们所要求的内容。这仍然是一个很少更新的小表。3000万行/年仅为每秒2行。注释中的任何内容都不能证明使用内存表是合理的。你可能应该解释实际问题是什么,而不是你是如何试图解决它的。甚至谈论标志表也是为了解决实际问题,而不是问题本身。SQL Server创建用于优化星形联接,因此“标志表”实际上可能会损害性能,而不是提高性能。这无疑会增加报告的难度。至于事实数据表,问题提到的是变为不可变的行,即财务期间。评论谈到了多种观点。这就是适当的报告模式(如星形模式)所能解决的问题。与其每次都尝试查询实时数据,不如将数据复制到专门的报告模式中,以使报告更容易。同样,3000万行数据也很少。除非查询和模式不适合该作业,否则物理表不应该有性能问题。解决方案是不使用内存中的表,它不会使报告查询更快。为什么首先要使用内存中的表?它们旨在处理高流量场景,而不是“加速”数据访问。表数据访问已被缓冲。30m行/年是少量数据。如果要创建事实表或任何其他类型的报表表,请考虑在物理表上使用CultSt店索引。您可以通过deltastore获得压缩、内存处理优势、100倍性能和快速插入。不过,德尔塔斯托尔的限制是100万行。由于数据太少,您必须等待数月,服务器才会自动将其中的任何行移动到columnstore。你必须安排一个
改变索引。。。重建
例如,每天晚上都要避免这种情况。嗨,谢谢。这不是事实表。此表用于更新标志键。在该标志引用表中有大量的标志,它们支持不同的数据视图。通过将标志键更新为相关的新键,我不需要为每一行保留所有标志,只需要一列,我就可以在客户看到的视图中加入这些标志,并向他们展示他们所要求的内容。这仍然是一个很少更新的小表。3000万行/年仅为每秒2行。注释中的任何内容都不能证明使用内存表是合理的。你可能应该解释实际问题是什么,而不是你是如何试图解决它的。甚至谈论标志表也是为了解决实际问题,而不是问题本身。SQL Server创建用于优化星形联接,因此“标志表”实际上可能会损害性能,而不是提高性能。这无疑会增加报告的难度。至于事实数据表,问题提到的是变为不可变的行,即财务期间。评论谈到了多种观点。这就是适当的报告模式(如星形模式)所能解决的问题。与其每次都尝试查询实时数据,不如将数据复制到专门的报告模式中,以使报告更容易。同样,3000万行数据也很少。除非查询和模式不适合该作业,否则物理表不应该有性能问题。解决方案不是使用内存中的表,它不会使报告查询更快。