我在linux下在执行查询语句的同时,用iostat -x 1命令实时查看系统io的状况。
整个linux系统并没有其他操作,在没执行查询语句的时候,一直没有io操作。第一次执行语句的时候,
iostat的结果显示为有970.00个读操作,同时也感受到了查询过程的停顿;
但此后再执行,io读操作均为0,很快就返回结果。我的查询语句用了sql_no_cache,所以,肯定不是从内存中读取的!这样的差异应该是什么导致的呢?
整个linux系统并没有其他操作,在没执行查询语句的时候,一直没有io操作。第一次执行语句的时候,
iostat的结果显示为有970.00个读操作,同时也感受到了查询过程的停顿;
但此后再执行,io读操作均为0,很快就返回结果。我的查询语句用了sql_no_cache,所以,肯定不是从内存中读取的!这样的差异应该是什么导致的呢?
第一次从表读取物理IO
第二次从内存读取逻辑IO
好象只是不缓存在query_cache里面吧
估计是对SQL语句进行优化,从自己的缓存中读取, 虽然你设置了no_cache
所说物理io和逻辑io是操作系统的概念还是mysql的概念?
也就是说
第一次从表读取物理IO,第二次从内存读取逻辑IO这样的操作是操作系统控制的还是mysql控制的?
据我所知是这样的,我确实以为一般情况下如果不从query_cache读,一定从硬盘读,而从硬盘读数据应该是没有差别的!
能否禁止mysql从逻辑io中读取?全部让他从物理io中读?
不管CACHE是否被禁用,
你是担心修改数据后,结果没有变化?
这个要求主要是测试用,真实的系统中,同一条语句查询的速度差异很大,
我在slow-log中找到的语句单列出来在一个单纯的环境下执行,速度上也存在很大的差异!
我想看看到底怎么回事!
1。 CPU CACHE, 从内存到CPU内部CACHE。
2。 磁盘管理CACHE,操作系统会把磁盘上的一个块读入内存,如果下一个访问需要用到的磁盘扇区已经在CACHE中,则操作系统直接访问内存,而不是去访问磁盘。 (这也是为什么我们不能直接关电源,如果这个磁盘扇上的数据有了更新,则更新首先是在内存中,而操作系统的调度进程会把内存中的更新按照事先确定的机制写回磁盘)
[/Quote]我重启了mysqld后,没区别,都很快!但我重启了操作系统后,再执行,确实发生很慢的情况了!非常地慢!
以下是在重启操作系统后,执行那条语句期间的iostat统计:
可以看到,存在很多的读操作,cpu分配给io的操作也接近100%,达到了饱和!
这条语句也运行了18秒之久!
iostat -x 1 #每秒钟打印一次统计报告
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda3 0.00 0.00 195.00 0.00 1968.00 0.00 10.09 1.17 5.98 4.76 92.80avg-cpu: %user %nice %system %iowait %steal %idle
0.25 0.00 1.49 23.38 0.00 74.88Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda3 0.00 0.00 858.42 0.00 7912.87 0.00 9.22 0.97 1.13 1.13 97.23avg-cpu: %user %nice %system %iowait %steal %idle
0.00 0.00 1.50 23.31 0.00 75.19Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda3 1.00 0.00 1017.00 0.00 9848.00 0.00 9.68 0.99 0.98 0.96 97.80avg-cpu: %user %nice %system %iowait %steal %idle
0.00 0.00 2.00 22.94 0.00 75.06Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda3 0.00 0.00 952.00 0.00 10144.00 0.00 10.66 1.00 1.05 1.04 98.60avg-cpu: %user %nice %system %iowait %steal %idle
0.25 0.00 1.75 23.19 0.00 74.81Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda3 3.00 0.00 850.00 0.00 9368.00 0.00 11.02 0.99 1.16 1.15 98.00avg-cpu: %user %nice %system %iowait %steal %idle
0.25 0.00 1.74 23.13 0.00 74.88Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda3 0.00 0.00 889.00 0.00 8784.00 0.00 9.88 0.99 1.12 1.11 98.50avg-cpu: %user %nice %system %iowait %steal %idle
0.00 0.00 1.75 23.25 0.00 75.00Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda3 0.00 0.00 930.00 0.00 9176.00 0.00 9.87 1.00 1.08 1.06 98.80avg-cpu: %user %nice %system %iowait %steal %idle
0.25 0.00 1.75 22.94 0.00 75.06Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda3 0.00 0.00 988.12 0.00 9639.60 0.00 9.76 0.98 0.99 0.99 97.72avg-cpu: %user %nice %system %iowait %steal %idle
0.00 0.00 1.75 23.19 0.00 75.06Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda3 0.00 0.00 954.00 0.00 9424.00 0.00 9.88 1.00 1.05 1.04 99.00avg-cpu: %user %nice %system %iowait %steal %idle
0.25 0.00 1.74 23.13 0.00 74.88Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda3 0.00 0.00 842.00 0.00 7840.00 0.00 9.31 0.99 1.19 1.18 99.10avg-cpu: %user %nice %system %iowait %steal %idle
0.00 0.00 1.50 23.31 0.00 75.19Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda3 0.00 0.00 783.00 0.00 7576.00 0.00 9.68 0.99 1.26 1.26 98.40avg-cpu: %user %nice %system %iowait %steal %idle
0.25 0.00 1.50 23.19 0.00 75.06Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda3 0.00 0.00 901.98 0.00 8625.74 0.00 9.56 0.97 1.08 1.07 96.83avg-cpu: %user %nice %system %iowait %steal %idle
0.25 0.00 1.50 23.44 0.00 74.81Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda3 0.00 0.00 801.00 0.00 8008.00 0.00 10.00 1.00 1.24 1.24 99.30avg-cpu: %user %nice %system %iowait %steal %idle
0.25 0.00 1.25 23.44 0.00 75.06Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda3 0.00 0.00 795.00 0.00 7384.00 0.00 9.29 1.00 1.25 1.25 99.20avg-cpu: %user %nice %system %iowait %steal %idle
0.00 0.00 1.75 23.25 0.00 75.00Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda3 0.00 0.00 924.00 0.00 8928.00 0.00 9.66 0.99 1.07 1.07 99.00avg-cpu: %user %nice %system %iowait %steal %idle
0.25 0.00 1.49 23.38 0.00 74.88Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda3 0.00 0.00 811.00 0.00 7456.00 0.00 9.19 1.00 1.23 1.23 99.50avg-cpu: %user %nice %system %iowait %steal %idle
0.50 0.00 1.00 12.75 0.00 85.75Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda3 0.00 0.00 540.00 0.00 5024.00 0.00 9.30 0.55 1.02 1.01 54.80
mysql> show profile cpu, block io for query 1;
+--------------------+-----------+----------+------------+--------------+---------------+
| Status | Duration | CPU_user | CPU_system | Block_ops_in | Block_ops_out |
+--------------------+-----------+----------+------------+--------------+---------------+
| starting | 0.000132 | 0.001000 | 0.000000 | 0 | 0 |
| Opening tables | 0.200467 | 0.001000 | 0.000999 | 0 | 0 |
| System lock | 0.000015 | 0.000000 | 0.000000 | 0 | 0 |
| Table lock | 0.000129 | 0.000000 | 0.000000 | 0 | 0 |
| optimizing | 0.000092 | 0.000000 | 0.000000 | 0 | 0 |
| statistics | 0.697543 | 0.000999 | 0.007999 | 0 | 0 |
| preparing | 0.000037 | 0.000000 | 0.000000 | 0 | 0 |
| executing | 0.000003 | 0.000000 | 0.000000 | 0 | 0 |
| Sorting result | 0.000004 | 0.000000 | 0.000000 | 0 | 0 |
| Sending data | 15.623954 | 0.090987 | 0.784881 | 0 | 0 |
| optimizing | 0.000009 | 0.000000 | 0.000000 | 0 | 0 |
| statistics | 0.000012 | 0.000000 | 0.000000 | 0 | 0 |
| preparing | 0.000011 | 0.000000 | 0.000000 | 0 | 0 |
| executing | 0.000003 | 0.000000 | 0.000000 | 0 | 0 |
| Sorting result | 0.001345 | 0.001999 | 0.000000 | 0 | 0 |
| Sending data | 0.004601 | 0.004000 | 0.000000 | 0 | 0 |
| removing tmp table | 0.000031 | 0.000000 | 0.000000 | 0 | 0 |
| Sending data | 0.000006 | 0.000000 | 0.000000 | 0 | 0 |
| query end | 0.000003 | 0.000000 | 0.000000 | 0 | 0 |
| freeing items | 0.000040 | 0.000000 | 0.000000 | 0 | 0 |
| logging slow query | 0.000003 | 0.000000 | 0.000000 | 0 | 0 |
| logging slow query | 0.000075 | 0.000000 | 0.000000 | 0 | 0 |
| cleaning up | 0.000005 | 0.000000 | 0.000000 | 0 | 0 |
+--------------------+-----------+----------+------------+--------------+---------------+
试验了一下,打开一个84M的slow log文件,也是在一个比较纯净的环境。
不似mysql中看到的现象,第一次的io操作达到饱和,而随后的则根本没有什么io操作,差别如此之巨!