Mysql: Bricht der Kontextabbruch die zugrunde liegende Abfrage ab?

Erstellt am 5. Jan. 2018  ·  6Kommentare  ·  Quelle: go-sql-driver/mysql

ctx, cancel := context.WithCancel(context.Background())

// Cancel 5 seconds in.
go func() {
    time.Sleep(time.Second * 5)
    cancel()
}()

// This query should take 10 seconds to return.
rows, err := dbt.db.QueryContext(ctx, "SELECT v, SLEEP(10) FROM test LIMIT 1")
fmt.Println(rows, err)

Nachdem ich https://github.com/go-sql-driver/mysql/issues/496 und https://github.com/go-sql-driver/mysql/pull/608 gelesen hatte, hatte ich den Eindruck, dass im im obigen Beispiel würde die zugrunde liegende Abfrage während der Ausführung abgebrochen werden, aber das scheint nicht der Fall zu sein. Die Rückgabe dauert immer noch 10 Sekunden (und die Abfrage wird in der MySQL-Prozessliste angezeigt), wenn auch mit dem Fehler sql: Rows are closed . Bedeutet dies, dass der Treiber die zugrunde liegende Abfrage, die auf dem Server ausgeführt wird, nicht wirklich abbrechen kann?

Hilfreichster Kommentar

Gibt es Pläne, dieses TODO zu beheben?

Alle 6 Kommentare

Hallo, ich bin der Autor von #608.

Bedeutet dies, dass der Treiber die zugrunde liegende Abfrage, die auf dem Server ausgeführt wird, nicht wirklich abbrechen kann?

Ja, mein Implement beendet die auf dem Server ausgeführte Abfrage nicht.
Es befindet sich noch im TODO-Status.

https://github.com/go-sql-driver/mysql/blob/9181e3a86a19bacd63e68d43ae8b7b36320d8092/driver_go18_test.go#L270

Zu Ihrer Information, Sie können die Ausführungszeit der Abfrage per Hinweis begrenzen.
https://dev.mysql.com/doc/refman/5.7/en/optimizer-hints.html#optimizer-hints-execution-time

@shogo82148 @methan Danke.

Gibt es Pläne, dieses TODO zu beheben?

Gibt es Pläne, dieses TODO zu beheben?

https://github.com/go-sql-driver/mysql/pull/791

Sieht aus, als wäre es übrigens ein Meilenstein. Für andere, die Dienste unterbrechen und feststellen, dass Abfragen in mysql bestehen bleiben, sollten Sie diese Probleme beobachten und darauf reagieren, damit die Betreuer wissen, dass Interesse besteht.

Die meisten meiner Kollegen erwarteten, dass dies funktioniert, weil sie mit Postgres vertrauter waren, wo solche Workflows bekanntermaßen funktionieren, einfacher zu implementieren sind / von der Abfragesitzung nativ unterstützt werden, ohne weitere Verbindungen herzustellen.

Im Moment dokumentiere ich in meiner Organisation, dass MySQL hier weniger freundlich ist und eine effektive Unterstützung für eine solche Funktion eine Änderung der Verbindungsschnittstelle des MySQL-Servers rechtfertigen würde.

Ein Workaround wäre schön, da wir im Moment so viel mit MySQL haben. :-)

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen