запрос на удаление оракула, занимающий слишком много времени

Попробуйте использовать словарное понимание:

import string
print({k:max(i.count(k) for i in words) for k in string.ascii_lowercase})
25
задан Ajay 24 November 2009 в 12:27
поделиться

5 ответов

Может быть несколько объяснений того, почему ваш запрос занимает много времени:

  1. Вы могли быть заблокированы другим сеансом (скорее всего). Перед удалением вы должны убедиться, что никто другой не блокирует строки, например: issue SELECT NULL FROM tablename WHERE colname =: value FOR UPDATE NOWAIT ,
  2. Может быть ON DELETE TRIGGER , который выполняет дополнительную работу,
  3. Проверьте наличие НЕИНДЕКСИРОВАННЫХ ОГРАНИЧЕНИЙ ССЫЛКИ , указывающих на эту таблицу (есть сценарий от AskTom , который поможет вам определить, существуют ли такие неиндексированные внешние ключи) .
31
ответ дан 28 November 2019 в 21:19
поделиться

Возможно, ваша таблица связана с несколькими таблицами и имеет огромное количество строк.

5
ответ дан Wael Dalloul 28 November 2019 в 21:19
поделиться

Насколько селективен этот индекс? Если в вашей таблице один миллион строк и это значение достигает ста пятидесяти тысяч из них, ваш индекс бесполезен. Фактически, это может быть хуже, чем бесполезно, если оно действительно используется. Помните, что оператор DELETE похож на оператор SELECT: мы можем настроить его путь доступа.

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

У вас есть триггеры ON DELETE? У вас есть ограничения внешнего ключа ON DELETE CASCADE?

Edit: Учитывая все, что вы говорите, и особенно столбец, о котором идет речь, является первичным ключом, поэтому вы пытаетесь удалить одну строку, если это занимает много времени, гораздо более вероятно, что какой-то другой процесс или пользователь заблокировал строку. Что-нибудь отображается в V $ LOCK ?

3
ответ дан 28 November 2019 в 21:19
поделиться

В вашей таблице содержится больше записей?
Есть ли на сервере базы данных какие-то рекурсивные программы (вложенные циклы и т. Д.)?
Проверить сетевые проблемы, если сервер базы данных находится на разных машинах?

0
ответ дан 28 November 2019 в 21:19
поделиться

Если что-то тормозит, и вы не знаете почему, отследите это и выясните.

Как мне устранить проблемы с производительностью с помощью оператора Oracle SQL

0
ответ дан 28 November 2019 в 21:19
поделиться
Другие вопросы по тегам:

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