加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

从顺序随机I O原理来议论MYSQL MRR NLJ BNL BKA

发布时间:2022-03-21 12:23:18 所属栏目:编程 来源:互联网
导读:本文只讨论innodb存储引擎,并且有部分观点为作者观点,如果有误请指出。 一、机械磁盘原理 机械盘由动臂,盘片,读写磁头,主轴组成,磁头是固定不能动的,要读取相应的扇区只能通过盘片的 旋转。 每一个盘片为双面,每一个面上分布有同心圆的磁道,磁道又
      本文只讨论innodb存储引擎,并且有部分观点为作者观点,如果有误请指出。
 
一、机械磁盘原理
    机械盘由动臂,盘片,读写磁头,主轴组成,磁头是固定不能动的,要读取相应的扇区只能通过盘片的
    旋转。
    每一个盘片为双面,每一个面上分布有同心圆的磁道,磁道又分为扇区一般为512 BYTES,现代的磁盘
    一般外边缘磁道的扇区多,内磁道的扇区少,那么一般读写外边缘磁道的速度更快,因为转速为定值。
    同时各个不同盘片上半径下同的磁道组成了一个柱面。
    下图是一个典型的磁盘组织(摘取数据结构(C语言版))
    从顺序随机I/O原理来讨论MYSQL MRR NLJ BNL BKA
 
二、随机I/O和顺序I/O模拟
    模拟使用C语言调用LINUX API完成,主要方式如下:
    读取一个大文件程序中限制为900M,而程序顺序和随机读取20000个4096大小的数据,并且CPY到其他文件中,
    cpy的文件为81920000字节
    为了将写操作的影响降低,而将读操作的影响放大,分别使用
    O_CREAT | O_WRONLY |O_EXCL 打开写文件,启用OS BUFFER,write操作写到OS kernel buffer则结束,同时不能开启
                               O_SYNC,开始O_SYNC每一次wirte会调用fsync(),将写的影响将会放大。
 
    当然这个程序有一点补足,我应该使用排序算法将随机数组中的数据排序后在进行读取,而不是取一个连续的数组。
    这样更能说明问题,但这也不重要因为随机读已经慢得离谱了。下面是我程序跑出的结果。
 
./a.out p10404530_112030_Linux-x86-64_1of7.zip
fisrt sca array: 134709
fisrt sca array: 198155
fisrt sca array: 25305
fisrt sca array: 46515
fisrt sca array: 91550
fisrt sca array: 137262
fisrt sca array: 46134
fisrt sca array: 10208
fisrt sca array: 142115
......    
sequential cpy begin Time: Fri Dec  2 01:36:55 2016
begin cpy use sequential read buffer is 4k:
per 25 % ,Time:Fri Dec  2 01:36:56 2016
per 50 % ,Time:Fri Dec  2 01:36:57 2016
per 75 % ,Time:Fri Dec  2 01:36:57 2016
per 100 % ,Time:Fri Dec  2 01:36:58 2016
 
scattered cpy begin Time: Fri Dec  2 01:36:58 2016
begin cpy use scattered read read buffer is 4k:
per 25 % ,Time:Fri Dec  2 01:37:51 2016
per 50 % ,Time:Fri Dec  2 01:38:40 2016
per 75 % ,Time:Fri Dec  2 01:39:29 2016
per 100 % ,Time:Fri Dec  2 01:40:20 2016
 
---随机
Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.00  107.14    0.00   428.57     0.00     8.00     1.01    9.49   9.42 100.92
Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.00  104.17    1.04   416.67     0.52     7.93     1.04    9.79   9.81 103.23
Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.00  104.12    2.06   465.98    32.99     9.40     1.17   11.02   9.68 102.78
这里明显看出了问题,程序放到最后给出。

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读