windows下如何查看磁盘IO性能
- 格式:docx
- 大小:45.04 KB
- 文档页数:19
检测服务器硬盘的方法服务器硬盘是服务器中非常重要的组成部分之一,它存储着大量的数据,因此定期检测服务器硬盘的健康状况非常重要。
本文将介绍如何检测服务器硬盘的方法。
1. 使用Windows自带的工具检测硬盘健康状况Windows自带的工具可以检测硬盘的健康状况,这个工具叫做Windows自带的磁盘检查工具,这个工具可以检测硬盘的健康状况,同时还可以修复一些硬盘的问题。
方法如下:打开“我的电脑”,然后找到需要检测的硬盘,右键点击硬盘,然后选择“属性”,在属性窗口中选择“工具”,然后点击“检查”按钮,即可使用Windows自带的磁盘检查工具检测硬盘的健康状况。
2. 使用第三方工具检测硬盘健康状况除了Windows自带的磁盘检查工具外,还有很多第三方工具可以检测硬盘的健康状况,其中比较常用的工具有CrystalDiskInfo、HD Tune、SpeedFan等。
这些工具可以提供更为详细的硬盘信息,并且可以检测出更多的问题。
方法如下:以CrystalDiskInfo为例,首先,下载并安装CrystalDiskInfo软件,然后运行软件,即可看到硬盘的详细信息,包括硬盘的温度、健康状况、剩余寿命等。
如果硬盘出现问题,软件会给出相应的警告。
3. 使用RAID控制器检测硬盘健康状况如果服务器采用了RAID技术,那么可以通过RAID控制器来检测硬盘的健康状况。
RAID控制器可以提供更为详细的硬盘信息,并且可以检测出更多的问题。
方法如下:以Intel RAID控制器为例,首先,进入Intel RAID控制器的管理界面,选择需要检测的硬盘,然后点击“检测硬盘”按钮,即可检测硬盘的健康状况。
如果硬盘出现问题,控制器会给出相应的警告。
4. 使用SMART检测硬盘健康状况SMART(Self-Monitoring, Analysis, and Reporting Technology)是一种硬盘自动检测技术,它可以在硬盘出现问题之前预测出硬盘可能出现的问题,并且提供详细的硬盘信息。
怎样在Windows系统中查看电脑的硬件信息在Windows系统中查看电脑的硬件信息在日常使用Windows系统的过程中,了解电脑的硬件信息对于维护电脑以及解决一些问题非常有帮助。
通过查看硬件信息,可以获得关于CPU、内存、存储等硬件设备的详细参数,以及驱动程序的状态等信息。
本文将介绍几种简单快捷的方法,帮助你在Windows系统中查看电脑的硬件信息。
方法一:使用设备管理器设备管理器是Windows系统中一个非常实用的工具,可以帮助我们查看和管理电脑的硬件设备。
下面将分步骤介绍如何使用设备管理器来查看硬件信息。
步骤一:打开设备管理器在Windows系统中,按下Win键 + X键,选择“设备管理器”选项,或者通过在任务栏的搜索框中输入“设备管理器”来打开。
步骤二:查看硬件信息在设备管理器中,可以看到各类硬件设备的列表。
展开每个设备类别,可以查看该类别下的所有设备。
在设备的属性对话框中,可以查看硬件设备的详细信息,包括设备状态、驱动程序版本、供应商信息等。
方法二:使用系统信息工具Windows系统提供了一个系统信息工具,可以显示关于电脑硬件、软件以及系统配置的详细信息。
下面是使用系统信息工具查看硬件信息的步骤。
步骤一:打开系统信息工具使用快捷键Win键 + R键,弹出运行对话框。
在对话框中输入“msinfo32”命令,然后点击“确定”按钮,即可打开系统信息工具。
步骤二:查看硬件信息在系统信息工具中,可以看到左侧的导航栏,包含了多个类别,如系统摘要、硬件资源和组件等。
点击其中的分类,右侧窗格中将显示该分类下的详细信息。
在硬件资源分类下,可以查看CPU、内存、硬盘、显示器、声卡等硬件设备的详细参数。
方法三:使用命令行工具对于熟悉命令行的用户来说,使用命令行工具也是一种快速获取硬件信息的方法。
下面介绍使用命令行工具来查看硬件信息的步骤。
步骤一:打开命令提示符在Windows系统中,按下Win键 + R键,弹出运行对话框。
测试磁盘IO速度的⽅法读取速度可以使⽤命令:hdparm –t 设备名(/dev/sda1)写⼊速度使⽤命令:time dd if=/dev/zero of=/tmp/test.dat bs=1G count=1测试磁盘的读写IO速度有时候我们在做维护的时候,总会遇到类似于IO特别⾼,但不能判定是IO瓶颈还是软件参数设置不当导致热盘的问题.这时候通常希望能知道磁盘的读写速度,来进⾏下⼀步的决策.下⾯是两种测试⽅法:(1)使⽤hdparm命令这是⼀个是⽤来获取ATA/IDE硬盘的参数的命令,是由早期Linux IDE驱动的开发和维护⼈员 Mark Lord开发编写的( hdparm has been written by Mark Lord <>, the primary developer and maintainer of the (E)IDE driver for Linux, with suggestions from many netfolk).该命令应该也是仅⽤于Linux系统,对于UNIX系统,ATA/IDE硬盘⽤的可能⽐较少,⼀般⼤型的系统都是使⽤磁盘阵列的.使⽤⽅法很简单# hdparm -Tt /dev/sda/dev/sda:Timing cached reads: 6676 MB in 2.00 seconds = 3340.18 MB/secTiming buffered disk reads: 218 MB in 3.11 seconds = 70.11 MB/sec可以看到,2秒钟读取了6676MB的缓存,约合3340.18 MB/sec;在3.11秒中读取了218MB磁盘(物理读),读取速度约合70.11 MB/sec(2)使⽤dd命令这不是⼀个专业的测试⼯具,不过如果对于测试结果的要求不是很苛刻的话,平时可以使⽤来对磁盘的读写速度作⼀个简单的评估.另外由于这是⼀个免费软件,基本上×NIX系统上都有安装,对于Oracle裸设备的复制迁移,dd⼯具⼀般都是⾸选.在使⽤前⾸先了解两个特殊设备/dev/null 伪设备,回收站.写该⽂件不会产⽣IO/dev/zero 伪设备,会产⽣空字符流,对它不会产⽣IO测试⽅法:a.测试磁盘的IO写速度# time dd if=/dev/zero of=/test.dbf bs=8k count=300000300000+0 records in300000+0 records out10.59s real 0.43s user 9.40s system# du -sm /test.dbf2347 /test.dbf可以看到,在10.59秒的时间⾥,⽣成2347M的⼀个⽂件,IO写的速度约为221.6MB/sec;当然这个速度可以多测试⼏遍取⼀个平均值,符合概率统计.b.测试磁盘的IO读速度# df -mFilesystem 1M-blocks Used Available Use% Mounted on/dev/mapper/VolGroup00-LogVol0019214 9545 8693 53% //dev/sda1 99 13 82 14% /bootnone 506 0 506 0% /dev/shm# time dd if=/dev/mapper/VolGroup00-LogVol00 of=/dev/null bs=8k2498560+0 records in2498560+0 records out247.99s real 1.92s user 48.64s system上⾯的试验在247.99秒的时间⾥读取了19214MB的⽂件,计算下来平均速度为77.48MB/secc.测试IO同时读和写的速度# time dd if=/dev/sda1 of=test.dbf bs=8k13048+1 records in13048+1 records out3.73s real 0.04s user 2.39s system# du -sm test.dbf103 test.dbf上⾯测试的数据量⽐较⼩,仅作为参考.相⽐两种⽅法:前者是linux上专业的测试IDE/ATA磁盘的⼯具,但是使⽤范围有局限性;(此试验仅仅使⽤了测试磁盘IO的参数,对于其他参数及解释参考man⼿册)后者可以通⽤,但不够专业,也没有考虑到缓存和物理读的区分,测试的数据也是仅作参考,不能算是权威.。
检查磁盘IO方法介绍在计算机系统中,磁盘IO是指计算机与磁盘设备之间的数据输入和输出操作。
通过检查磁盘IO方法,我们可以了解磁盘的性能状况,及时发现问题并进行优化,确保系统的高效运行。
为什么要检查磁盘IO方法?磁盘是计算机系统中的重要组成部分,它存储着大量的数据和操作系统。
良好的磁盘IO性能可以提高系统的响应速度和处理能力,而磁盘IO问题则可能严重影响系统的性能和稳定性。
因此,检查磁盘IO方法是非常重要的。
如何检查磁盘IO方法1. 使用操作系统自带的工具大多数操作系统都提供了一些工具来帮助我们检查磁盘IO方法。
例如,Windows系统中可以使用任务管理器、资源监视器或性能监视器;Linux系统中可以使用iostat、sar或iotop等工具。
这些工具可以实时展示磁盘的读写速度、队列长度、IO请求等信息,使我们能够迅速了解磁盘的性能状况。
2. 使用第三方工具除了操作系统自带的工具,还有许多第三方工具可以帮助我们更全面地检查磁盘IO方法。
例如,Windows系统下的CrystalDiskMark、HD Tune和Linux系统下的sysbench等工具都提供了更详细的磁盘性能测试和分析功能,可以针对不同的磁盘类型进行测试,并生成丰富的性能报告。
3. 执行基准测试基准测试是一种通过运行一系列测试用例来评估系统性能的方法。
在检查磁盘IO方法时,我们可以编写一些基准测试用例,包括顺序读写、随机读写、大文件传输等,通过测试结果来评估磁盘的性能。
这些测试用例可以模拟真实的应用场景,并提供详细的性能指标,帮助我们找出磁盘IO的瓶颈和问题。
检查磁盘IO方法时需要注意的问题1. 磁盘类型不同类型的磁盘(如机械硬盘、固态硬盘等)有着不同的性能特点,对于检查磁盘IO方法时需要注意选择合适的测试工具和测试用例,以便得出准确的结果和评估。
2. 测试环境为了得到准确可靠的结果,我们需要在与实际工作环境相似的测试环境中进行磁盘IO检查。
引用自网络通常应用可以分为两种类型:• IO 相关,IO 相关的应用通常用来处理大量数据,需要大量内存和存储,频繁 IO 操作读写数据,而对 CPU 的要求则较少,大部分时候 CPU 都在等待硬盘,比如,数据库服务器、文件服务器等。
• CPU 相关,CPU 相关的应用需要使用大量 CPU,比如高并发的 web/mail 服务器、图像/视频处理、科学计算等都可被视作 CPU 相关的应用。
windows下如何查看磁盘IO性能通常,我们很容易观察到数据库服务器的内存和CPU压力。
但是对I/O压力没有直观的判断方法。
磁盘有两个重要的参数:Seek time、Rotational latency。
正常的I/O计数为:①1000/(Seek time+Rotational latency)*0.75,在此范围内属正常。
当达到85%的I/O计数以上时则基本认为已经存在I/O瓶劲。
理论情况下,磁盘的随机读计数为125、顺序读计数为225。
对于数据文件而言是随机读写,日志文件是顺序读写。
因此,数据文件建议存放于RAID5上,而日志文件存放于RAID10或RAID1中。
下面假设在有4块硬盘的RAID5中观察到的Physical Disk性能对象的部分值:Avg. Disk Queue Length 12Avg. Disk Sec/Read .035Avg. Disk Sec/Write .045Disk Reads/sec 320Disk Writes/sec 100Avg. Disk Queue Length,12/4=3,每块磁盘的平均队列建议不超过2。
Avg. Disk Sec/Read一般不要超过11~15ms。
Avg. Disk Sec/Write一般建议小于12ms。
从上面的结果,我们看到磁盘本身的I/O能力是满足我们的要求的,原因是因为有大量的请求才导致队列等待,这很可能是因为你的SQL语句导致大量的表扫描所致。
[转载]磁盘IO性能监控(Linux 和 Windows)Linux系统出现了性能问题,一般我们可以通过top、iostat、free、vmstat等命令来查看初步定位问题。
其中iostat 可以给我们提供丰富的IO状态数据。
基本使用$iostat -d -k 1 10参数-d 表示,显示设备(磁盘)使用状态;-k某些使用block 为单位的列强制使用Kilobytes为单位;110表示,数据显示每隔1秒刷新一次,共显示10次。
# iostat -x 1 10Linux2.6.18-92.el5xen02/03/2009avg-cpu: %user%nice %system%iowait %steal%idle0.004.82 39.540.0754.46Device:rrqm/swrqm/sr/sw/srsec/s wsec/s avgrq-sz avgqu-sz await svctm %utilsda0.003.50 0.40 2.5048.0018.480.000.970.970.28sdb0.000.00 0.00 0.000.000.000.000.000.000.000.000.000.00 0.00 0.000.000.000.000.000.000.000.00sdd0.000.00 0.00 0.000.000.000.000.000.000.00sde0.000.10 0.30 0.202.402.409.600.001.601.600.08sdf17.400.50102.00 0.20 12095.205.60118.400.706.812.09 21.36 sdg232.401.90379.70 0.50 76451.2019.20 201.134.9413.782.45 93.16rrqm/s: 每秒进行merge 的读操作数目。
即delta(rmerge)/swrqm/s: 每秒进行merge 的写操作数目。
查看磁盘io状况的命令人们在使用电脑系统时,往往都会面对一些问题。
而磁盘I/O是其中一种问题,它指的是磁盘上每个字节的输入和输出(I/O)状态及磁盘的使用状况。
磁盘I/O的状况很重要,因为它可以指出一个系统是否有性能问题。
运行慢,可能是由于磁盘I/O的状况。
在这种情况下,我们需要查看磁盘IO的状况来分析系统的性能问题,以便及时解决。
为了查看磁盘IO的状况,我们可以使用很多不同的操作系统提供的命令。
比如,在Linux系统中,我们可以使用“iostat”命令来查看磁盘IO的状况。
它可以报告磁盘的分区数量,I/O部分的活动状况,平均磁盘时间,平均转换时间,最大转换时间等数据。
此外,在Unix系统中,我们可以使用“vmstat”命令查看磁盘IO的状况。
它可以报告磁盘IO活动次数,磁盘操作次数,平均转换时间,平均磁盘访问时间等数据。
在Windows系统中,我们可以使用“perfmon”命令查看磁盘IO 的状况。
它可以报告磁盘IO活动百分比,平均磁盘访问时间,读取和写入的活动次数等数据。
还有一些其他的命令可以查看磁盘IO的状况,比如“iotop”,它可以报告磁盘IO的活动,“iostat”,它可以报告磁盘IO的状况,“hdparm”,它可以报告磁盘的性能数据等等。
以上是我们可以用来查看磁盘IO的状况的命令。
每种命令都有不同的特点和功能,我们可以根据自己的需要来选择一种合适的命令进行查看磁盘IO的状况。
值得一提的是,查看磁盘IO状况不仅可以帮助我们分析系统的性能问题,还可以帮助我们实时监控磁盘IO的状况,以便我们可以及时采取措施来解决性能问题和磁盘IO的问题。
总之,查看磁盘IO的状况是非常重要的,其正确的使用可以帮助我们分析性能问题,并实时监控磁盘IO的状况,从而提高系统的性能。
我们可以使用系统提供的命令,比如“iostat”、“vmstat”、“perfmon”等,来查看磁盘IO的状况,从而更好地了解系统性能,并解决性能问题。
如何在Windows系统中查看硬盘使用情况在Windows系统中,查看硬盘使用情况是非常重要的,可以帮助我们管理存储空间、优化系统性能。
本文将介绍如何在Windows系统中准确方便地查看硬盘使用情况。
一、使用资源监视器查看硬盘使用情况资源监视器是Windows系统内置的一款强大的系统性能监视工具,可以用于查看硬盘使用情况。
操作步骤:1. 按下Win + R键,在打开的运行窗口中输入“resmon”,并点击“确定”。
2. 在资源监视器窗口的左侧导航栏中选择“磁盘”选项卡。
3. 可以看到右侧显示了当前系统中所有硬盘的使用情况,包括活动时间、传输速率等等。
二、使用任务管理器查看硬盘使用情况任务管理器是Windows系统中常用的管理工具,可以查看系统的资源使用情况,其中也包括硬盘的使用情况。
操作步骤:1. 右键点击任务栏,选择“任务管理器”打开任务管理器。
2. 在任务管理器窗口中,点击上方的“性能”选项卡。
3. 在左侧导航栏中选择“磁盘”,即可查看当前系统硬盘的使用情况,包括读写速度、活动时间等。
三、使用文件资源管理器查看硬盘使用情况作为Windows系统中最常用的文件管理工具,文件资源管理器也提供了查看硬盘使用情况的功能。
操作步骤:1. 打开“我的电脑”或者“此电脑”。
2. 右键点击你想查看的硬盘分区,选择“属性”。
3. 在弹出的属性窗口中,可以看到该硬盘分区的总容量、已用空间及可用空间等详细信息。
四、使用第三方工具查看硬盘使用情况除了Windows系统自带的工具外,还有一些第三方软件可以帮助我们查看硬盘使用情况,并提供更加丰富的功能。
比如,WinDirStat是一款免费开源的软件,可以以图形化的方式展示硬盘的使用情况,让我们更加直观地了解各个文件夹的占用情况。
总结:通过以上几种方法,我们可以方便地在Windows系统中查看硬盘使用情况。
根据实际需求,可以选择使用资源监视器、任务管理器、文件资源管理器或者第三方工具等进行查看。
如何在Windows中查看硬盘健康状况在Windows中,查看硬盘的健康状况是非常重要的,它可以帮助我们了解硬盘的使用情况、提前发现问题,并采取相应的措施来保护数据的安全。
本文将介绍几种常用的方法,以帮助您全面检查硬盘的健康状况。
一、使用Windows内置工具检查硬盘健康状况Windows自带了一个名为“Windows自带磁盘检测工具”的功能,它可以帮助我们快速检测硬盘的健康状况。
下面是具体操作步骤:1. 打开“此电脑”或“我的电脑”。
2. 右键点击要检测的硬盘(一般为C盘),选择“属性”。
3. 在“工具”选项卡中,找到“错误检查”部分,点击“检查”。
4. 勾选“自动修复文件系统错误”和“扫描和修复坏扇区”,然后点击“开始”。
5. 等待系统完成磁盘检测,如果有硬盘问题,系统将会提出相应的解决方案。
二、使用第三方工具检查硬盘健康状况除了Windows自带的工具之外,还有一些第三方工具可以更全面地检查硬盘的健康状况。
下面介绍两款常用的工具:1. CrystalDiskInfoCrystalDiskInfo是一款流行的免费硬盘健康监测工具,它可以实时监测硬盘的状况,并提供详细的健康报告。
操作步骤如下:(1) 下载并安装CrystalDiskInfo软件。
(2) 运行CrystalDiskInfo,它会列出所有连接到计算机的硬盘。
(3) 查看每个硬盘的状态,如果出现任何异常,将会被标记为警告或危险。
2. HD TuneHD Tune是另一款流行的第三方硬盘健康检测工具,它提供了许多有用的功能,如硬盘速度测试和错误扫描。
以下是使用HD Tune检查硬盘健康状况的步骤:(1) 下载并安装HD Tune软件。
(2) 运行HD Tune,选择要检查的硬盘。
(3) 点击“Health”选项卡,可以看到硬盘的健康状态和其他详细信息。
三、提前预防硬盘问题除了定期检查硬盘的健康状况,还有一些预防措施可以帮助我们降低硬盘出现问题的概率,保护数据的安全。
检查磁盘io方法检查磁盘IO方法磁盘IO是指磁盘与计算机之间的数据传输过程,通常包括读取和写入磁盘。
为了确保系统的正常运行,我们需要定期检查磁盘IO是否正常。
下面是一些方法来检查磁盘IO。
1. 使用Windows自带的性能监视器Windows自带了一个性能监视器工具,可以用来监测系统的各项性能指标,包括CPU、内存、网络和磁盘IO等。
使用该工具可以很方便地查看当前系统的磁盘IO情况。
步骤如下:(1)打开性能监视器:按下Win+R键,在弹出的运行窗口中输入“perfmon”并回车即可打开性能监视器。
(2)选择“性能监视器”:在左侧导航栏中选择“性能监视器”,然后在右侧窗口中点击“添加计数器”。
(3)选择计数器:在弹出的对话框中选择“物理磁盘”类别,然后选中以下三个计数器:- 瞬时数据读取速率- 瞬时数据写入速率- 平均响应时间点击“添加”按钮后即可将它们添加到列表中。
(4)开始监测:点击“应用”按钮即可开始监测磁盘IO情况。
在监测过程中,可以通过查看图表来判断磁盘IO是否正常。
2. 使用命令行工具除了性能监视器外,我们还可以使用命令行工具来检查磁盘IO。
Windows系统自带了一个名为“Perfmon”的命令行工具,可以用来监测系统的各项性能指标。
步骤如下:(1)打开命令提示符:按下Win+R键,在弹出的运行窗口中输入“cmd”并回车即可打开命令提示符窗口。
(2)输入命令:在命令提示符窗口中输入以下命令:perfmon /res然后按回车键即可打开性能监视器。
(3)选择计数器:在性能监视器中选择“物理磁盘”类别,并选中以下三个计数器:- 瞬时数据读取速率- 瞬时数据写入速率- 平均响应时间然后点击“添加”按钮即可将它们添加到列表中。
(4)开始监测:点击“应用”按钮即可开始监测磁盘IO情况。
在监测过程中,可以通过查看图表来判断磁盘IO是否正常。
总结以上就是检查磁盘IO的两种方法,大家可以根据自己的需要选择其中一种方法来检查磁盘IO。
windows下如何查看磁盘IO性能通常,我们很容易观察到数据库服务器的内存和CPU压力。
但是对I/O压力没有直观的判断方法。
磁盘有两个重要的参数:Seek time、Rotational latency。
正常的I/O计数为:①1000/(Seek time+Rotational latency)*0.75,在此范围内属正常。
当达到85%的I/O计数以上时则基本认为已经存在I/O瓶颈。
理论情况下,磁盘的随机读计数为125、顺序读计数为225。
对于数据文件而言是随机读写,日志文件是顺序读写。
因此,数据文件建议存放于RAID5上,而日志文件存放于RAID10或RAID1中。
下面假设在有4块硬盘的RAID5中观察到的Physical Disk性能对象的部分值:Avg. DiskQueue Length 12 队列长度Avg. DiskSec/Read .035 读数据所用时间msAvg. DiskSec/Write .045 写数据所用时间msDiskReads/sec 320 每秒读数据量DiskWrites/sec 100 每秒写数据量Avg. DiskQueue Length,12/4=3,每块磁盘的平均队列建议不超过2。
Avg. DiskSec/Read一般不要超过11~15ms。
Avg. DiskSec/Write一般建议小于12ms。
从上面的结果,我们看到磁盘本身的I/O能力是满足我们的要求的,原因是因为有大量的请求才导致队列等待,这很可能是因为你的SQL语句导致大量的表扫描所致。
在进行优化后,如果还是不能达到要求,下面的公式可以帮助你计算使用几块硬盘可以满足这样的并发要求:Raid 0 -- I/Os per disk = (reads +writes) / number of disksRaid 1 -- I/Os per disk = [reads +(2 * writes)] / 2Raid 5 -- I/Os per disk = [reads +(4 * writes)] / number of disksRaid 10 -- I/Os per disk = [reads +(2 * writes)] / number of disks我们得到的结果是:(320+400)/4=180,这时你可以根据公式①来得到磁盘的正常I/O值。
假设现在正常I/O计数为125,为了达到这个结果:720/125=5.76。
就是说要用6块磁盘才能达到这样的要求。
但是上面的Disk Reads/sec和Disk Writes/sec是个很难正确估算的值。
因此只能在系统比较忙时,大概估算一个平均值,作为计算公式的依据。
另一个是你很难从客户那里得到Seek time、Rotational latency参数的值,这也只能用理论值125进行计算。
前言作为一个数据库管理员,关注系统的性能是日常最重要的工作之一,而在所关注的各方面的性能只能IO性能却是最令人头痛的一块,面对着各种生涩的参数和令人眼花缭乱的新奇的术语,再加上存储厂商的忽悠,总是让我们有种云里雾里的感觉。
本系列文章试图从基本概念开始对磁盘存储相关的各种概念进行综合归纳,让大家能够对IO性能相关的基本概念,IO性能的监控和调整有个比较全面的了解。
在这一部分里我们先舍弃各种结构复杂的存储系统,直接研究一个单独的磁盘的性能问题,藉此了解各个衡量IO系统系能的各个指标以及之间的关系。
几个基本的概念在研究磁盘性能之前我们必须先了解磁盘的结构,以及工作原理。
不过在这里就不再重复说明了,关系硬盘结构和工作原理的信息可以参考维基百科上面的相关词条——Hard disk drive(英文)和硬盘驱动器(中文)。
读写IO(Read/Write IO)操作磁盘是用来给我们存取数据用的,因此当说到IO操作的时候,就会存在两种相对应的操作,存数据时候对应的是写IO操作,取数据的时候对应的是读IO操作。
单个IO操作当控制磁盘的控制器接到操作系统的读IO操作指令的时候,控制器就会给磁盘发出一个读数据的指令,并同时将要读取的数据块的地址传递给磁盘,然后磁盘会将读取到的数据传给控制器,并由控制器返回给操作系统,完成一个写IO的操作;同样的,一个写IO的操作也类似,控制器接到写的IO操作的指令和要写入的数据,并将其传递给磁盘,磁盘在数据写入完成之后将操作结果传递回控制器,再由控制器返回给操作系统,完成一个写IO的操作。
单个IO操作指的就是完成一个写IO或者是读IO的操作。
随机访问(Random Access)与连续访问(Sequential Access)随机访问指的是本次IO所给出的扇区地址和上次IO给出扇区地址相差比较大,这样的话磁头在两次IO操作之间需要作比较大的移动动作才能重新开始读/写数据。
相反的,如果当次IO给出的扇区地址与上次IO结束的扇区地址一致或者是接近的话,那磁头就能很快的开始这次IO操作,这样的多个IO操作称为连续访问。
因此尽管相邻的两次IO操作在同一时刻发出,但如果它们的请求的扇区地址相差很大的话也只能称为随机访问,而非连续访问。
顺序IO模式(Queue Mode)/并发IO模式(BurstMode)磁盘控制器可能会一次对磁盘组发出一连串的IO命令,如果磁盘组一次只能执行一个IO命令时称为顺序IO;当磁盘组能同时执行多个IO命令时,称为并发IO。
并发IO只能发生在由多个磁盘组成的磁盘组上,单块磁盘只能一次处理一个IO命令。
单个IO的大小(IO ChunkSize)熟悉数据库的人都会有这么一个概念,那就是数据库存储有个基本的块大小(Block Size),不管是SQL Server还是Oracle,默认的块大小都是8KB,就是数据库每次读写都是以8k 为单位的。
那么对于数据库应用发出的固定8k大小的单次读写到了写磁盘这个层面会是怎么样的呢,就是对于读写磁盘来说单个IO操作操作数据的大小是多少呢,是不是也是一个固定的值?答案是不确定。
首先操作系统为了提高 IO的性能而引入了文件系统缓存(File System Cache),系统会根据请求数据的情况将多个来自IO的请求先放在缓存里面,然后再一次性的提交给磁盘,也就是说对于数据库发出的多个8K数据块的读操作有可能放在一个磁盘读IO里就处理了。
还有对于有些存储系统也是提供了缓存(Cache)的,接收到操作系统的IO请求之后也是会将多个操作系统的 IO请求合并成一个来处理。
不管是操作系统层面的缓存还是磁盘控制器层面的缓存,目的都只有一个,提高数据读写的效率。
因此每次单独的IO操作大小都是不一样的,它主要取决于系统对于数据读写效率的判断。
当一次IO操作大小比较小的时候我们成为小的IO操作,比如说1K,4K,8K这样的;当一次IO操作的数据量比较的的时候称为大IO操作,比如说32K,64K甚至更大。
在我们说到块大小(Block Size)的时候通常我们会接触到多个类似的概念,像我们上面提到的那个在数据库里面的数据最小的管理单位,Oralce称之为块(Block),大小一般为8K,SQL Server称之为页(Page),一般大小也为8k。
在文件系统里面我们也能碰到一个文件系统的块,在现在很多的Linux系统中都是4K(通过 /usr/bin/time -v可以看到),它的作用其实跟数据库里面的块/页是一样的,都是为了方便数据的管理。
但是说到单次IO的大小,跟这些块的大小都是没有直接关系的,在英文里单次IO大小通常被称为是IO Chunk Size,不会说成是IO Block Size的。
IOPS(IO per Second)IOPS,IO系统每秒所执行IO操作的次数,是一个重要的用来衡量系统IO能力的一个参数。
对于单个磁盘组成的IO系统来说,计算它的IOPS不是一件很难的事情,只要我们知道了系统完成一次IO所需要的时间的话我们就能推算出系统IOPS来。
现在我们就来推算一下磁盘的IOPS,假设磁盘的转速(Rotational Speed)为15K RPM,平均寻道时间为5ms,最大传输速率为40MB/s(这里将读写速度视为一样,实际会差别比较大)。
对于磁盘来说一个完整的IO操作是这样进行的:当控制器对磁盘发出一个IO操作命令的时候,磁盘的驱动臂(ActuatorArm)带读写磁头(Head)离开着陆区(LandingZone,位于内圈没有数据的区域),移动到要操作的初始数据块所在的磁道(Track)的正上方,这个过程被称为寻址(Seeking),对应消耗的时间被称为寻址时间(SeekTime);但是找到对应磁道还不能马上读取数据,这时候磁头要等到磁盘盘片(Platter)旋转到初始数据块所在的扇区(Sector)落在读写磁头正上方的之后才能开始读取数据,在这个等待盘片旋转到可操作扇区的过程中消耗的时间称为旋转延时(RotationalDelay);接下来就随着盘片的旋转,磁头不断的读/写相应的数据块,直到完成这次IO所需要操作的全部数据,这个过程称为数据传送(DataTransfer),对应的时间称为传送时间(TransferTime)。
完成这三个步骤之后一次IO操作也就完成了。
在我们看硬盘厂商的宣传单的时候我们经常能看到3个参数,分别是平均寻址时间、盘片旋转速度以及最大传送速度,这三个参数就可以提供给我们计算上述三个步骤的时间。
第一个寻址时间,考虑到被读写的数据可能在磁盘的任意一个磁道,既有可能在磁盘的最内圈(寻址时间最短),也可能在磁盘的最外圈(寻址时间最长),所以在计算中我们只考虑平均寻址时间,也就是磁盘参数中标明的那个平均寻址时间,这里就采用当前最多的10krmp 硬盘的5ms。
第二个旋转延时,和寻址一样,当磁头定位到磁道之后有可能正好在要读写扇区之上,这时候是不需要额外额延时就可以立刻读写到数据,但是最坏的情况确实要磁盘旋转整整一圈之后磁头才能读取到数据,所以这里我们也考虑的是平均旋转延时,对于10krpm的磁盘就是(60s/15k)*(1/2)= 2ms。
第三个传送时间,磁盘参数提供我们的最大的传输速度,当然要达到这种速度是很有难度的,但是这个速度却是磁盘纯读写磁盘的速度,因此只要给定了单次IO的大小,我们就知道磁盘需要花费多少时间在数据传送上,这个时间就是IOChunk Size / Max Transfer Rate。
现在我们就可以得出这样的计算单次IO时间的公式:IO Time = Seek Time + 60sec/Rotational Speed/2 + IO Chunk Size/Transfer Rate于是我们可以这样计算出IOPSIOPS = 1/IO Time = 1/(Seek Time + 60sec/Rotational Speed/2 + IOChunk Size/Transfer Rate)对于给定不同的IO大小我们可以得出下面的一系列的数据4K(1/7.1ms = 140IOPS)5ms + (60sec/15000RPM/2) + 4K/40MB = 5 + 2 + 0.1 = 7.18k(1/7.2ms = 139IOPS)5ms + (60sec/15000RPM/2) + 8K/40MB = 5 + 2 + 0.2 = 7.216K(1/7.4ms = 135IOPS)5ms + (60sec/15000RPM/2) + 16K/40MB = 5 + 2 + 0.4 = 7.432K(1/7.8ms = 128IOPS)5ms + (60sec/15000RPM/2) + 32K/40MB = 5 + 2 + 0.8 = 7.864K(1/8.6ms = 116IOPS)5ms + (60sec/15000RPM/2) + 64K/40MB = 5 + 2 + 1.6 = 8.6从上面的数据可以看出,当单次IO越小的时候,单次IO所耗费的时间也越少,相应的IOPS 也就越大。