有人知道如何获取在内存优化表上运行的查询所访问的页的数量吗?
对于内存表上运行的任何查询,使用 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
答案 0 :(得分:0)
In-memory
对象不使用in-memory
数据页。数据行在行链的下一行具有pointers
。
以下是BOL文章对其进行解释:Indexes on Memory-Optimized Tables
所有内存优化表必须至少具有一个索引,因为它 是将行连接在一起的索引。在内存优化的情况下 表中,每个索引也经过内存优化。有几种方法 内存优化索引上的索引与传统索引不同 基于磁盘的表上的索引:
数据行未存储在页面上,因此没有页面集合 或范围,没有可以引用的分区或分配单元 获取表的所有页面。有索引页的概念 用于一种可用的索引类型,但它们被存储 与基于磁盘的表的索引不同。他们不产生 页面内的传统碎片类型,因此它们没有 填充因子。在此期间对内存优化表上的索引进行的更改 数据操作永远不会写入磁盘。仅数据行,以及 数据更改将被写入事务日志。 恢复数据库后,将重建内存优化的索引 在线。