Django: Как можно мешать долгим запросам уничтожить базу данных? [закрытый]

Я нашел, что это работало на меня для отключения к сочетанию клавиш для выполнения терминала:

  • Нажимают super key для запуска поиска
  • , Поиск Configuration Editor и выбрать то приложение
  • Выполняет развертку следующего: приложения>> метагород>> global_keybindings
  • Прокручивает вниз, пока Вы не видите run_command_terminal
  • , Вы можете удалять или вводить в Word disabled направо от run_command_terminal
  • Нажатие красный 'X' наверху Configuration Editor, приложение
  • Проверяет сохранение путем входа: Параметры настройки системы>> Клавиатура>> Ярлыки

Изображения того, на что это должно быть похожим и в Configuration Editor и в System Settings область.Надеюсь, это поможет!

enter image description here

enter image description here

6
задан Paul Tarjan 30 August 2009 в 07:35
поделиться

6 ответов

К сожалению, MySQL не позволяет легко этого избежать. Общий метод состоит в том, чтобы написать сценарий, который проверяет все запущенные процессы каждые X секунд (в зависимости от того, что вы считаете «долгим») и убивает те, которые, по его мнению, выполняются слишком долго. Однако вы можете получить хотя бы базовую диагностику, установив в MySQL log_slow_queries , который будет записывать все запросы, которые занимают более 10 секунд, в журнал. Если это слишком долго для того, что вы считаете «медленным» для ваших целей, вы можете установить long_query_time на значение, отличное от 10, чтобы изменить порог.

1
ответ дан 17 December 2019 в 20:33
поделиться

Вы знаете, что это за запросы? Может быть, вы могли бы оптимизировать SQL или добавить индексы в свои таблицы?

0
ответ дан 17 December 2019 в 20:33
поделиться

Кажется, что единственный надежный способ прервать запрос - это команда kill . Менее радикальная мера - закрыть соединение (и снова открыть новое); это завершит запросы, как только они попытаются отправить некоторый вывод клиенту.

0
ответ дан 17 December 2019 в 20:33
поделиться

Я использую приложение для репликации 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
1
ответ дан 17 December 2019 в 20:33
поделиться

Use InnoDB Tables, they do row-locking instead of table-locking.

0
ответ дан 17 December 2019 в 20:33
поделиться

Вы не должны писать такие запросы, по крайней мере, для работы с вашей действующей базой данных. Mysql имеет параметр «медленные запросы», который вы можете использовать для определения запросов, которые вас убивают. В большинстве случаев эти медленные запросы либо содержат ошибки, либо их можно ускорить путем определения нового индекса или двух.

0
ответ дан 17 December 2019 в 20:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: