深入理解MySQL_3 I/O成本
一、IO成本
1 执行SQL的成本:包括I/O成本和CPU成本
I/O成本:InnoDB和MyISAM存储引擎都是将数据存储在磁盘上。当查询表中的记录时,需要先将数据加载到内存中,然后进行操作。这个从磁盘到内存的数据加载过程损耗的时间就是I/O成本。
CPU成本:读取记录以及检测记录是否满足对应的搜索条件、对结果集进行排序等这些操作所消耗的时间称之为CPU成本。
2、磁盘的结构
(1)盘片、盘面和磁头
硬盘中一般会有多个【盘片】组成,每个盘片包含【两个面】即盘面,每个盘面都对应的有一个【读/写磁头】,一个盘片有两个盘面所以对应两个【读/写磁头】。
(2)磁道和扇区
盘面中一圈圈灰色同心圆为一条条磁道。
从圆心向外画直线,可以将磁道划分为若干个弧段,每个磁道上一个弧段被称之为一个扇区。
扇区是磁盘的最小组成单元,通常是512字节。
(3)柱面
硬盘通常由重叠的一组盘片构成,每个盘面都被划分为数目相等的磁道,并从外缘的“0”开始编号,具有相同编号的磁道形成一个圆柱,称之为磁盘的柱面。
2、磁盘容量计算
存储容量 = 磁头数 × 磁道(柱面)数 × 每道扇区数 × 每扇区字节数
3、磁盘读取响应时间
读写一次磁盘信息所需的时间可分解为:寻道时间、延迟时间、传输时间。为提高磁盘传输效率,软件程序应着重考虑减少寻道时间和延迟时间。
【重点】寻道时间:磁头从开始移动到数据所在磁道所需要的时间,寻道时间越短,I/O操作越快
【重点】旋转延迟:盘片旋转将请求数据从所在扇区移至读写磁头下方所需要的时间,旋转延迟取决于磁盘转速。
传输时间:完成传输所请求的数据所需要的时间。
4、交换单位
【块】是操作系统中最小的逻辑存储单位,他是虚拟出来的一个单位。操作系统与磁盘打交道的最小单位是磁盘块。
存在磁盘块的原因:
(1)读取方便:由于扇区的容量比较小,数目众多,在寻址时比较困难,所以操作系统就将相邻的扇区组合在一起,形成一个块,再对块进行整体的操作。
(2)分离对底层的依赖:操作系统忽略对底层物理存储结构的设计。通过虚拟出来磁盘块的概念,在系统中认为块是最小的单位。
5、扇区、块/簇、page的关系:
扇区: 硬盘的最小读写单元
块/簇: 操作系统针对硬盘的最小读写单元
page: 内存与操作系统之间操作的最小单元
扇区 <= 块/簇 <= page
5、局部性原理与磁盘预读
磁盘往往不是严格的【按需读取】,而是每次都会预读,即使只需要一个字节,磁盘也会从这个位置开始,顺序向后读取一定长度的数据放入内存。这样做的理论依据是计算机科学中著名的局部性原理。
局部性原理:当一个数据被用到时,其附近的数据也通常会马上被使用,程序运行期间所需要的数据通常比较集中。
