2009-02-25 4 views
4

В контексте SQL, что делает runaway query mean?Что такое «убегающий запрос»?

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

ответ

5

Беглый запрос - это запрос, время выполнения которого занимает больше времени выполнения, оцененного оптимизатором. Беглые запросы могут привести к использованию всех ваших циклов процессора или других ресурсов во время его выполнения.

+0

Или, как правило, с использованием всего дискового ввода-вывода –

1

Я считаю, что это означает, что вы выполняете и никогда не вернетесь. Например, выполнение оператора select, который никогда не возвращается с результатами (или занимает очень много времени, чтобы сделать это).

4

Это запрос, который начинает работать и никогда не возвращается (для некоторого значения «никогда»).

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

Можно написать SQL-запросы, для выполнения которых требуется неделя/год.

1

Когда запрос объединяет больше строк, чем необходимо, до точки превышения.

От Wikipedia: Язык делает это слишком простым, чтобы сделать декартово объединение (объединение всех возможных комбинаций), что приводит к появлению «отбегающих» результатов, когда предложения WHERE ошибочны. Декартовы объединения настолько редко используются на практике, что требуется явное ключевое слово CARTESIAN. В SQL 1992 введено ключевое слово CROSS JOIN, которое позволяет пользователю четко указывать, что требуется декартовое соединение, но сокращенный «comma-join» без предиката все еще является приемлемым синтаксисом.

2

Я применяю этот термин специально к запросу, который запускает, как правило, случайное поведение со временем выполнения неожиданной сложности. Если вы ожидаете, что запрос примет O (n * m) (то есть одно соединение между двумя таблицами), и он примет O (n * n * m), тогда я бы назвал его убегающим, даже если n * n * m приемлемо малый в данном случае. Чаще всего это воспринимается как ожидаемый запрос O (log (n) * log (m)), принимающий O (n * n * m * m), что оказывается неприемлемо сложным.

2

Runaway запросы имеют ряд характеристик - выбрать некоторые из:

  • они производят гигантский результат устанавливает
  • они запирают много таблиц
  • они приводят к большому количеству записей в журнале транзакций
  • они потребляют огромную ampounts из/вывода и ресурсов процессора I

Во всех случаях они, как правило, не позволяют другим пользователям выполнять какую-либо полезную работу.

1

Беглый запрос обычно представляет собой запрос, который потребует много времени и/или большого количества системных ресурсов (CPU, Memory и т. Д.) Для завершения.

Общие причины могут быть:

  • Неиспользования индексированных столбцов
  • Неспособность правильно соединить таблицы (так что вы получите по крайней мере один перекрестный продукт)
  • Вредных статистик таблицы по подержанным индексированным столбцам
  • Многочисленные сравнения строк или манипуляции

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

0

Просто упомянуть, что запрос бегства может произойти, если задействован плохо написанный триггер. Триггеры должны иметь возможность обрабатывать многозадачные вставки/обновления или дельта, и некоторые люди, как известно, делают это с помощью курсора, а не с использованием языка, основанного на наборе. Это может вызвать запрос на обновление большого количества записей для бегства. Недавно удалось сократить время запроса для большого набора записей, обновляемых с более 40 минут до 40 секунд, заменив один из таких триггеров.

Другие причины включают случайные кросс-соединения (фиксированные с четкими), неконтрастные, где клаузулы, использование подзапросов или использование определенных функций, неправильная индексация, статистика, которые не были обновлены, использование курсоров, недостаточное определение в соединении или где , И так далее.

Смежные вопросы