|
Почему Оракл тормозит?
|
|||
---|---|---|---|
#18+
Почему тормозит Оракл на простых удалениях из базы, причем база раскидана по трем дискам, роллбаки на одном, данные на другом, индексы на третьем? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2001, 11:09 |
|
Почему Оракл тормозит?
|
|||
---|---|---|---|
#18+
С какого жуя Оракл должен тормозить??? у меня он летает даже по инету (128 кбит, ну естественно с учетом скорости передачи данных по такому каналу). ну рассказывй какое железо, какая ось, и самое главное какой клиент... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2002, 11:11 |
|
Почему Оракл тормозит?
|
|||
---|---|---|---|
#18+
вариаций торможения масса, вот только бы сначала убедится что тормозит именно Оракла и что удаления действительно "простые", а не , например, каскадные :) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2002, 13:14 |
|
Почему Оракл тормозит?
|
|||
---|---|---|---|
#18+
Да ужжж, продинамил слово УДАЛЯЕТ...., сорри. тут я полностью согласен с 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 быстрее :))). а если ссылок с десяток, и сами таблицы просто АААААгромные, то эффект от энтой простой ипидерсии, ешо более ААААААААААААААААГРООММААДДНЫЙ ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2002, 14:46 |
|
Почему Оракл тормозит?
|
|||
---|---|---|---|
#18+
Самое смешное, если окажется проблема в клиенте, на П100 через ODBC+BDE+ полумертвый линк на червонец по коксу со 100 юзверями :) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2002, 15:26 |
|
Почему Оракл тормозит?
|
|||
---|---|---|---|
#18+
-))))) ODBC - ваще нельзя даже произносить в приличном обществе, у меня сканер все кидает через него в БД, это какой-то абштольц, но ничего поделать не могу, FormReader по-другому не умеет... чтоже касемо коннекта, то он ораклу, почти по барабану, главное чтобы он был, и не пропадал, а 100 строк с записями и по 10 передать мона... по крайней мере у меня касса на коксе с репитером, и ничего нормально, правда такое утверждение наврядли относится к ODBC, BDE и тем паче к ODBC + BDE. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2002, 16:18 |
|
Почему Оракл тормозит?
|
|||
---|---|---|---|
#18+
А вот действительно, интересно, как Оракл ищет по FOREIGN KEY-ям при каксадном удалении? Если у меня не будет индекса именно на это ключ, а, например, индекс будет конкатенационный на 3 колонки (допустим даже одна из колонок function-based), одна из которых этот ключ. Будет ли в таком слючае использоваться этот индекс? Или ораклу нужно строго индекс на одну колонку ключа? Или вообще используеться другой маханизм. (Например создаеться какойто системный индекс, который нельзя никак поменеджить, хотя врядли). Можно, впринципе, попробовать, да лень генерить большие таблицы. Может ктото заранее знает? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2002, 17:58 |
|
Почему Оракл тормозит?
|
|||
---|---|---|---|
#18+
Как Оракул удаляет записи из дочерней таблицы. На самом деле, всё очень просто: у нас клиент отловил у себя в 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 секунд. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2002, 01:16 |
|
Почему Оракл тормозит?
|
|||
---|---|---|---|
#18+
Как Оракул удаляет записи из дочерней таблицы. На самом деле, всё очень просто: у нас клиент отловил у себя в 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 секунд. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2002, 01:16 |
|
|
start [/forum/topic.php?fid=52&tid=1993239]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
61ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 283ms |
total: | 446ms |
0 / 0 |