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)
После прочтения https://github.com/go-sql-driver/mysql/issues/496 и https://github.com/go-sql-driver/mysql/pull/608 у меня сложилось впечатление, что в В приведенном выше примере базовый запрос будет отменен в середине выполнения, но, похоже, это не так. Для возврата по-прежнему требуется 10 секунд (и запрос отображается в списке процессов MySQL), хотя и с ошибкой sql: Rows are closed
. Означает ли это, что драйвер фактически не может отменить базовый запрос, выполняемый на сервере?
Привет, я автор №608.
Означает ли это, что драйвер фактически не может отменить базовый запрос, выполняемый на сервере?
Да, мой инструмент не убивает запросы, выполняемые на сервере.
Он все еще находится в статусе TODO.
К вашему сведению, вы можете ограничить время выполнения запроса с помощью подсказки.
https://dev.mysql.com/doc/refman/5.7/en/optimizer-hints.html#optimizer -hints-execution-time
@ shogo82148 @methane Спасибо.
Есть ли планы по исправлению этого TODO?
Есть ли планы по исправлению этого TODO?
https://github.com/go-sql-driver/mysql/pull/791
Похоже, это важный этап. Для других, добавляющих прерывание цепи к службам и обнаруживающих, что запросы сохраняются в mysql, вы можете посмотреть и отреагировать на эти проблемы, чтобы специалисты по обслуживанию знали, что есть интерес.
Большинство моих коллег ожидали, что это сработает, потому что они были более знакомы с postgres, где, как известно, такие рабочие процессы работают, их легче реализовать / они поддерживаются сеансом запросов изначально без дополнительных подключений.
На данный момент я документирую в своей организации, что mysql здесь менее дружелюбен, и эффективная поддержка такой функции гарантирует, что сервер mysql изменит свой интерфейс подключения.
Было бы неплохо обойти эту проблему, поскольку в настоящий момент мы очень много используем mysql. :-)
https://medium.com/@rocketlaunchr.cloud/canceling -mysql-in-go-827ed8f83b30
Самый полезный комментарий
Есть ли планы по исправлению этого TODO?