关于mysql磁盘IO

ghost_j 发布于 2013/08/13 15:01
阅读 1K+
收藏 0

有几个关于磁盘IO的问题需要大家的帮助,请大家不吝赐教。

在mysql的学习中和查看相关的资料中,经常听到IO瓶颈之类的问题。我想知道的问题有:

1、什么叫IO单元

2、什么叫一次IO

3、IO怎么计算,比如我的一个sql语句需要读取多少个磁盘IO,是查询的数据多IO多,数据少IO就少吗?

加载中
0
张亦俊
张亦俊

虽然我不懂MySQL,但是可以YY一下这几个概念。

IO单元,因为磁盘IO比较慢,OS不会一次就读那么64bit一丁点,而会把一大块读到内存里边。这一大块的体积,应该就是这个IO单元。Windows下这个叫做簇,NTFS一般是4K,最多貌似可以设成64K。

一次IO,顾名思义,把内存里一个IO单元写到磁盘上或者从磁盘读一个IO单元。

IO怎么算,这个就太复杂了,数据库会对SQL生成执行计划,然后根据执行计划执行。执行计划可以作为一个参考,但实际上的执行IO还取决于数据库的存储方法,MySQL本身就有多种存储引擎,像Oracle这种甚至可以直接用磁盘分区,这都会对IO次数产生很大的影响。

张亦俊
张亦俊
回复 @ghost_j : 一次SQL会用多次IO应该没错。至于Oracle block和文件系统的block的东西,我也不甚了解,等其他高人回答吧。
ghost_j
ghost_j
非常感谢,也就是说sql语句一次读或写可能需要执行多次的IO对吗?比如我看到说Oracle的block size 是8KB,如果文件系统的block size是4KB, 那么一次IO是以这oracle或者是文件系统的block size中的一个作为基础的,还是其他的?
0
whaon
whaon

引用来自“张亦俊”的答案

虽然我不懂MySQL,但是可以YY一下这几个概念。

IO单元,因为磁盘IO比较慢,OS不会一次就读那么64bit一丁点,而会把一大块读到内存里边。这一大块的体积,应该就是这个IO单元。Windows下这个叫做簇,NTFS一般是4K,最多貌似可以设成64K。

一次IO,顾名思义,把内存里一个IO单元写到磁盘上或者从磁盘读一个IO单元。

IO怎么算,这个就太复杂了,数据库会对SQL生成执行计划,然后根据执行计划执行。执行计划可以作为一个参考,但实际上的执行IO还取决于数据库的存储方法,MySQL本身就有多种存储引擎,像Oracle这种甚至可以直接用磁盘分区,这都会对IO次数产生很大的影响。

这个...
返回顶部
顶部