Убить длительные процессы в MySQL - PullRequest
0 голосов
/ 10 мая 2018

Сценарий - на подчиненном компьютере запущены сотни отчетов. Эти отчеты либо планируются планировщиком событий MySQL, либо вызываются через скрипт Python / R или Shell. Кроме того, есть пятьдесят странных пользователей, которые подключаются к ведомому MySQL, выполняющему случайные запросы. Эти люди действительно не знают, как писать хорошие запросы, и это справедливо. Они не должны. Таким образом, время от времени (читайте каждый день) вы видите некоторые запросы, которые зависают из-за блокировок чтения / записи. Как вы это исправите.

То, что вы делаете, это то, что вы не убиваете все, что пишется. Вместо этого вы убиваете все запросы на чтение. Теперь это тоже сложно, потому что, если вы убьете все запросы на чтение, вы также отпустите запросы OUTFILE, которые фактически являются запросами на запись (они просто не записывают в MySQL, а записывают на диск).

Зачем нужно убивать (я говорю только о MySQL, не берите это из контекста)

У меня есть два слова для вас - Slave lag. Мы не хотим, чтобы это произошло, потому что, если это произойдет, пострадают все пользователи, отчеты, потребители.

Я написал следующее, чтобы убить процессы в MySQL, основываясь на трех вопросах

  • как долго выполняется запрос?
  • кто запускает запрос?
  • Вы хотите убить также write/modify запросов?

То, что я намеренно еще не сделал, - это то, что я не вел историю процессов, которые были убиты. Нужно сделать это, чтобы проанализировать и выяснить, кто выполняет все плохие запросы. Но есть и другие способы выяснить это.

Я создал процедуру для этого. Не тратить много времени на это. Поэтому, пожалуйста, предложите, если это хороший способ сделать это или нет.

GitHub Gist

1 Ответ

0 голосов
/ 19 мая 2018

Переключиться на MariaDB. Версии 10.0 и 10.1 реализуют несколько ограничений и тайм-аутов: https://mariadb.com/kb/en/library/query-limits-and-timeouts/

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

...