手机版

磁盘读写和数据库读写哪个好?磁盘读写与数据库的关系

时间:2021-08-02 来源:互联网 编辑:宝哥软件园 浏览:

类型:磁盘工具大小:572KB语言:中文评分:6.6标签:立即下载假设在程序效率相当于关键进程且不包含缓存的情况下,读写任何类型的数据都不如直接操作文件快。不考虑MSYQL进程,最后“文件”必须在磁盘上读取(相当于记录存储区),所以当然这一切的前提都是只读内容,不涉及排序或搜索操作。

动态网站通常使用数据库来存储信息。如果信息时效性不高,可以增加缓存,减少数据库的频繁读写。

两种方法一般都支持,但是绕过操作系统直接操作磁盘的性能更高,安全性也更高。数据库系统中的磁盘性能一直是一个瓶颈。大型数据库一般基于unix系统,当然也有in win,由于win的不可靠性,所以不常用。在unix下,使用原始设备,即未处理的设备(unix下的磁盘分区属于特殊设备,以文件形式统一管理),由dbms直接管理,不通过操作系统,效率高,可靠性高,因为磁盘、缓存、内存都是自己管理的。大型数据库系统db2、oracal、informix(不太流行),mssql不是大型数据库系统。

1.与数据库查询相比,直接读取文件效率更高,本文不包括连接和断开的时间。2.一次读取的内容越大,直接读取文件的优势越明显(读取文件的时间都略有增加,这与文件存储的连续性和集群大小等有关。).这个结果正好与学者的预期相反,这说明MYSQL在读取较大文件时可能会增加一些操作(两次增加近30%)。如果只是简单的赋值转换,差别应该不大。3.可以推断,在写入文件和插入时,如果不进行测试,数据库的效率只会更差。4.如果不需要使用数据库功能,小型配置文件更适合在独立文件中访问,而无需单独创建数据表或记录。存储图片、音乐等大文件更方便,数据库中只放路径或缩略图等索引信息更合理。5.如果只读取PHP中的文件,file_get_contents比fopen和fclose效率更高,判断这个函数的存在大约需要3秒钟。6.应该从fetch_array转换fetch_row和fetch_object。学者们从来没有读过PHP的源代码,可以看出fetch_array从执行上来说效率更高,这似乎和网上说的相反。

磁盘读写与数据库的关系;

一种磁盘物理结构(1)磁盘:硬盘的盘体由多个磁盘堆叠在一起组成。

硬盘出厂时,硬盘厂商完成低级格式化(物理格式化),用于将空白盘片分割成中心相同、半径不同的磁道,还将磁道分割成若干扇区,每个扇区可存储1282 n次方(N=0.1.2.3)字节的信息。默认情况下,每个扇区的一般情况下,用户不需要执行低级格式化操作。

(2)磁头:每个磁盘的两面都有一个磁头。

(3)主轴:所有磁片由主轴电机驱动旋转。

(4)控制集成电路板:复杂!还有ROM(里面有软件系统)、Cache等等。

如何通过两个磁盘完成单个IO操作(1)寻道当控制器向磁盘发送IO操作命令时,磁盘的执行臂驱动磁头远离着陆区,着陆区位于内环没有数据的区域,并移动到要操作的初始数据块所在的磁道顶部。这个过程叫做寻找,相应消耗的时间叫做寻找。

(2)当找到相应的磁道时,不能立即读取数据。此时,磁头无法开始读取数据,直到磁盘盘片旋转,直到初始数据块所在的扇区正好位于读/写磁头下方。等待盘片旋转到可操作扇区所消耗的时间称为旋转延迟。

(3)数据传输接下来,随着磁盘的旋转,磁头不断读/写相应的数据块,直到完成该IO操作所需的所有数据。这个过程称为数据传输,相应的时间称为传输时间。完成这三个步骤后,单个IO操作就完成了。

根据磁盘单IO操作的过程,可以发现单IO时间=寻道时间旋转延迟传输时间

IOPS公式(每秒输入输出)为:IOPS=1000毫秒/单次输入输出时间

三磁盘IOPS计算不同磁盘的寻道时间、旋转延迟和数据传输时间。

1.寻道时间考虑到读写数据可能在磁盘的任何磁道上,要么在磁盘的最内圆(最短寻道时间),要么在磁盘的最外圆(最长寻道时间),我们在计算中只考虑平均寻道时间。

购买磁盘时,会标记此参数。目前,SATA/SAS磁盘根据不同的转速有不同的寻道时间,但通常在10ms以下:

3.传输时间2。旋转延迟

与寻道一样,当磁头位于磁道上时,它可能刚好在要读写的扇区上方。此时,可以立即读写数据,无需额外延迟。然而,在最坏的情况下,磁头只有在磁盘旋转一整圈后才能读取数据,因此这里也考虑了平均旋转延迟,对于15000rpm的磁盘,平均旋转延迟为(60s/15000)*(1/2)=2ms。

(1)磁盘传输速率磁盘传输速率有两种:内部传输速率和外部传输速率。

内部传输速率是指磁头和硬盘高速缓存之间的数据传输速率,它只是硬盘磁头从磁盘读取数据并将其存储在高速缓存中的速度。

理想的内部传输速率没有寻道,由于单个磁道的存储空间有限,数据总是在同一个磁道上读取并传输到缓存。

实际内部传输速率包括寻道和旋转延迟。目前国产磁盘稳定的内部传输速率一般在30MB/s到45MB/s之间(服务器磁盘应该更高)。

外部传输速率是指硬盘缓存和系统总线之间的数据传输速率,即计算机通过硬盘接口将数据从缓存读取到相应硬盘控制器的速率。

硬盘厂商通常会在硬盘参数中给出一个最大传输速率,比如目前SATA3.0的6Gbit/s,为6 * 1024/8,768 MB/s,通常是指硬盘接口对外的最大传输速率,但在实际使用中达不到这个值。

这里计算的是IOPS,实际的内部传输速率是保守选择的,以40M/s为例。

(2)如果单个IO操作的大小有传输速率,那么在计算单个IO的传输时间之前,需要知道IO块的大小。那么磁盘上单个IO的大小是多少呢?答案是:不确定。

为了提高IO的性能,操作系统引入了文件系统缓存。根据请求数据,系统会先将来自IO的多个请求放入缓存中,然后一次性提交给磁盘,这意味着数据库发送的多个8K数据块的读取操作可能在一个磁盘读取IO中处理。

此外,部分存储系统还提供Cache,在收到操作系统的IO请求后,来自多个操作系统的IO请求会合并到一个操作系统中进行处理。

无论是操作系统级的缓存,还是磁盘控制器级的缓存,提高数据读写效率的目的只有一个。因此,每个单独IO操作的大小是不同的,这主要取决于系统对数据读写效率的判断。这里以SQL Server数据库的数据页大小为例:8K。

(3)传输时间传输时间=io块大小/内部传输速率=8k/40m/s=0.2ms。

可以发现:(3.1)如果IO块大小较大,传输时间会变大,导致IOPS较小;(3.2)机械磁盘的主要读写成本都花在寻址时间上,即寻道时间旋转延迟,即磁盘臂的摆动,以及磁盘的旋转延迟。(3.3)如果粗略计算IOPS,传输时间可以忽略,为1000毫秒/(寻道时间旋转延迟)。

4.IOPS计算示例以15000转/分钟为例:

(1)单IO时间单IO时间=寻道时间旋转延迟传输时间=3ms2 ms0.2ms=5.2ms。

(2)IOPSIOPS=1000毫秒/单个IO时间=1000毫秒/5.2毫秒=192(次)这里计算单个磁盘的随机访问IOPS。

考虑一个极端情况,如果所有磁盘都按顺序访问,可以忽略:寻道时间旋转延迟的长度,IOPS的计算公式为:0.2ms=5000毫秒/传输时间0.2ms=5000毫秒/传输时间=1000毫秒/0.2毫秒=5000(次)

显然,这种极端情况太理想了。毕竟每个磁道的空间是有限的,寻道时间的旋转延迟时间可以减少,但不能完全避免。

四个数据库的磁盘读写1。随机存取和连续存取(1)随机存取是指这个IO给定的扇区地址和最后一个IO给定的扇区地址有很大的不同,所以磁头需要在两次IO操作之间做比较大的移动,才能重新开始读/写数据。

(2)顺序访问相反,如果下一个IO给出的扇区地址与最后一个IO结束时的扇区地址相同或接近,那么磁头就可以快速启动这个IO操作,这样的多次IO操作称为连续访问。

(3)以SQL Server数据库为例,SQL Server统一区域内的对象以盘区(8*8k)为单位进行分配,数据存储非常随机。任何有空间的数据页都会被写到那里。除非通过文件组为每个表预先分配足够大的文件供独立使用,否则无法保证数据的连续性,这通常是随机访问。此外,即使聚集索引表也只是逻辑上连续的,而不是物理上连续的。

因为VLF的存在,日志文件的读写理论上是连续访问,但是如果日志文件设置为自动增长,增量不大,VLF就会很小,所以不是严格意义上的连续访问。

2.顺序输入输出和并发输入输出(1)队列模式下的磁盘控制器可能会一次向磁盘组发出一系列输入输出命令。如果磁盘组一次只能执行一个IO命令,称为顺序IO;

(2)并发IO模式(Burst Mode)当一个磁盘组可以同时执行多个IO命令时,称为并发IO。并发IO只能发生在由多个磁盘组成的磁盘组上,单个磁盘一次只能处理一个IO命令。

(3)以SQL Server数据库为例,有时虽然IOPS(磁盘传输/秒)不太大,但发现数据库有IO等待。为什么呢?通常是因为磁盘请求队列,堆积了太多的IO请求。

请求队列和磁盘繁忙程度由以下性能计数器检查:logical disk/avg . diskqueue length logical disk/current diskqueue length logical disk/% disktime

在这种情况下,可以做的是:(1)简化业务逻辑,减少IO请求数量;(2)同一实例下,不同实例下的多个数据库迁移;(3)将同一数据库的日志和数据文件分离到不同的存储单元;(4)采用HA策略,做到读写操作分离。

3.IOPS和吞吐量(1) IOPS IOPS是每秒的I/O操作数。在计算传输时间时,提到如果IO块大小较大,IOPS将减少,如果以100M为单位读写数据,IOPS将非常小。

(2)吞吐量吞吐量是指每秒可读写的字节数。还假设以100兆为单位读写数据。虽然IOPS小,但每秒读写N*100M的数据,吞吐量不小。

(3)以SQL Server数据库为例,OLTP系统经常读写小块数据,多为随机访问,用IOPS来衡量读写性能;对于数据仓库和日志文件来说,经常要读写大量的数据,而且大部分都是按顺序访问的。吞吐量用于衡量读写性能。

可以通过以下性能计数器查看磁盘的当前IOPS:逻辑磁盘/磁盘传输/秒逻辑磁盘/磁盘读取/秒逻辑磁盘/磁盘写入/秒

磁盘的当前吞吐量由以下性能计数器检查:逻辑磁盘/磁盘字节/秒逻辑磁盘/磁盘读取字节/秒逻辑磁盘/磁盘写入字节/秒

版权声明:磁盘读写和数据库读写哪个好?磁盘读写与数据库的关系是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。

相关文章推荐