2016-09-27 1 views
2

Ich führe einige Belastungstests auf unserem System durch und merke eine massive Anzahl von "SET autocommit = 0" und "SET autocommit = 1" Abfragen ausgeführt werden . Etwas um 25.000 in 1 Minute. Ich versuche herauszufinden, was das verursacht und wie man es los wird.Massive Anzahl von "SET autocommit = 0/1" Abfragen in MySQL

Wir verwenden die folgenden Technologien:

  • MySQL

  • Hibernate

  • Hikari

  • Frühling

  • Tomcat

Ich habe versucht, die folgenden aber es hat nicht zu helfen scheint:

  • "SET autocommit = 0" in MySQL

  • Added die elideSetAutoCommits Eigenschaft in der DB-Verbindung URL. "Jdbc: mysql: // localhost/db_name useUnicode = true & characteren = UTF-8 & pinGlobalTxToPhysicalConnection = true & elideSetAutoCommits = true?"

Könnte mir jemand deuten darauf hin, was könnte diese Abfragen verursachen?

+0

nur eine Vermutung: kann es sein, dass Hibernate diese "Autocommit festlegen" vor und nach einer Transaktion ausgibt? Sie können vielleicht versuchen, herauszufinden, die Anwendung zu debuggen und notieren, welche Befehle genau auf der MySQL-Verbindung ankommen. –

Antwort

3

Könnte mich jemand auf das hinweisen, was diese Abfragen verursachen könnte?

Ihre Anfragen sind die Folge von Connection#setAutoCommit(boolean), die aus dem Standardmodus, die auto-commit Modus zu Transaktionsmodus wechseln verwendet werden um insert/update/delete/read Daten innerhalb einer Transaktion.

Der gemeinsame Code ist:

// Switch to transactional mode which actually triggers a SET autocommit = 0 
con.setAutoCommit(false); 
try { 
    // Some operations on the db 
    con.commit(); 
} finally { 
    // Switch back to auto-commit mode which actually triggers a SET autocommit = 1 
    con.setAutoCommit(true); 
} 

Hier ist eine gute Verbindung, die how transactions work in JDBC erklärt.


Wenn Sie wissen, dass Ihr Pool von Verbindungen immer Verbindungen im Transaktionsmodus zu bekommen verwendet werden, können Sie den Standardmodus in der Konfiguration von Hikari dank der Parametersatz autoCommit-false auf diese Weise die Verbindungen zu setzen wird bereits im transaktionalen Modus sein, so dass es nicht mehr benötigt wird, um den Modus zu ändern.

Diese Eigenschaft steuert das standardmäßige automatische Festschreibungsverhalten der aus dem Pool zurückgegebenen Verbindungen . Es ist ein boolescher Wert.Standard: true

Weitere Details über die Konfiguration von Hikarihere.

Verwandte Themen