SQL Server在以下情况需要和硬盘进行交互:

1.对于内存当中没有缓存的数据,第一次访问时需要将数据所在的页面从数据文件中读取到内存里。

读取时以页面为最小单位。出于性能考虑,读取的数据可能不仅仅包含所请求的内存页,同时还包含了预读的内存页。读取的数量与用户需要需要访问和数据页面数量和buffer pool里面现有缓存的数量有关系。

2.在任何Insert\Update\Delete提交之前,SQL server需要保证日志记录能够写入到日志文件。每次写的数量和数据的修改量有关。

3.当SQL Server做检查点(Checkpoint)的时候,需要将内存缓冲区中已经发生过修改的数据页面同步到硬盘的数据文件里。这时候主要发生写的操作,写的数量与上次checkpoint以来发生的数据修改量有关。

4.当SQL Server缓冲区(Buffer pool)空间不足的时候,会触发lazy writer,从而将内存里的一些很久没有使用过的数据页面以及执行计划清空。若这些页面上发生的修改未由checkpoint写回硬盘,lazy writer 会将其写回。这时候会发生一些写的操作。写的数量和Lazy writer需要清空的数据页面数量直接相关。

Checkpoint和lazy writer的区别:

两者都回写数据,checkpoint是为了保证数据库重新启动的时候能在一定的时间内完成恢复,不论是否有内存压力,都会被触发。而Lazy writer则是为了缓解buffer pool的压力才被触发。

5.对于一些特殊的操作,DBCC CHECKDB、Reindex、Update statistics、数据库备份等,通常也会带来比较大的硬盘读写。

SQL Server主要的硬盘读写行为:

操作类型  数据文件或日志文件 读或写
读入新数据页 数据文件   读              
Insert\Update\Delete操作的日志记录  日志文件  
Checkpoint 数据文件
Lazy writer 数据文件
CheckDB\Reindex\Update statistics\backup                   数据\日志 文件                       读写    

对于IO操作的分析:

1.对于select的操作,理想情况下,只要数据存在内存,就不应该有任何的硬盘读写。

2.SQL Server发生读的数量,和内存是否有压力直接相关。当内存没有压力时,读的数量会想相对较少。而SQL发生的写的数量,和用户已经完成的数据修改量直接相关。如果一个数据库大部分操作都是查询,SQL发生的写操作会非常小。

3.影响SQL Server I/O操作行为的因素:

(1) SQL Server的recovery interval(sp_configure):通常保留默认设置

interval时间过长,每次checkpoint产生的硬盘写的数量会比较多,这样可能会影响到SQL Server的性能。

Interval时间较短,checkpoint频繁,这样每次产生的写操作较少,对硬盘的冲击相对比较小。

(2) 数据/日志文件的自动增长和自动收缩:会对文件的读写速度产生严重影响,所以对于生产数据库,避免自动收缩、增长的发生

(3) 数据文件里页面碎片程度

SQL Server以页面为单位操作数据。对于相同数据量,页面排的越紧凑,消耗的页面数目也就越少,同时SQL Server需要读入和写出的页面数目也就越少。如果页面碎片过多,SQL Server需要读写的页面也就更多,从而造成额外的硬盘读写量。

(4) 表格上的索引结构

通常存储同样多的数据,有聚集索引的表格明显会管理的好些。这里的差别会影响SQL Server需要做的读写数目。

(5) 数据压缩

SQL 2008以后只读文件组可以使用NTFS的压缩技术,以节省磁盘空间的消耗,读取压缩后的数据,在一定程度上可以降低I/O工作量,但是windows需要花额外的CPU和内存资源来将数据解压缩,然后返回给SQL Server。对于这个技术,不建议用在OLTP的系统上。对比低廉的磁盘价格,消耗CPU或内存,可能有点得不偿失。

(6) 数据文件和日志文件放在同一个盘:

通常数据文件读的操作较大,而对于日志文件,由于写的操作较多,建议放在写入速度比较快的磁盘上。例如一个Raid 10的分区,放在Raid 5上,IO问题就会比较明显。

(7) 一个数据文件组是否有多个文件,并且放在不同磁盘上。

转载于:https://www.cnblogs.com/roseHLF/p/9304837.html

SQL I/O操作学习笔记相关推荐

  1. 接口幂等性操作学习笔记

    接口幂等性操作学习笔记 1. 幂等性 2. 什么情况需要幂等 2.1 SQL 天然幂等的情况 2.2 需要幂等操作的情况 3. 解决方案 3.1 token机制 3.2 各种锁机制 3.3 各种唯一约 ...

  2. 多项式相关操作学习笔记

    多项式相关操作学习笔记 标签: 多项式 说在前边 记录一下相关的多项式操作,顺便存个模板.(多点求值之后的部分,有点写不动了...留坑留坑 多项式 定义 给定一个环\(R\)(\(R\)通常是交换环, ...

  3. sql count用法_SQL学习笔记3:count(*)函数

    1.count(*)函数用法 COUNT(*) 函数返回表中的记录数,具体来说,返回值是一个数字. 语法: 返回表中所有记录的数量:SELECT COUNT(*) FROM table_name 返回 ...

  4. 用ajax做级联操作,学习笔记之MVC级联及Ajax操作

    由于刚转型到MVC,MVC的架构模式很多不是很清楚,比如今天就想做个级联的操作,因为之前的ASP.NET的方式是通过:控件-->添加事件-->后台编写级联事件进行触发,但是这个MVC就不同 ...

  5. (pytorch-深度学习系列)模型参数的初始化与访问操作-学习笔记

    模型参数的初始化与访问操作 学习 如何初始化以及访问模型参数,以及如何在多层之间共享模型参数 首先定义一个含有单个隐藏层的多层感知机,使用默认方式初始化该模型的参数,并且进行一次前向计算: impor ...

  6. golang 执行sql语句_Go语言学习笔记(Golang操作MySQL数据库)

    GO连接MySQL 通过GO页面作为客户端访问数据库 1.因为GO语言没有提供任何官方数据库驱动,所以需要安装第三方函数库. 2.由于在github上安装,所以需要安装git软件,安装过程一直点击下一 ...

  7. SQL查询的艺术学习笔记--数据插入操作

    use seldata --insert 使用 --insert 基本语法 /* insert into table_anem [column1,colunm2,...columnN] values  ...

  8. mysql 拼接sql批量执行_Mysql 学习笔记之 SQL 执行过程

    写在开始 本系列源自极客时间 MySQL 专栏,整理而成 在执行下面这个查询语句时的执行的流程是怎么样的? mysql 看过相关资料的同学都可能知道执行流程大概是这样的: 其执行过程为:连接.查询缓存 ...

  9. MySQL,Oracle系统学习,以及SQL语言-----数据库篇学习笔记

    Handouts MySQL和Oracle系统学习 一. 开篇立意(~~~~必看,有说明~~~~) 二. Oracle 篇 数据库存在之意义 基础概念(必须看,后面不会说明!!!) Oracle管理系 ...

最新文章

  1. 解决打开WORD错误报告问题
  2. java flex xml_FLEX与JAVA的交互问题 -DOM4J-xml
  3. 魅族MX4的线控电路图
  4. log4j2 mysql_spring boot使用log4j2将日志写入mysql数据库
  5. html5双波浪线怎么添加,在WPS中如何给段落添加双波浪线边框
  6. 通过kubeadm的方式以及二进制包的方式安装k8s的对比总结---K8S_Google工作笔记0016
  7. hdu2089 不要62
  8. Java爬虫框架Jsoup学习记录
  9. 编程基本功:工作中,高低境界如何迁就?
  10. js基础-21-事件委托
  11. 数字图像处理与分析---指纹图像增强(Python)
  12. 如何给计算机安装驱动程序,电脑系统怎么安装驱动程序
  13. 批处理 %~dp0是什么意思
  14. oracle的PRIPID字段,oracle常用库表和常用导数逻辑.doc
  15. 【STM32】关于DMA控制器的介绍和使用
  16. HTML打开Excel文件
  17. QLU—新生训练赛002补题
  18. 网课查题极速响应系统-公众号查题
  19. linux机械硬盘提速,这几招提升机械硬盘速度的技巧连老师傅都不一定知道
  20. iTerm2 + Oh My Zsh,打造专属你的终端神器

热门文章

  1. hadoop 配置文件简析
  2. xhost: unable to open display linux下安装oracle
  3. [链接]开方检验原理
  4. WebAssembly 系列(五)为什么 WebAssembly 更快? 1
  5. first-child和first-of-type的区别
  6. linux 释放cache 内存
  7. java集合类详细概述
  8. PHP各种魔术方法测试
  9. Dancing Naked in the Mind Field
  10. Oracle左右链接