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

相关文章
相关标签/搜索