我在linux下在执行查询语句的同时,用iostat -x 1命令实时查看系统io的状况。
整个linux系统并没有其他操作,在没执行查询语句的时候,一直没有io操作。第一次执行语句的时候,
iostat的结果显示为有970.00个读操作,同时也感受到了查询过程的停顿;
但此后再执行,io读操作均为0,很快就返回结果。我的查询语句用了sql_no_cache,所以,肯定不是从内存中读取的!这样的差异应该是什么导致的呢?

解决方案 »

  1.   

    差别:
    第一次从表读取物理IO
    第二次从内存读取逻辑IO
      

  2.   

    sql_no_cache
    好象只是不缓存在query_cache里面吧
      

  3.   

    基本上所有的数据库在执行相同的SQL语句时,第二次速度均>第一次,
    估计是对SQL语句进行优化,从自己的缓存中读取, 虽然你设置了no_cache
      

  4.   


    所说物理io和逻辑io是操作系统的概念还是mysql的概念?
    也就是说
    第一次从表读取物理IO,第二次从内存读取逻辑IO这样的操作是操作系统控制的还是mysql控制的?
      

  5.   


    据我所知是这样的,我确实以为一般情况下如果不从query_cache读,一定从硬盘读,而从硬盘读数据应该是没有差别的!
      

  6.   


    能否禁止mysql从逻辑io中读取?全部让他从物理io中读?
      

  7.   

    要求有点奇怪哦,即使修改表中的数据,查询出来的结果依然是最新的,而不是原来的数据,
    不管CACHE是否被禁用,
    你是担心修改数据后,结果没有变化?
      

  8.   


    这个要求主要是测试用,真实的系统中,同一条语句查询的速度差异很大,
    我在slow-log中找到的语句单列出来在一个单纯的环境下执行,速度上也存在很大的差异!
    我想看看到底怎么回事!
      

  9.   

    但如果存在物理io和逻辑io的区别,就没法看出语句真正的问题所在了!
      

  10.   

    操作系统本身也有CACHE!《操作系统》相关的教材中一般会介绍两个CHCHE
    1。 CPU CACHE, 从内存到CPU内部CACHE。
    2。 磁盘管理CACHE,操作系统会把磁盘上的一个块读入内存,如果下一个访问需要用到的磁盘扇区已经在CACHE中,则操作系统直接访问内存,而不是去访问磁盘。 (这也是为什么我们不能直接关电源,如果这个磁盘扇上的数据有了更新,则更新首先是在内存中,而操作系统的调度进程会把内存中的更新按照事先确定的机制写回磁盘)
      

  11.   

    停止MYSQL服务,重新启动,运行SQL,两次都这样,应该可以看出区别所在了
      

  12.   

     停止MYSQL服务,重新启动,运行SQL,两次都这样,应该可以看出区别所在了
    [/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
      

  13.   

    相应的show profile的信息如下:
    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 | 
    +--------------------+-----------+----------+------------+--------------+---------------+
      

  14.   

    楼主可以测试一下vi filename不做任何改动,再次打开,比较一下第一次和第二次的物理io差别
      

  15.   


    试验了一下,打开一个84M的slow log文件,也是在一个比较纯净的环境。
    不似mysql中看到的现象,第一次的io操作达到饱和,而随后的则根本没有什么io操作,差别如此之巨!
      

  16.   

    启了操作系统后,估计是清空了一切CACHE,重新开始,故速度慢