In-Memory:記憶體優化表 DMV

来源:http://www.cnblogs.com/ljhdo/archive/2016/12/29/5770575.html
-Advertisement-
Play Games

在記憶體優化表的DMV中,有兩個對象ID(Object ID): xtp_object_id 是內部的記憶體優化表(Internal Memory-Optimized Table)的ID,在對象的整個生命周期中,該ID可變; object_id 是User Table的ID,唯一標識該User Tabl ...


在記憶體優化表的DMV中,有兩個對象ID(Object ID):

  • xtp_object_id 是內部的記憶體優化表(Internal Memory-Optimized Table)的ID,在對象的整個生命周期中,該ID可變;
  • object_id 是User Table的ID,唯一標識該User Table,在對象的整個生命周期中,該ID不變;

一,查看記憶體優化結構

xtp_object_id 是內部的記憶體優化表的ID(Internal Memory-Optimized Table),每一個User Table都對應一個或多個Internal Table:

二,查看記憶體優化表占用的物理記憶體

--memory usage
select tms.object_id
    ,object_schema_name(tms.object_id)+'.'+object_name(tms.object_id) as table_name
    ,(tms.memory_allocated_for_indexes_kb+tms.memory_allocated_for_table_kb)/1024 as total_allocated_mb
    ,tms.memory_allocated_for_table_kb/1024 as table_allocated_mb
    ,tms.memory_used_by_table_kb/1024 as table_used_mb
    ,(tms.memory_allocated_for_table_kb-tms.memory_used_by_table_kb)/1024 as table_unused_mb
    ,tms.memory_allocated_for_indexes_kb/1024 as index_allocated_mb
    ,tms.memory_used_by_indexes_kb/1024 as index_used_mb
    ,(tms.memory_allocated_for_indexes_kb-tms.memory_used_by_indexes_kb)/1024 as index_unused_mb
from sys.dm_db_xtp_table_memory_stats tms
where tms.object_id>0

三,查看記憶體消費者(Memory Consumer)

每一個MOT都有單獨的Memory Heap,稱作VarHeap,是一個Memory Consumer,SQL Server從VarHeap中為MOT的數據分配記憶體空間。varheap是可變大小的堆數據結構,能夠收縮和增長。VarHeap是由固定數量的Allocation Unit組成的集合。Allocation Unit用於分配特定大小的Page,Page的大小是不固定的,最常見的Page Size是64KB。

VarHeap用於Table Row 和 Bw-Tree Index。每一個LOB列(使用max指定大小)都有自己獨立的VarHeap。在創建MOT時,SQL Server決定哪些column存儲在Table的VarHeap中,哪些column存儲在自己獨立的VarHeap中。

Hash Index 使用另外一個Memory Consumer,稱作Hash。

select
    object_schema_name(mc.object_id)+'.'+object_name(mc.object_id) as table_name 
    ,a.xtp_object_id
    ,a.type_desc as xtp_object_type
    ,iif(a.minor_id=0,'User Table','Off-Row Column:'+col_name(a.object_id,a.minor_id)) as xtp_object
    ,mc.memory_consumer_id as consumer_id
    ,mc.memory_consumer_type_desc as consumer_type
    ,mc.memory_consumer_desc as consumer_desc
    ,i.name as index_name
    ,i.type_desc as index_type_desc
    ,mc.allocated_bytes/1024/1024 as allocated_mb
    ,mc.used_bytes/1024/1024 as used_mb
    ,mc.allocation_count
from sys.dm_db_xtp_memory_consumers mc
inner join sys.memory_optimized_tables_internal_attributes a
    on mc.object_id=a.object_id
        and mc.xtp_object_id=a.xtp_object_id
left join sys.indexes i 
    on mc.object_id=i.object_id
        and mc.index_id=i.index_id
where mc.object_id=object_id('[influencer].[Influencers]')
View Code

引用:SQL Server In-Memory OLTP Internals for SQL Server 2016

The varheaps are used for both table rows and Bw-tree indexes. (Hash indexes are the only structure used with memory-optimized tables that uses a different memory consumer.) In addition, each LOB, column (specified with the MAX qualifier in the datatype definition) has its own varheap. As mentioned earlier, SQL Server 2016 also supports large columns similar to the row-overflow columns for disk-based tables. For memory-optimized tables, SQL Server will decide when the table is created which of your variable length columns will be stored in the table’s varheap and which will be stored as overflow data and have their own varheap. You can think of LOB and row-overflow columns as being stored in their own internal tables.

You can examine the metadata for each varheap (and the other memory consumers) in a DMV called sys.dm_db_xtp_memory_consumers. Each memory-optimized table has a row in this view for each varheap and for each hash index. (We will see one more type of memory consumer, called HkCS Allocator, in the section on columnstore indexes on memory-optimized tables.) If we join this DMV with the catalog view called sys.memory_optimized_tables_internal_attributes we can see which varheap belongs to a specific column. Each user table has a unique object_id and xtp_object_id value which is used by all the indexes. Each additional varheap, for the row_overflow and LOB columns will have its own xtp_object_id. Note that if an object is altered, its xtp_object_id will change, but its object_id will not. 

四,Hash Index的鏈表長度

對於Hash Index,表示鏈長的欄位有:avg_chain_length 和 max_chain_length ,鏈長應保持在2左右;鏈長過大,表明太多的數據行被映射到相同的Bucket中,這會顯著影響DML操作的性能。

導致鏈長過大的原因是:

  • 總的Bucket數量少,導致不同的Index Key映射到相同的Bucket上;
  • 如果空的Bucket數量大,但鏈長過大,這說明,Hash Index存在大量重覆的Index Key;相同的Index Key被映射到相同的bucket;
  • 詳細信息,請閱讀:sys.dm_db_xtp_hash_index_stats (Transact-SQL)

五,事務

在訪問MOT時,有兩種類型事務ID,在事務中,訪問MOT和訪問DBT的事務是獨立的:

 查看當前資料庫中活躍事務的信息:

select t.xtp_transaction_id
    ,t.transaction_id
    ,t.session_id
    ,t.begin_tsn
    ,t.end_tsn
    ,t.state_desc
    ,t.result_desc
from sys.dm_db_xtp_transactions t

 

參考文檔:

Memory-Optimized Table Dynamic Management Views (Transact-SQL)


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 大致分為以下幾個方面: 一些查詢指令整理 使用SQL語句進行特殊查詢 檢測表欄位是否存在 資料庫升級 資料庫表欄位賦初始值 一、查詢指令整理 1.鏈式執行的指令 一般的查詢語句會在中間xxx的位置加上各種判斷和過濾的方法指令,除了最後的終結指令list()或unique()返回的是集合或業務對象,其 ...
  • 微信的張小龍也說了,小程式主要是通過二維碼進行傳播,那麼小程式的二維碼如何統計各個渠道的值呢? 微信小程式開發了帶參數二維碼,而帶參數二維碼就可以進行渠道統計 不然我有3個人,讓3個人使用不同的小程式二維碼進行地推 地推人員A 二維碼A 參數hotapp=a 地推人員B 二維碼B 參數hotapp= ...
  • 最近在學習安卓APP的開發,用到了toolbar這個控制項, 最開始使用時include layout這種方法,不過感覺封裝性不好,就又改成了自定義組合控制項的方式。 使用的工具為android studio 2.2,簡稱AS吧 1.首先創建一個新的自定義控制項,如下圖。AS會創建3個文件, 一個java ...
  • 新項目用swift3.0開發,現在基本一個月,來總結一下遇到的問題及解決方案 1,在確定新項目用swift後,第一個考慮的問題是用純swift呢?還是用swift跟OC混編 考慮到新項目也不可避免的使用很多第三方庫,而第三方庫不一定支持swift或者有swift的替代版本,所以最終還是決定混編了; ...
  • Android游戲開發實踐(1)之NDK與JNI開發03 前面已經分享了兩篇有關Android平臺NDK與JNI開發相關的內容。以下列舉前面兩篇的鏈接地址,感興趣的可以再回顧下。那麼,這篇繼續這個小專題,主要分享下AndroidStudio下的NDK與JNI開發的相關操作以及簡述下CMake的使用。 ...
  • 之前的博文《Android中使用ExpandableListView實現好友分組》我簡單介紹了使用ExpandableListView實現簡單的好友分組功能,今天我們針對之前的所做的仿微信APP來對ExpandableListView做一個擴展介紹,實現效果如下(通訊里使用ExpandableLis ...
  • 如果SQL query中有參數,SQL Server 會創建一個參數嗅探進程以提高執行性能。該計劃通常是最好的並被保存以重覆利用。只是偶爾,不會選擇最優的執行計劃而影響執行效率。 SQL Server嘗試通過創建編譯執行計劃來優化你的存儲過程的執行。通常是在第一次執行存儲過程時候會生成並緩存查詢執行 ...
  • 搭建好Fabric之後,就可以在它的基礎上創建HA Group、 Shard Group、HA+Shard Group等。這裡來說明一下如何快速的搭建HA環境。 Fabric 192.168.2.234:33060 Master 192.168.2.234:33061 Slave1 192.168. ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...