MSSQL数据库后台进程(线程)
与Oracle数据库类似,微软数据库产品MSSQL也有诸多后台进程来保证数据库系统的高效正常运转,由于MSSQL采用的是线程模型,应该叫做后台线程,为了大家易于理解,我们在暂且称之为后台进程,下面我们就来简要看一下:
1、 数据写相关进程
1) Lazy writer:该进程用来确保系统缓冲区(buffer pool)中有足够的自由内存,该进程定期扫描缓冲内存页,以发现不常使用的内存页并将其移出缓冲区,期间,会先将脏页数据写出到磁盘并移除缓冲区。
2) Eager writer:和lazy writer类似,该进程也是负责将缓冲区内的脏页写出到磁盘,但它写出的这些内存页主要是和非日志(non-logged,例如:bulk insert,select into)操作相关,期间,允许读写新页并行发生。
3) Checkpoint:该进程定期扫描缓冲区以发现特定数据库的脏页,并将这些脏页写出到磁盘,通过创建一个在此之前确认所有脏页都写出到磁盘的时间点,可以减少最近数据库恢复需要的时间。用户可以通过提交checkpoint命令来请求一个检查点操作,或者系统也可以根据消耗的日志空间或时间自动产生一个检查点操作,此外,当系统中的某些事件也会导致检查点的发生,例如:增减或移除数据文件或日志文件,实例的关闭等。当检查点发生时,该进程将缓冲区内的脏页写出到磁盘,无论相关事务是否已经提交,都要写出到磁盘。
值得一提的是,这三个后台进程都是异步的,即它们在进行IO操作的同时可以去做其他工作,稍后再来检查之前IO的完成情况。
2、 事务日志相关进程
1) Log writer:该进程负责将事务日志从缓冲区刷出到磁盘日志文件。MSSQL2016前的版本,每个实例只有一个log writer进程,因此,该进程负责实例中的所有数据库log buffer。该进程通过异步IO完成log buffer到磁盘的写出,当用户提交一个事务时,该进程阻塞该用户会话,直到将相关数据库log buffer数据刷出到磁盘完成,同时,该进程还可以继续其他数据库log buffer的工作。MSSQL系统中的诸多事件都会触发log writer进程向磁盘写出log buffer中的内容,例如:会话提交当前事务,log buffer被写满,checkpoint等。
此外,该进程将lredo记录从log cache/buffer写出到磁盘log files时,写出单位是可以变化的,从512~64k不等,这点来说,不像data buffer写出进程一样,最小必须是数据页大小。
2) Backup log:该进程虽然严格来说算不上一个后台进程,因为它用于完成用户发出的“backup log…”命令,但它却是和事务日志紧密相关。
3、 系统监视和管理相关进程
1) Signal handler:该进程主要负责MSSQL实例的启动和关闭。
2) Task manager:该进程也会参与MSSQL实例的启动过程,主要用来启动实例相关的所有数据库。此外,该进程还负责启动MSSQL内部某些任务,以及监视实例服务进程和启动时间等任务。
3) Resource monitor:该进程主要负责监视内存层面的使用和状态,并在必要时对MSSQL相关缓冲进行调整,当检测到没有用户需求被处理时,将自动进入空闲状态。
4) Lock monitor:该进程负责监视阻塞时间超过系统相关阈值的场景,同时,还负责解决死锁问题。
5) Ghost cleanup:该进程会周期性的唤醒,并对所有索引中已被标记为删除的索引项进行检查,然后,将这些索引项物理移除。
6) Trace queue task:该进程负责监视跟踪文件和行集供应者。对跟踪文件,该进程每4秒就会将数据刷出到磁盘文件;对行集,将会关闭超过10分钟没收到任何事件的供应者。
4、 作业调度相关进程
SQLServer Agent:严格来说,这并不算是一个后台进程,而是windows服务,该服务负责完成各种作业的调度和执行。
5、 其他相关进程
1) XE Timer和XE Dispatcher:这些是扩展事件(Extended Event)相关的进程,负责定期将收集到的数据从缓冲异步发送到目的地。
2) BRKR EVENT HNDLR和BRKR TASK:这些事件是服务代理人(Service Broker)相关进程。前者主要负责处理服务代理的所有启动和关闭事件;后者为执行内部服务代理任务的众多进程之一。
我们可以通过如下SQL来查询MSSQL实例后台进程相关的信息:
select t.os_thread_id,r.session_id,r.status,r.command
from sys.dm_os_threads t inner join sys.dm_os_workers w on t.thread_address=w.thread_address
inner join sys.dm_exec_requests r on w.task_address=r.task_address
where r.status like '%background%';
MSSQL数据库后台进程(线程)的更多相关文章
- 一个防止误删MSSQL数据库的方法
一个防止误删MSSQL数据库的方法 环境:Windows2008 R2 .SQL 2012 今天发现一个有趣的现象,之前数据库服务器的其中几个数据库做过镜像,不过现在已经删除了,今天又要在那台服务器上 ...
- PHP连接MSSQL数据库案例,PHPWAMP多个PHP版本连接SQL Server数据库
课前小知识普及:MSSQL和SQL Server是同一个软件,叫法不同而已,MSSQL全称是Microsoft SQL Server,MSSQL是简写,有些人则喜欢直接叫SQL Server,我就比较 ...
- 【转发】PHP连接MSSQL数据库案例,PHPWAMP多个PHP版本连接SQL Server数据库
转发自:http://blog.csdn.net/lccee/article/details/54289076 课前小知识普及:MSSQL和SQL Server是同一个软件,叫法不同而已,MSSQL全 ...
- MSSQL数据库的一些基础知识
转几个关于MSSQL数据库基础的文章: sql server系统表详细说明 SQL Server中系统数据库介绍 SQL Server中的角色(服务器级别和数据库级别角色)
- MSSQL数据库中Text类型字段在PHP中被截断之解 (转)
在PHP中使用了MSSQL数据库,恰巧数据库中又使用了Text类型字段,于是问题产生了.每次从数据库中查询得到的数据总是被莫名的截断,一开始是以为我使用的PHP框架中对字符串的长度有所限制,后来发现这 ...
- PHP访问MSSQL数据库(实例代码)
本例子只作为简单的引导,实现一个简单的查询: <!DOCTYPE HTML> <html lang="en-US"> <head> <t ...
- C#(asp.net)备份还原mssql数据库代码【转】
采集自互联网,未验证..... 如果我们使用虚拟主机为网站空间,这时如果需要备份和还原msssql数据库是非常麻烦,如果在网站后台管理当中加入对msssql数据库的操纵,可以使我们对数据库的备份和还原 ...
- 如何判断MSSQL数据库磁盘出现了瓶颈
问大神石沫:如何判断MSSQL数据库磁盘出现了瓶颈? 石沫(A1):您好,您的问题非常好,SQL SERVER提供了很多关于I/O压力的性能计数器,请选择性能计算器PhysicalDisk(Logic ...
- MSSQL数据库迁移到Oracle
MSSQL数据库迁移到Oracle 最近要把一个MSSQL数据库迁移到Oracle上面,打算借助PowerDesigner这个软件来实现;今天简单研究一下这个软件的运用;把一步简单的操作步骤记录下来: ...
随机推荐
- openlayer ol.js和ol-debug.js的使用 调试技巧
二者实现的功能是一样的,有以下区别 : ol.js一般打包项目的时候使用, ol-debug.js编写代码调试的时候使用. 下边是用ol-debug.js编写代码调试的显示: 编写代码调试的技巧,所有 ...
- Codeforces 785 D. Anton and School - 2
题目链接:http://codeforces.com/contest/785/problem/D 我们可以枚举分界点,易知分界点左边和右边分别有多少个左括号和右括号,为了不计算重复我们强制要求选择分界 ...
- P4391 [BOI2009]Radio Transmission
描述: 给你一个字符串,它是由某个字符串不断自我连接形成的. 但是这个字符串是不确定的,现在只想知道它的最短长度是多少. 输入格式: 第一行给出字符串的长度,1 < L ≤ 1,000,000. ...
- JAVA9新特性——JShell使用笔记
前言:JShell是java 9的新特性之一,由于在之前学校java8的lambda表达式的时候,就希望有这么一个可以交互的界面来快速响应编写的代码.刚好java9出来了,就对它把玩起来了... 内容 ...
- 力扣(LeetCode)67. 二进制求和
给定两个二进制字符串,返回他们的和(用二进制表示). 输入为非空字符串且只包含数字 1 和 0. 示例 1: 输入: a = "11", b = "1" 输出: ...
- 第 3 章 镜像 - 017 - RUN vs CMD vs ENTRYPOINT
RUN.CMD 和 ENTRYPOINT 这三个 Dockerfile 指令看上去很类似,很容易混淆. 简单的说: RUN 执行命令并创建新的镜像层,RUN 经常用于安装软件包. CMD 设置容器启动 ...
- JS中如何生成全局变量
JS中如何生成全局变量 一.总结 一句话总结:在函数内部,一般用var声明的为局部变量,没用var声明的一般为全局变量 在函数内没用var声明的一般为全局变量 1.js中的函数中的this指向的是谁? ...
- css趣味案例:画三角形
代码: <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&q ...
- mybatis ----> 各种方式使用MBG
1.maven方式使用 配置好.pom文件 ①src/main/resources下创建 generatorConfig.xml,并配置好(自动生成的配置文件骨架) ②src/main/java 下创 ...
- 机器学习基石(台湾大学 林轩田),Lecture 2: Learning to Answer Yes/No
上一节我们跟大家介绍了一个具体的机器学习的问题,以及它的内容的设定,我们今天要继续下去做什么呢?我们今天要教大家说到底我们怎么样可以有一个机器学习的演算法来解决我们上一次提到的,判断银行要不要给顾客信 ...