Frage Wie kann ich mysql Sperren anzeigen?


Gibt es trotzdem alle Sperren, die in einer MySQL-Datenbank aktiv sind?


28
2017-07-06 10:13


Ursprung


Sie können INNODB_LOCK_WAITS- und INNODB_LOCKS-Tabellen abfragen.


Antworten:


Siehe Markos Link für InnoDB-Tabellen und die Vorbehalte.

Für MyISAM gibt es keine einfache Lösung "Dies ist die problematische Abfrage". Sie sollten immer mit einer Prozessliste beginnen. Achten Sie jedoch darauf, das vollständige Schlüsselwort anzugeben, damit die gedruckten Abfragen nicht abgeschnitten werden:

SHOW FULL PROCESSLIST;

Dies zeigt Ihnen eine Liste aller aktuellen Prozesse, ihre SQL-Abfrage und Status. Wenn nun eine einzelne Abfrage dazu führt, dass viele andere sperren, sollte es leicht zu identifizieren sein. Die betroffenen Abfragen haben den Status Locked und die beleidigende Abfrage wird allein sitzen und möglicherweise auf etwas Intensives warten, wie eine temporäre Tabelle.

Wenn es nicht offensichtlich ist, dann müssen Sie Ihre Fähigkeiten der SQL-Deduktion verwenden, um zu bestimmen, welches Stück der beleidigenden SQL die Ursache Ihrer Leiden sein kann.


29
2017-07-06 10:47





Wenn Sie InnoDB verwenden und laufende Abfragen überprüfen müssen, empfehle ich

show engine innodb status;

wie in Markos Link erwähnt. Dies gibt Ihnen die Sperranfrage, wie viele Zeilen / Tabellen davon gesperrt sind usw. Schauen Sie unter TRANSAKTIONEN.

Das Problem mit der Verwendung SHOW PROCESSLIST Sie sehen die Sperren nur, wenn andere Abfragen in der Warteschlange stehen.


11
2018-06-05 07:42





Versuchen SHOW OPEN TABLES:

show open tables where In_Use > 0 ;

9
2018-05-09 04:55



Ich denke, dies ist der beste Weg, um Sperren sofort zu verwenden, besonders wenn Sie mehrere Datenbanken und Hunderte von Verbindungen haben. - nelaaro


Verwenden Sie diesen Befehl

SHOW PROCESSLIST

zeigt alle laufenden Prozesse an, einschließlich des Prozesses, der Sperren für Tabellen erhalten hat.


6
2017-07-06 10:15





AFAIK gibt es in MYSQL immer noch keinen nativen Weg, den ich aber benutze Innotop. Es ist kostenlos und hat viele andere Funktionen.

Siehe auch dieser Link Weitere Informationen zur Verwendung des Tools innotop


6
2017-07-06 10:39





Referenz von diesem Beitrag genommen.

Sie können folgendes Skript verwenden:

SELECT 
    pl.id
    ,pl.user
    ,pl.state
    ,it.trx_id 
    ,it.trx_mysql_thread_id 
    ,it.trx_query AS query
    ,it.trx_id AS blocking_trx_id
    ,it.trx_mysql_thread_id AS blocking_thread
    ,it.trx_query AS blocking_query
FROM information_schema.processlist AS pl 
INNER JOIN information_schema.innodb_trx AS it
    ON pl.id = it.trx_mysql_thread_id
INNER JOIN information_schema.innodb_lock_waits AS ilw
    ON it.trx_id = ilw.requesting_trx_id 
        AND it.trx_id = ilw.blocking_trx_id

3
2018-06-20 09:10