内存优化表中的逻辑读取

时间:2019-02-26 22:38:59

标签: sql-server

有人知道如何获取在内存优化表上运行的查询所访问的的数量吗?

对于内存表上运行的任何查询,使用 sys.dm_exec_query_stats 始终返回零逻辑读取。

SELECT * , total_logical_reads
FROM (SELECT QS.*,  SUBSTRING(ST.text, (QS.statement_start_offset/2) + 1,  
((CASE statement_end_offset WHEN -1 THEN DATALENGTH(ST.text)  
    ELSE QS.statement_end_offset END - QS.statement_start_offset)/2) + 1) AS statement_text  
 FROM sys.dm_exec_query_stats AS QS  
 CROSS APPLY sys.dm_exec_sql_text(QS.sql_handle) as ST) as query_stats  

total_logical_read = 0

1 个答案:

答案 0 :(得分:0)

In-memory对象不使用in-memory数据页。数据行在行链的下一行具有pointers

以下是BOL文章对其进行解释:Indexes on Memory-Optimized Tables

  

所有内存优化表必须至少具有一个索引,因为它   是将行连接在一起的索引。在内存优化的情况下   表中,每个索引也经过内存优化。有几种方法   内存优化索引上的索引与传统索引不同   基于磁盘的表上的索引:

     

数据行未存储在页面上,因此没有页面集合   或范围,没有可以引用的分区或分配单元   获取表的所有页面。有索引页的概念   用于一种可用的索引类型,但它们被存储   与基于磁盘的表的索引不同。他们不产生   页面内的传统碎片类型,因此它们没有   填充因子。在此期间对内存优化表上的索引进行的更改   数据操作永远不会写入磁盘。仅数据行,以及   数据更改将被写入事务日志。   恢复数据库后,将重建内存优化的索引   在线。