show innodb status有关Spin Waits,Spin Rounds,Os Waits是如何解释的。谢谢

解决方案 »

  1.   

    http://www.mysqlperformanceblog.com/2011/09/02/understand-innodb-spin-waits-win-a-percona-live-ticket/
      

  2.   

    Innodb在获得mutex时是两阶段的。如果Mutex被别人锁住了,那么它并不会像教科书里面的那样,直接就sleep等待被唤醒了。而是先做一个循环,不断去获取mutex锁,称之为spin-wait,然后才sleep。因为sleep等待被唤醒的代价还是比较高的。通过spin-wait,可以明显降低这个开销。 •Mutex spin waits 5870888 这个代表的是线程获得锁,但是被别人锁住了。所以它得首先spin-wait。
    •rounds 19812448 是线程在spin-wait循环检查mutex是否已经释放的探测次数。
    •OS waits 375285 是spin-wait完成以后,还是没有获得mutex,不得不sleep的次数。
    这个主要是评估mutex 获取不到的比例。这里请求mutex不到的情况是 5870888,但是经过spin-wait,实际上最终只有375285次。也就是说只有60%需要真正sleep,40%稍微等一下就能拿到mutex.