SQL Server在哪裏存放DMV的數據?

我被反覆問到的一個問題是,經過各個DMV和DMF返回的數據,SQL Server在哪裏存放?前端

不少人認爲這類數據會存放在像mater這樣的系統數據庫裏。但事實並不是如此。各個系統數據庫(master和msdb)只存儲配置數據。那麼如今的問題是:DMV或DMF的數據存放在哪裏呢?sql

這個問題的答案很是簡單:這類數據不物理存儲在數據庫裏!是的,你沒看錯:這個數據不物理存儲在硬盤上。這個數據從內存(RAM)裏直接讀取和返回。當你訪問DMV或DMF時,SQL Server返回直接存儲sqlservr.exe進程空間裏的數據。數據庫

SQL Server的大部分用C++寫的,有一些特定的彙編程序(至少我這麼認爲……),且包含上百(甚至上千)個各類C++類。如今當你訪問DMV或DMF時,SQL就返回存儲在特定C++類裏的數據。DMV或DMF基本上是個前端,在SQL Server特定方式裏,你能夠用它查詢進程中的數據結構。編程

這聽起來很簡單和直接,但很難實現。首先你要讓這些數據結構儘量高效的讀寫,並且你要在線程安全的方式裏實現!並且由於數據不是在任何地方物理永駐的,當你重啓你的SQL Server時,你會丟失全部這些數據。安全

你已經屢次聽到,你毫不應該按期重啓你的SQL Server,由於它會帶來大量的付做用。今天我不想談全部這些反作用,但其中一個反作用是你會丟失來自DMV或DMF的數據。這很容易理解,由於你從sqlserver.exe的進程控件裏直接讀取這個數據。你已經看過這個狀況:你重啓SQL Server,而後你的等待統計信息就直接清空了!數據結構

小結

SQL Server物理永駐,能夠經過各個DMV或DMF返回的數據,仍是個迷。當你在SQL Server裏查詢DMV或DMF時,你只拿回,在sqlservr.exe進程空間裏,特定數據結構存儲的數據。由於你要記住,一旦你進行了一次SQL Server重啓(或故障羣集結點轉移),你會丟失可用於性能故障排查的數據。sqlserver

感謝關注!性能

原文連接

https://www.sqlpassion.at/archive/2016/07/18/where-sql-server-does-store-the-data-of-dmvs/ spa

相關文章
相關標籤/搜索