Я нашел, что это работало на меня для отключения к сочетанию клавиш для выполнения терминала:
super key
для запуска поиска Configuration Editor
и выбрать то приложение run_command_terminal
disabled
направо от run_command_terminal
Configuration Editor
, приложение Изображения того, на что это должно быть похожим и в Configuration Editor
и в System Settings
область.Надеюсь, это поможет!
К сожалению, MySQL не позволяет легко этого избежать. Общий метод состоит в том, чтобы написать сценарий, который проверяет все запущенные процессы каждые X секунд (в зависимости от того, что вы считаете «долгим») и убивает те, которые, по его мнению, выполняются слишком долго. Однако вы можете получить хотя бы базовую диагностику, установив в MySQL log_slow_queries
, который будет записывать все запросы, которые занимают более 10 секунд, в журнал. Если это слишком долго для того, что вы считаете «медленным» для ваших целей, вы можете установить long_query_time
на значение, отличное от 10, чтобы изменить порог.
Вы знаете, что это за запросы? Может быть, вы могли бы оптимизировать SQL или добавить индексы в свои таблицы?
Кажется, что единственный надежный способ прервать запрос - это команда kill . Менее радикальная мера - закрыть соединение (и снова открыть новое); это завершит запросы, как только они попытаются отправить некоторый вывод клиенту.
Я использую приложение для репликации DB Django, и у меня такое же затруднительное положение: запросы через WAN иногда могут просто зависать, если увеличивается задержка в сети.
Из http://code.activestate.com/recipes/576780/
Рецепт 576780: Тайм-аут для (почти) любого вызываемого объекта
Создайте ограниченную по времени версию любого вызываемого объекта.
Для например, чтобы ограничить функцию f
t секундами,
сначала создайте ограниченную по времени версию f
.
from timelimited import *
f_t = TimeLimited(f, t)
Затем вместо вызова f (...)
используйте f_t
как
try:
r = f_t(...)
except TimeLimitExpired:
r = ... # timed out
Используйте его следующий способ, например:
def _run_timed_query(cursor, log_msg, timeout, query_string, *query_args):
"""Run a timed query, do error handling and logging"""
import sys
import traceback
from timelimited import *
try:
return TimeLimited(cursor.execute, timeout)(query_string, *query_args)
except TimeLimitExpired:
logger_ec.error('%s; Timeout error.' % log_msg)
raise TimeLimitExpired
except:
(exc_type, exc_info, tb) = sys.exc_info()
logger_ec.error('%s; %s.' % (log_msg, traceback.format_exception(exc_type, exc_info, None)[0]))
raise exc_type
Use InnoDB Tables, they do row-locking instead of table-locking.
Вы не должны писать такие запросы, по крайней мере, для работы с вашей действующей базой данных. Mysql имеет параметр «медленные запросы», который вы можете использовать для определения запросов, которые вас убивают. В большинстве случаев эти медленные запросы либо содержат ошибки, либо их можно ускорить путем определения нового индекса или двух.