Heim  >  Fragen und Antworten  >  Hauptteil

MySQL-Optimierung – MySQL-Innodb-Tabellensperre, bitte den DBA-Experten um Antworten

Fragen:
1. Wenn Transaktionen in innodb und autocommit=1 nicht aktiviert sind, führen Aktualisierungen und Löschungen zu Tabellensperren?

Ich habe zwei MySQL-Sitzungen im Terminal geöffnet und Tabelle t enthält insgesamt 3,5 Millionen Datenzeilen

Allein ausgeführt:

 会话1:update t set status=1 where id>1; 16.*秒
 会话2:update t set status=1 where id<3500000; 12.*秒

Gleichzeitig ausgeführt, soweit ich weiß:

**在我看来,这两条sql,同时执行,同时操作同一条记录的情况,只有一次**
**在innodb中update和delete都会隐式添加排它锁,那么就是说这两条sql同时执行,只会阻塞很短的时间,毕竟只有同时操作同一条记录的情况下,才会阻塞**

Gleichzeitig ausgeführt, Testergebnisse:

两条sql,间隔执行时间,在半秒左右.
会话1先执行:update t set status=1 where id>1;16.*秒,没有变化 
会话2后执行:update t set status=1 where id<3500000; 28.* = 12.*秒+16.*秒


会话2先执行:update t set status=1 where id>1;12.*秒,没有变化 
会话1后执行:update t set status=1 where id<3500000; 28.* = 16.*秒+12.*秒

Könnte es sein, dass die Tabelle gesperrt ist, wenn zwei SQLs gleichzeitig denselben Datensatz bearbeiten? Mein Verständnis sollte sein, dass es nur für kurze Zeit blockiert. Schließlich kann derselbe Datensatz nur einmal gleichzeitig bedient werden. Es ist, als ob zwei Personen von 1 bis 10 zählen und b von 10 zählen bis 1, unabhängig davon, ob sie die gleiche Geschwindigkeit haben oder nicht die gleiche Geschwindigkeit, es ist nur möglich, die gleiche Zahl einmal gleichzeitig zu zählen

PHP中文网PHP中文网2705 Tage vor722

Antworte allen(1)Ich werde antworten

  • 仅有的幸福

    仅有的幸福2017-05-25 15:10:06

    一个sql就是一个事务,并不是说操作了1W条记录就是1W个事务,sql1锁住所有>1的记录,sql2会等待sql1释放锁

    Antwort
    0
  • StornierenAntwort