Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Проблема с курсором?  [new]
man2002ua
Member

Откуда: Украина. Киев
Сообщений: 231
Привет!
Расскажите плиз, что нужно лечить если
>> delete from PCS where RowID in (select 'AAAHrZAAIAAAM4KAAA' from Temp_Post_Delete)
>> 30 sec (причем global temp Temp_Post_Delete - пустая!)

>> delete from PCS where RowID in ('AAAHrZAAIAAAM4KAAA')
>> 0.5 sec

Oracle 8.1.7.0 (машина - обычный ПК)
?
4 июл 07, 13:31    [4349370]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с курсором?  [new]
mnick
Member

Откуда: Москва
Сообщений: 396
А что гарантирует пустоту Temp_Post_Delete?
Какое время будет если перед delete сделать truncate table Temp_Post_Delete?
4 июл 07, 13:36    [4349418]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с курсором?  [new]
man2002ua
Member

Откуда: Украина. Киев
Сообщений: 231
mnick
А что гарантирует пустоту Temp_Post_Delete?
Какое время будет если перед delete сделать truncate table Temp_Post_Delete?


просто открыл новую сессию (или просто пересоздал таблицу - эффект не изменяется)
4 июл 07, 13:37    [4349434]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с курсором?  [new]
man2002ua
Member

Откуда: Украина. Киев
Сообщений: 231
ни у кого мыслей? может быть что-то с неявными курсорами?
4 июл 07, 13:58    [4349596]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с курсором?  [new]
man2002ua
Member

Откуда: Украина. Киев
Сообщений: 231
delete from PCS where RowID in (select 'AAAHrZAAIAAAM4KAAA' from dual)
тоже 30 сек %(
4 июл 07, 14:03    [4349642]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с курсором?  [new]
realfreeman
Member

Откуда: Москва
Сообщений: 274
man2002ua
delete from PCS where RowID in (select 'AAAHrZAAIAAAM4KAAA' from dual)
тоже 30 сек %(


А вопрос, зачем вообще оперировать с RowId??
4 июл 07, 14:05    [4349661]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с курсором?  [new]
man2002ua
Member

Откуда: Украина. Киев
Сообщений: 231
realfreeman
man2002ua
delete from PCS where RowID in (select 'AAAHrZAAIAAAM4KAAA' from dual)
тоже 30 сек %(


А вопрос, зачем вообще оперировать с RowId??


это часть запроса к-я тормозит. Сам запрос - выборка данных для удаления (выбираются rowid, к-е надо удалить).
4 июл 07, 14:10    [4349710]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с курсором?  [new]
realfreeman
Member

Откуда: Москва
Сообщений: 274
man2002ua
realfreeman
man2002ua
delete from PCS where RowID in (select 'AAAHrZAAIAAAM4KAAA' from dual)
тоже 30 сек %(


А вопрос, зачем вообще оперировать с RowId??


это часть запроса к-я тормозит. Сам запрос - выборка данных для удаления (выбираются rowid, к-е надо удалить).


Все равно мне не понятно, зачем использовать RowId, используйте Primary Key и живите спокойно. При операциях импорта-экспорта, если мне память не изменяет, RowId будут другими, а PK останентся как и был.
4 июл 07, 14:12    [4349737]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с курсором?  [new]
man2002ua
Member

Откуда: Украина. Киев
Сообщений: 231
по PK быстрее чем по Rowid?
4 июл 07, 14:15    [4349757]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с курсором?  [new]
realfreeman
Member

Откуда: Москва
Сообщений: 274
man2002ua
по PK быстрее чем по Rowid?


Попробуй. Я могу ошибаться, но по моему САМ рекомендовал не использовать RowId, т.к. это внутренния сущность
4 июл 07, 14:16    [4349772]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с курсором?  [new]
man2002ua
Member

Откуда: Украина. Киев
Сообщений: 231
один ясень, может чуть медленнее даже.
4 июл 07, 14:27    [4349878]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с курсором?  [new]
man2002ua
Member

Откуда: Украина. Киев
Сообщений: 231
хелп :-(
что в оракле активно используется курсорами?
4 июл 07, 15:03    [4350208]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с курсором?  [new]
realfreeman
Member

Откуда: Москва
Сообщений: 274
man2002ua
хелп :-(
что в оракле активно используется курсорами?


Память вестимо.
4 июл 07, 15:08    [4350243]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с курсором?  [new]
man2002ua
Member

Откуда: Украина. Киев
Сообщений: 231
realfreeman
man2002ua
хелп :-(
что в оракле активно используется курсорами?


Память вестимо.


shared?
4 июл 07, 15:41    [4350518]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с курсором?  [new]
ExtraSuperUltra
Member

Откуда: Москва
Сообщений: 299
и PGA
4 июл 07, 15:44    [4350538]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с курсором?  [new]
Я и ёжик
Member

Откуда: СПб
Сообщений: 1815
man2002ua
ни у кого мыслей?


пункт 1.1.2
4 июл 07, 16:05    [4350718]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с курсором?  [new]
mcureenab
Member

Откуда: Murmansk
Сообщений: 5928
man2002ua
ни у кого мыслей? может быть что-то с неявными курсорами?


План запроса в студию! Такой запрос может выполняться с использованием доступа FULL SCAN таблицы PCS, а не BY USER ROWID, кат ты видимо ожидаешь, отсюда и тормоза.

Заметь, что in(select ...), и in(<list>) это принципиально разные операции. Первая выполняется соединением таблиц, вторая попросту краткая запись (a=v1 or a=v2 or ... or a=vN).

Ещё, попробуй явно преобразовать строку 'AAAHrZAAIAAAM4KAAA' в тип ROWID.
5 июл 07, 05:28    [4352641]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с курсором?  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18486
В 9.2.0.7 оптимизатор/парсер явно выполняет CHARTOROWID('...')
Другой вопрос -- из-за некорректности статистики на GTT может выполнятся на NL (по ROWID), а HJ, например. И соответственно FTS
5 июл 07, 05:36    [4352644]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с курсором?  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18486
tst> explain plan for
  2  delete from t1 where rowid in (select 'AAADMAAAGAAAIesAAA' from dual);

Explained.

tst> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
-------------------------------------------------------------------------------------------

---------------------------------------------------------------------
| Id  | Operation             |  Name       | Rows  | Bytes | Cost  |
---------------------------------------------------------------------
|   0 | DELETE STATEMENT      |             |     1 |    25 |     7 |
|   1 |  DELETE               | T1          |       |       |       |
|*  2 |   HASH JOIN           |             |     1 |    25 |     7 |
|   3 |    TABLE ACCESS FULL  | T1          |     1 |     5 |     2 |
|   4 |    VIEW               | VW_NSO_1    |    82 |  1640 |     4 |
|   5 |     SORT UNIQUE       |             |    82 |       |     4 |
|   6 |      TABLE ACCESS FULL| DUAL        |    82 |       |     2 |
---------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("T1".ROWID=CHARTOROWID("VW_NSO_1"."$nso_col_1"))

Note: cpu costing is off

19 rows selected.

tst> explain plan for
  2  delete from t1 where rowid in (select /*+ cardinality(dual, 1) */ 'AAADMAAAGAAAIesAAA' from dual);

Explained.

tst> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------
| Id  | Operation                    |  Name       | Rows  | Bytes | Cost  |
----------------------------------------------------------------------------
|   0 | DELETE STATEMENT             |             |     1 |    25 |     5 |
|   1 |  DELETE                      | T1          |       |       |       |
|   2 |   NESTED LOOPS               |             |     1 |    25 |     5 |
|   3 |    VIEW                      | VW_NSO_1    |     1 |    20 |     4 |
|   4 |     SORT UNIQUE              |             |     1 |       |     4 |
|   5 |      TABLE ACCESS FULL       | DUAL        |     1 |       |     2 |
|*  6 |    TABLE ACCESS BY USER ROWID| T1          |     1 |     5 |     1 |
----------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   6 - access(CHARTOROWID("VW_NSO_1"."$nso_col_1"))

Note: cpu costing is off

19 rows selected.
5 июл 07, 05:38    [4352645]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить