Mysql: Отменяет ли отмена контекста базовый запрос?

Созданный на 5 янв. 2018  ·  6Комментарии  ·  Источник: 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)

После прочтения https://github.com/go-sql-driver/mysql/issues/496 и https://github.com/go-sql-driver/mysql/pull/608 у меня сложилось впечатление, что в В приведенном выше примере базовый запрос будет отменен в середине выполнения, но, похоже, это не так. Для возврата по-прежнему требуется 10 секунд (и запрос отображается в списке процессов MySQL), хотя и с ошибкой sql: Rows are closed . Означает ли это, что драйвер фактически не может отменить базовый запрос, выполняемый на сервере?

Самый полезный комментарий

Есть ли планы по исправлению этого TODO?

Все 6 Комментарий

Привет, я автор №608.

Означает ли это, что драйвер фактически не может отменить базовый запрос, выполняемый на сервере?

Да, мой инструмент не убивает запросы, выполняемые на сервере.
Он все еще находится в статусе TODO.

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

К вашему сведению, вы можете ограничить время выполнения запроса с помощью подсказки.
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. :-)

Была ли эта страница полезной?
0 / 5 - 0 рейтинги