学习mysql高级的时候看到原文是这么说的:【读请求和写等待队列中的写锁请求的优先级规则主要为以下规则决定:、1.除了READ_HIGH_PRIORITY的读锁定之外,Pendingwrite-lockqueue中的WRITE写锁定能够阻塞所有其他的读锁定2.READ_HIGH_PRIORITY读锁定的请求能够阻塞所有Pendingwrite-lockqueue中的写锁定3.除了WRITE写锁定之外,Pendingwrite-lockqueue中的其他任何写锁定都比读锁定的优先级低】我想请问的是: 一般来说都是写锁的优先级要高于读锁,觉得上面的第1点跟第三矛盾,怎么理解除了WRITE写锁定之外,Pendingwrite-lockqueue中的其他任何写锁定都比读锁定的优先级低?请各位大神释疑!

解决方案 »

  1.   


    那你的理解是什么如果假设上面的翻译没有太大的问题,基本上可以推测 :Pendingwrite-lockqueue中包含了多种类型,其中的WRITE写锁定 是一种类型,当读操作设置了高优先级,那么就会插入到队列的前端,如果没有这个设置,一般的write锁定就会插入到前端,比read优先级高
      

  2.   


    那你的理解是什么如果假设上面的翻译没有太大的问题,基本上可以推测 :Pendingwrite-lockqueue中包含了多种类型,其中的WRITE写锁定 是一种类型,当读操作设置了高优先级,那么就会插入到队列的前端,如果没有这个设置,一般的write锁定就会插入到前端,比read优先级高可是原文说的是read优先级高于 pending write-lock queue 中的写锁定,    不过我已经查到的官网说明了,  大概意思是表锁是读写互斥的, 表锁定使许多会话在同一时间从表中读取,但如果一个会话想要写一个表,它必须首先获得独占访问,这意味着它可能必须等待其他会话与表首先完成。所以 read 锁的优先级比等待中的表锁定优先级要高。
      

  3.   

    说错了  是 所以 read 锁的优先级比等待中的写锁定优先级要高。
      

  4.   


    那就对了,如果一个写操作被阻塞了,而read操作有可能就排到前面了,但是如果一个阻塞的写操作,又转为 不是阻塞状态的写了,就又会排到前面