Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用tempdb的SQL Server内存中表_Sql_Sql Server_Sql Server 2014_In Memory_In Memory Tables - Fatal编程技术网

使用tempdb的SQL Server内存中表

使用tempdb的SQL Server内存中表,sql,sql-server,sql-server-2014,in-memory,in-memory-tables,Sql,Sql Server,Sql Server 2014,In Memory,In Memory Tables,我正在SQL 2014上测试内存中的表,特定查询的执行计划是在tempdb中显示排序 查询在两个内存中的表(在两个表中都有非聚集索引的字段上)和一个具有少量总和和计数的group by之间有一个联接—服务器有大量可用RAM 如果表“在内存中”,为什么要在tempdb中对查询进行排序 我还想知道,如果内存中的表不允许使用“CREATEINDEX”语句,为什么SQL会建议创建索引。此查询是在互操作模式下运行的。除了从Hekaton表中提取数据外,它使用普通的查询处理器。否则我想不出有什么变化 您从

我正在SQL 2014上测试内存中的表,特定查询的执行计划是在tempdb中显示排序

查询在两个内存中的表(在两个表中都有非聚集索引的字段上)和一个具有少量总和和计数的group by之间有一个联接—服务器有大量可用RAM

如果表“在内存中”,为什么要在tempdb中对查询进行排序


我还想知道,如果内存中的表不允许使用“CREATEINDEX”语句,为什么SQL会建议创建索引。

此查询是在互操作模式下运行的。除了从Hekaton表中提取数据外,它使用普通的查询处理器。否则我想不出有什么变化

您从Hekaton获得的加速比非常有限(如果有的话)


不能使用
create index
语句,但可以在表创建时创建索引。

此查询正在互操作模式下运行。除了从Hekaton表中提取数据外,它使用普通的查询处理器。否则我想不出有什么变化

您从Hekaton获得的加速比非常有限(如果有的话)



您不能使用
create index
语句,但可以在表创建时创建索引。

数据可能存储在内存中,但查询处理器仍只能使用其内存授权中提供的内存来实际执行查询,如果排序运算符所需的内存由于优化器的错误估计而超过此值,它将以与使用基于磁盘的表的查询相同的方式溢出。

数据可能存储在内存中,但查询处理器仍然只能使用其内存授权中提供的内存来实际执行查询,如果排序运算符所需的内存由于优化器的错误估计而超过此值,它将以与使用基于磁盘的表的查询相同的方式溢出。

您确定上面的表在内存中吗?不确定是否会显示为表扫描操作符。我希望进行索引扫描。您可以在
CREATE TABLE
语句(->,请参见
)中定义索引,谢谢您的评论。是的,我100%确定这些表都在内存中——我只是觉得sql会建议这样的索引很奇怪……但是没关系,忽略索引,知道为什么临时数据库溢出了吗?也许这有助于解释?谢谢@LesH,这是一篇很好的文章,但是表没有散列索引,只有非聚集索引-而且统计数据似乎还可以,因为“估计行数”与“实际行数”相同。您确定上面的表是“内存中”吗?不确定是否会显示为表扫描操作符。我希望进行索引扫描。您可以在
CREATE TABLE
语句(->,请参见
)中定义索引,谢谢您的评论。是的,我100%确定这些表都在内存中——我只是觉得sql会建议这样的索引很奇怪……但是没关系,忽略索引,知道为什么临时数据库溢出了吗?也许这有助于解释?感谢@LesH,这是一篇很好的文章,但是表没有散列索引,只有非聚集索引-而且统计数据似乎还可以,因为“估计行数”与“实际行数”相同,但为什么要使用tempDb,可以避免吗?我的意思是,如果SQL必须使用tempDb对数据进行排序,那么内存中的表有什么意义呢?您可以使用编译的过程来获取内存中的查询管道。这永远不会泄漏。不确定内存是如何分配的。如果我没记错的话,有一些限制。Hekaton查询管道还不是为批量查询而设计的。我认为目前没有散列或合并联接。您可能不喜欢所得到的结果。使用标准查询调优技术可以避免泄漏,因为这不是Hekaton特有的。不确定在没有查询、查询计划和模式的情况下推荐什么。但为什么要使用tempDb,可以避免吗?我的意思是,如果SQL必须使用tempDb对数据进行排序,那么内存中的表有什么意义呢?您可以使用编译的过程来获取内存中的查询管道。这永远不会泄漏。不确定内存是如何分配的。如果我没记错的话,有一些限制。Hekaton查询管道还不是为批量查询而设计的。我认为目前没有散列或合并联接。您可能不喜欢所得到的结果。使用标准查询调优技术可以避免泄漏,因为这不是Hekaton特有的。不确定在没有查询、查询计划和架构的情况下推荐什么。这是有意义的,但服务器上有大量可用内存并分配给SQL server,这可能是事实,但单个查询在运行时不能超过其内存授权,且授权无法更改,因此一旦启动,它被优化器根据当时的信息决定需要的内存块卡住了。如果该值太低,则需要优化查询或索引/统计信息,以便优化器能够更好地决定内存授予。这是有道理的,但服务器上有大量可用内存,并且可能会分配给SQL server,但是一个查询在运行时不能超过它的内存分配,而且分配也不能更改,因此一旦启动,它就会被优化器根据当时的信息决定需要的内存块卡住。如果这个值太低,那么您需要优化查询或索引/统计信息,以便优化器能够更好地决定内存授予。