powered by simpleCommunicator - 2.0.39     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Почему Оракл тормозит?
9 сообщений из 9, страница 1 из 1
Почему Оракл тормозит?
    #32007151
Антон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Почему тормозит Оракл на простых удалениях из базы, причем база раскидана по трем дискам, роллбаки на одном, данные на другом, индексы на третьем?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Почему Оракл тормозит?
    #32038423
ldima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С какого жуя Оракл должен тормозить???

у меня он летает даже по инету (128 кбит, ну естественно с учетом скорости передачи данных по такому каналу).

ну рассказывй какое железо, какая ось, и самое главное какой клиент...
...
Рейтинг: 0 / 0
Почему Оракл тормозит?
    #32038464
Silver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вариаций торможения масса, вот только бы сначала убедится что тормозит именно Оракла и что удаления действительно "простые", а не , например, каскадные :)
...
Рейтинг: 0 / 0
Почему Оракл тормозит?
    #32038509
ldima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да ужжж, продинамил слово УДАЛЯЕТ...., сорри.
тут я полностью согласен с Silver'ом. 70-90% что ты удаляешь в оракле записи из таблицы, НА КОТОРУЮ ссылаются по внешнему ключу.

скажем есть внешний ключ для таблицы emp
,constraint fk_emp_dept foreign key(dept) references dept(id)
то что в таблице dept поле id проиндексировано, сомнений нет (в противном случае внешний ключ не пройдет), а вот индекса для поля dept в таблице emp нет, следовательно при удалении строки из таблицы dept оракл "видит" что на эту таблицу ссылаются из emp и начнет искать не встречается ли значение поля dept.id в emp.dept, ну а коли индекса нет, то full scan -))), ну а если у тебя сотни тысяч записей тормоза должны быть очень не кислыми...

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

2
если это нормальная работа приложения, то придется проиндексировать те самые столбцы, которые и ссылаются на твою таблицу... во как... (еле выговорил)
понятно, что копаться в скриптах дело не благодарное поэтому сделай что-то в энтом роде:

create or replace view v$foreign_ref as
select col.owner owner
,col.table_name table_name
,col.constraint_name constraint_name
,con.owner r_owner
,con.table_name r_table_name
,con.constraint_name r_constraint_name
,rcol.column_name r_column_name
,'alter table '||lower(con.owner)||'.'||lower(con.table_name)||' enable constraint '||lower(con.constraint_name)||';' con_enable
,'alter table '||lower(con.owner)||'.'||lower(con.table_name)||' disable constraint '||lower(con.constraint_name)||';' con_disable
,'create index '||lower(con.owner)||'.ix_'||lower(con.table_name)||'_'||lower(rcol.column_name)||' on '||lower(con.owner)||'.'||lower(con.table_name)||'('||lower(rcol.column_name)||');' ref_idx
from sys.all_constraints con
,sys.all_cons_columns col
,sys.all_cons_columns rcol
where con.r_constraint_name=col.constraint_name
and con.r_owner=col.owner
and con.constraint_name=rcol.constraint_name
and con.owner=rcol.owner
and con.constraint_type='R'

а потом просто
select * from v$foreign_ref t where owner='MAIN' and table_name='EMP'

обрати внимание на столбец ref_idx, энто как-раз то что тебе нужно, строки начнут удаляться раз в 100-200 быстрее :))). а если ссылок с десяток, и сами таблицы просто АААААгромные, то эффект от энтой простой ипидерсии, ешо более ААААААААААААААААГРООММААДДНЫЙ
...
Рейтинг: 0 / 0
Почему Оракл тормозит?
    #32038528
Silver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Самое смешное, если окажется проблема в клиенте, на П100 через ODBC+BDE+ полумертвый линк на червонец по коксу со 100 юзверями
:)
...
Рейтинг: 0 / 0
Почему Оракл тормозит?
    #32038544
ldima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-)))))
ODBC - ваще нельзя даже произносить в приличном обществе, у меня сканер все кидает через него в БД, это какой-то абштольц, но ничего поделать не могу, FormReader по-другому не умеет...

чтоже касемо коннекта, то он ораклу, почти по барабану, главное чтобы он был, и не пропадал, а 100 строк с записями и по 10 передать мона... по крайней мере у меня касса на коксе с репитером, и ничего нормально, правда такое утверждение наврядли относится к ODBC, BDE и тем паче к ODBC + BDE.
...
Рейтинг: 0 / 0
Почему Оракл тормозит?
    #32038856
none
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот действительно, интересно, как Оракл ищет по FOREIGN KEY-ям при каксадном удалении? Если у меня не будет индекса именно на это ключ, а, например, индекс будет конкатенационный на 3 колонки (допустим даже одна из колонок function-based), одна из которых этот ключ. Будет ли в таком слючае использоваться этот индекс? Или ораклу нужно строго индекс на одну колонку ключа? Или вообще используеться другой маханизм. (Например создаеться какойто системный индекс, который нельзя никак поменеджить, хотя врядли). Можно, впринципе, попробовать, да лень генерить большие таблицы. Может ктото заранее знает?
...
Рейтинг: 0 / 0
Почему Оракл тормозит?
    #32038918
vskv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как Оракул удаляет записи из дочерней таблицы.

На самом деле, всё очень просто:
у нас клиент отловил у себя в SGA запрос, который однозначно не могло сделать приложение, но которой по числу исполнений и виду очень корелировал с тем, как можно просто реализовать запрашиваемое.

Запрос исполнялся от имени SYS (??? Oracle 7.3 глюки ???) и имел вид
DELETE FROM CHILD_TABLE WHERE FK_COL1 = :1 AND FK_COL2 = :2 AND FK_COL3 = :3

Ни по одному полю индекса не было, а создание индекса по полю FK_COL2 увеличило скорость удаления 15 (!) записей из таблицы с 300 записей с 40 минут до 3 секунд.
...
Рейтинг: 0 / 0
Почему Оракл тормозит?
    #32038919
vskv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как Оракул удаляет записи из дочерней таблицы.

На самом деле, всё очень просто:
у нас клиент отловил у себя в SGA запрос, который однозначно не могло сделать приложение, но которой по числу исполнений и виду очень корелировал с тем, как можно просто реализовать запрашиваемое.

Запрос исполнялся от имени SYS (??? Oracle 7.3 глюки ???) и имел вид
DELETE FROM CHILD_TABLE WHERE FK_COL1 = :1 AND FK_COL2 = :2 AND FK_COL3 = :3

Ни по одному полю индекса не было, а создание индекса по полю FK_COL2 увеличило скорость удаления 15 (!) записей из таблицы с 300 записей с 40 минут до 3 секунд.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Почему Оракл тормозит?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]