powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / DDL триггер
41 сообщений из 41, показаны все 2 страниц
DDL триггер
    #40133942
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Братцы, лыжи не едут, что делаю не так.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
-- Юзер  
CREATE USER "MYUSER" IDENTIFIED BY 123  ;  
    
-- Права
GRANT CONNECT TO MYUSER ;  
GRANT CREATE TABLE TO MYUSER ;
GRANT CREATE TRIGGER TO MYUSER ;
GRANT CREATE ANY INDEX TO MYUSER ;

-- DDL триггер
create or replace NONEDITIONABLE TRIGGER MYUSER.MYUSER_CREATE_TABLE_INDEX
AFTER CREATE ON MYUSER.SCHEMA

    DECLARE
    cSQL varchar2(4000 CHAR);
   BEGIN
    cSQL := 'create index MYUSER.idx_test on MYUSER.test(f1)';
    EXECUTE IMMEDIATE cSQL;

   END MYUSER_CREATE_TABLE_INDEX;

-- Выполняю от юзера MYUSER
create table  MYUSER.test (f1 nvarchar2(10));

-- Получаю ошибку
rror starting at line : 1 in command -
create table  MYUSER.test (f1 nvarchar2(10))
Error report -
ORA-04088: ошибка во время выполнения триггера 'MYUSER.MYUSER_CREATE_TABLE_INDEX'
ORA-00604: ошибка на рекурсивном SQL-уровне 1
ORA-30511: неверная DDL операция в системных триггерах
04088. 00000 -  "error during execution of trigger '%s.%s'"
*Cause:    A runtime error occurred during execution of a trigger.
*Action:   Check the triggers which were involved in the operation.




В "упор" не пойму где ошибка??
...
Рейтинг: 0 / 0
DDL триггер
    #40133957
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создавать объект в триггере на создание объекта. Да ты гений рекурсии...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
DDL триггер
    #40133971
Asmodeus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PaulWist
Братцы, лыжи не едут, что делаю не так.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
-- Юзер  
CREATE USER "MYUSER" IDENTIFIED BY 123  ;  
    
-- Права
GRANT CONNECT TO MYUSER ;  
GRANT CREATE TABLE TO MYUSER ;
GRANT CREATE TRIGGER TO MYUSER ;
GRANT CREATE ANY INDEX TO MYUSER ;

-- DDL триггер
create or replace NONEDITIONABLE TRIGGER MYUSER.MYUSER_CREATE_TABLE_INDEX
AFTER CREATE ON MYUSER.SCHEMA

    DECLARE
    cSQL varchar2(4000 CHAR);
   BEGIN
    cSQL := 'create index MYUSER.idx_test on MYUSER.test(f1)';
    EXECUTE IMMEDIATE cSQL;

   END MYUSER_CREATE_TABLE_INDEX;

-- Выполняю от юзера MYUSER
create table  MYUSER.test (f1 nvarchar2(10));

-- Получаю ошибку
rror starting at line : 1 in command -
create table  MYUSER.test (f1 nvarchar2(10))
Error report -
ORA-04088: ошибка во время выполнения триггера 'MYUSER.MYUSER_CREATE_TABLE_INDEX'
ORA-00604: ошибка на рекурсивном SQL-уровне 1
ORA-30511: неверная DDL операция в системных триггерах
04088. 00000 -  "error during execution of trigger '%s.%s'"
*Cause:    A runtime error occurred during execution of a trigger.
*Action:   Check the triggers which were involved in the operation.




В "упор" не пойму где ошибка??

В дополнение к предыдущему замечанию (как минимум напрашивается секция WHEN (ora_dict_obj_type='TABLE'), чтобы не срабатывал на прочих объектах), расширенное сообщение об ошибке гласит:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
[oracle@ol8db193 ~]$ oerr ora 30511
30511, 00000, "invalid DDL operation in system triggers"
// *Cause:  An attempt was made to perform an invalid DDL operation
//          in a system trigger. Most DDL operations currently are not
//          supported in system triggers. The only currently supported DDL
//          operations are table operations, pluggable database operations,
//          ALTER COMPILE operations, and ALTER SESSION operations.
// *Action: Remove invalid DDL operations in system triggers.


CREATE INDEX не предусмотрен.
...
Рейтинг: 0 / 0
DDL триггер
    #40133980
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Asmodeus

Спасибо.

Тогда уточняющий вопрос, как создать индекс на табличку используя системные события (как вариант повесить шедулер, но не хотелось бы)??

2 Dimitry Sibiryakov

Дык, "я не волшебник, я только учусь " (с) к/ф Золушка

Оракл увидел впервые 3 месяца назад :((
...
Рейтинг: 0 / 0
DDL триггер
    #40133986
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaulWistТогда уточняющий вопрос, как создать индекс на табличку используя системные
события (как вариант повесить шедулер, но не хотелось бы)??

Во-первых, никак.
Во-вторых, даже если ты найдёшь проктостоматологический способ, это будет
диверсия, поскольку лишние индексы в базе - зло.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
DDL триггер
    #40133989
PuM256
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PaulWist
2 Asmodeus
Тогда уточняющий вопрос, как создать индекс на табличку используя системные события

Извиняюсь, зачем?
...
Рейтинг: 0 / 0
DDL триггер
    #40133990
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov


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


1. ОК, спасибо ( уже сам понял, нашел).

2. Нуу, как бы... у тебя запрос выполнялся 15 мин, а стал выполняться за 3 сек, а так индексы конечно зло
...
Рейтинг: 0 / 0
DDL триггер
    #40133992
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

PaulWistТогда уточняющий вопрос, как создать индекс на табличку используя системные
события (как вариант повесить шедулер, но не хотелось бы)??

Во-первых, никак.
Во-вторых, даже если ты найдёшь проктостоматологический способ, это будет
диверсия, поскольку лишние индексы в базе - зло.
Осталось только научиться отличать "лишние" индексы от "нелишних". :-)

P. S. На Exadata можно использовать Automatic Indexing , но делать это нужно осторожно.
...
Рейтинг: 0 / 0
DDL триггер
    #40133993
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaulWistНуу, как бы... у тебя запрос выполнялся 15 мин, а стал выполняться за 3 сек

Какой запрос если ты таблицу только создаёшь? Твой триггер должен обладать даром
предвидения чтобы в момент создания таблицы предвидеть запросы к ней. Не говоря
уже об искусственном интеллекте чтобы распознать поля, которые необходимо
проиндексировать для ускорения этого запроса.

"Нет, сынок, это фантастика." (с)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
DDL триггер
    #40133994
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaulWist

2. Нуу, как бы... у тебя запрос выполнялся 15 мин, а стал выполняться за 3 сек, а так индексы конечно зло


И поэтому индексы надо создавать налету?

SY.
...
Рейтинг: 0 / 0
DDL триггер
    #40133996
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PuM256
PaulWist
2 Asmodeus
Тогда уточняющий вопрос, как создать индекс на табличку используя системные события

Извиняюсь, зачем?


Да, блин, "коробочная" система а-ля 1С на СУБД Oracle, MSSQL, Informix итп с "индусским кодом", в ней есть такое безобразие как перегрузить таблицу (причём местные программёры её часто используют, нафига мне не понятно), фактически табличка выгружается в файл, убивается drop table со всеми атрибутами, а затем создаётся из своих метаданных, причем например индексы могут создаваться только как create index idx on table (f1, f2...) создать индекс DECODE(f1) уже не может, вот приходиться искать методы обойти индусов
...
Рейтинг: 0 / 0
DDL триггер
    #40133997
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

PaulWistНуу, как бы... у тебя запрос выполнялся 15 мин, а стал выполняться за 3 сек

Какой запрос если ты таблицу только создаёшь? Твой триггер должен обладать даром
предвидения чтобы в момент создания таблицы предвидеть запросы к ней. Не говоря
уже об искусственном интеллекте чтобы распознать поля, которые необходимо
проиндексировать для ускорения этого запроса.

"Нет, сынок, это фантастика." (с)


Иии что?? Если таблица создаётся, то для неё уже, как правило, известны запросы, (PK/FK), ... нет ну если создать таблицу, а затем ждать тормозов, ... тоже метод.
...
Рейтинг: 0 / 0
DDL триггер
    #40133999
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaulWist
Dimitry Sibiryakov

пропущено...

Какой запрос если ты таблицу только создаёшь? Твой триггер должен обладать даром
предвидения чтобы в момент создания таблицы предвидеть запросы к ней. Не говоря
уже об искусственном интеллекте чтобы распознать поля, которые необходимо
проиндексировать для ускорения этого запроса.

"Нет, сынок, это фантастика." (с)


Иии что?? Если таблица создаётся, то для неё уже, как правило, известны запросы, (PK/FK), ... нет ну если создать таблицу, а затем ждать тормозов, ... тоже метод.
Точно!
В этом случае как раз и помогает автоматическое индексирование!
Но не всем. А только владельцам БД современных версий на платформе Exadata.
...
Рейтинг: 0 / 0
DDL триггер
    #40134002
Asmodeus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PaulWist
Да, блин, "коробочная" система а-ля 1С
Вот именно, что коробочная система, где требуемые индексы строят разработчики коробочки , предполагая, какие запросы будут прилетать в БД (исходя из выдаваемых наружу - пользователю, - функций). Это не БД сама занимается прикладным индексостроением от скуки (Autonomous Database не берем в расчет, там все не однозначно, хотя и довольно интересно в режиме "REPORT ONLY").
...
Рейтинг: 0 / 0
DDL триггер
    #40134011
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--
...
Рейтинг: 0 / 0
DDL триггер
    #40134016
rpovarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В порядке бреда - в триггере запланировать задачу через Scheduler, и в той задаче уже создать индекс.
Пардон, плохо читал, автором же и предлагалось.
Но вполне рабочий вариант, если повесить триггер на создание таблицы.
...
Рейтинг: 0 / 0
DDL триггер
    #40134018
Asmodeus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PaulWist
Asmodeus
пропущено...
Вот именно, что коробочная система, где требуемые индексы строят разработчики коробочки , предполагая, какие запросы будут прилетать в БД (исходя из выдаваемых наружу - пользователю, - функций). Это не БД сама занимается прикладным индексостроением от скуки (Autonomous Database не берем в расчет, там все не однозначно, хотя и довольно интересно в режиме "REPORT ONLY").


Блин, ты уж определись, то таблицу создали зачем индексы, то таблицу создали индексы нужны.

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

В Autonomous Database в роли "Знайки" выступает сама БД на основе частоты выполнения тех или иных запросов: вы спрашивайте, что хотите, а я прикину, как эффективнее вам это выдавать. Подход имеет право на жизнь в текущих условиях развития Low-Code приложений и отношению к БД как к черному ящику со стороны разработчика.

С третьей стороны рекомендации по индексированию Oracle выдает в своих ADDM отчетах уже очень давно (с 10 версии, AFAIR). Читать ADDM Report и применять (возможно, с модификациями) рекомендации - одна из забот ДБА (лучше - совместно с разработчиком). И снова: автоматическое создание индексов в триггерах тут совсем не нужно.
...
Рейтинг: 0 / 0
DDL триггер
    #40134021
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov


Во-первых, никак.


Ну почему-же:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
CREATE OR REPLACE
  TRIGGER MYUSER_CREATE_TABLE_INDEX_TRG
    AFTER CREATE
    ON DATABASE
    BEGIN
        IF     ORA_DICT_OBJ_OWNER = 'SCOTT'
           AND
               ORA_DICT_OBJ_TYPE = 'TABLE'
          THEN
            DBMS_SCHEDULER.CREATE_JOB(
                                      JOB_NAME   => 'J' || SYS_GUID(),
                                      JOB_TYPE   => 'PLSQL_BLOCK',
                                      JOB_ACTION => 'BEGIN EXECUTE IMMEDIATE ''CREATE INDEX ' ||
                                                    ORA_DICT_OBJ_OWNER || '.' || ORA_DICT_OBJ_NAME ||
                                                    '_IDX ON ' ||
                                                    ORA_DICT_OBJ_OWNER || '.' || ORA_DICT_OBJ_NAME ||
                                                    '(N)''; END;',
                                      ENABLED    => TRUE
                                    );
        END IF;
END;
/




Теперь:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
SQL> create table tbl1(n number);

Table created.

SQL> select  index_owner,
  2          index_name,
  3          column_name
  4    from  dba_ind_columns
  5    where table_owner = 'SCOTT'
  6      and table_name = 'TBL1'
  7  /

INDEX_OWNER INDEX_NAME  COLUMN_NAME
----------- ----------- -----------
SCOTT       TBL1_IDX    N

SQL>



Другой вопрос зачем?

SY.
...
Рейтинг: 0 / 0
DDL триггер
    #40134029
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 SY

Браво, пойдёт!!!

SY

Другой вопрос зачем?

SY.


автор"коробочная" система а-ля 1С на СУБД Oracle, MSSQL, Informix итп с "индусским кодом", в ней есть такое безобразие как перегрузить таблицу (причём местные программёры её часто используют, нафига мне не понятно), фактически табличка выгружается в файл, убивается drop table со всеми атрибутами, а затем создаётся из своих метаданных, причем например индексы могут создаваться только как create index idx on table (f1, f2...) создать индекс DECODE(f1) уже не может,
...
Рейтинг: 0 / 0
DDL триггер
    #40134033
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут вижу только одну проблему, если в коде CREATE TABLE и дальше сразу бизнес-код (INSERT/SELECT'ы), то вполне возможно, что в каких-то случаях пауза (ассинхронность) между CREATE TABLE и CREATE INDEX может оказаться критической.

Как рабочий вариант, решение кривое. Как костыль и заплатка - ну а куда деваться )))

IMHO

p.s.
в новый год переписывал код конкарента от OeBS, вроде 3-и года работало, а сейчас столкнулись, что когда запуск конкарента совпал со сбором статистики, все сломалось колом (и почти неделю не работало, пока админы что-то на проде не подшаманили). В результате конкарент переписали.
...
Рейтинг: 0 / 0
DDL триггер
    #40134042
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
Тут вижу только одну проблему, если в коде CREATE TABLE и дальше сразу бизнес-код (INSERT/SELECT'ы), то вполне возможно, что в каких-то случаях пауза (ассинхронность) между CREATE TABLE и CREATE INDEX может оказаться критической.


ТС всегда может добавить DBMS_LOCK.SLEEP после DBMS_SCHEDULER.CREATE_JOB.

SY.
...
Рейтинг: 0 / 0
DDL триггер
    #40134053
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.
...
Рейтинг: 0 / 0
DDL триггер
    #40134054
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вообще, это задача и проблема фирмы разработчика прикладного софта. Разумеется, в том случае, если поддержка и сопровождении оплачены. Задача админа скорее диагностировать проблему и профессионально-технически объяснить ее фирме разработчику.

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

IMHO
...
Рейтинг: 0 / 0
DDL триггер
    #40134187
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё вопрос по ходу дела.

Если в DDL триггере использовать DBMS_SCHEDULER.CREATE_JOB, то имени кого/какого юзера JOB будет выполняться?? (как это посмотреть??)

Убрал права

Код: plsql
1.
2.
3.
grant create any index to MYUSER;
-- была некоторая неоднозначность :)
revoke create any index from MYUSER



НО индекс всё равно создаётся...
...
Рейтинг: 0 / 0
DDL триггер
    #40134292
serpv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PaulWist,
"create any index" для создания в своей схеме не нужна.
...
Рейтинг: 0 / 0
DDL триггер
    #40134433
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
serpv

"create any index" для создания в своей схеме не нужна.


Понял.

Остался вопрос от имени/правами кого запускается DBMS_SCHEDULER.CREATE_JOB - владельца схемы с триггером, юзера исполняющего команду DDL или кого-то другого?
...
Рейтинг: 0 / 0
DDL триггер
    #40134440
Asmodeus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PaulWist
serpv

"create any index" для создания в своей схеме не нужна.


Понял.

Остался вопрос от имени/правами кого запускается DBMS_SCHEDULER.CREATE_JOB - владельца схемы с триггером, юзера исполняющего команду DDL или кого-то другого?

Код: plsql
1.
2.
3.
select OWNER,JOB_NAME,JOB_CREATOR
  from dba_scheduler_jobs
 where job_name='<your job name here>';


И
https://docs.oracle.com/cd/B28359_01/server.111/b28310/scheduse002.htm#CHDEAHCA You can create a job in another schema by specifying schema.job_name. The creator of a job is, therefore, not necessarily the job owner. The job owner is the user in whose schema the job is created. Jobs are executed with the privileges of the schema in which the job is created.
...
Рейтинг: 0 / 0
DDL триггер
    #40134465
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Asmodeus

https://docs.oracle.com/cd/B28359_01/server.111/b28310/scheduse002.htm#CHDEAHCA You can create a job in another schema by specifying schema.job_name. The creator of a job is, therefore, not necessarily the job owner. The job owner is the user in whose schema the job is created. Jobs are executed with the privileges of the schema in which the job is created.


Отлично, спасибо.

Продолжаю.

Из под System (у которого grant create any trigger to system/MYUSER) пытаюсь создать DDL триггер в схеме MYUSER

Код: plsql
1.
2.
3.
4.
CREATE OR REPLACE
  TRIGGER MYUSER.MYUSER_CREATE_TABLE_INDEX_TRG
    AFTER CREATE
    ON DATABASE



получаю ошибку:
авторORA-01031: привилегий недостаточно
01031. 00000 - "insufficient privileges"

каких прав не хватает system или есть ограничение на создание ON DATABASE в юзеровских схемах??
...
Рейтинг: 0 / 0
DDL триггер
    #40134470
Asmodeus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PaulWist

Из под System (у которого grant create any trigger to system/MYUSER) пытаюсь создать DDL триггер в схеме MYUSER

Код: plsql
1.
2.
3.
4.
CREATE OR REPLACE
  TRIGGER MYUSER.MYUSER_CREATE_TABLE_INDEX_TRG
    AFTER CREATE
    ON DATABASE



получаю ошибку:
авторORA-01031: привилегий недостаточно
01031. 00000 - "insufficient privileges"


каких прав не хватает system или есть ограничение на создание ON DATABASE в юзеровских схемах??
https://docs.oracle.com/cd/E18283_01/server.112/e17118/statements_7004.htm In addition to the preceding privileges, to create a trigger on DATABASE, you must have the ADMINISTER DATABASE TRIGGER system privilege.
Данная привилегия должна быть не только у создателя триггера, но и у (будущего) владельца.
...
Рейтинг: 0 / 0
DDL триггер
    #40134478
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Asmodeus
PaulWist

Из под System (у которого grant create any trigger to system/MYUSER) пытаюсь создать DDL триггер в схеме MYUSER

Код: plsql
1.
2.
3.
4.
CREATE OR REPLACE
  TRIGGER MYUSER.MYUSER_CREATE_TABLE_INDEX_TRG
    AFTER CREATE
    ON DATABASE



получаю ошибку:
пропущено...


каких прав не хватает system или есть ограничение на создание ON DATABASE в юзеровских схемах??

https://docs.oracle.com/cd/E18283_01/server.112/e17118/statements_7004.htm In addition to the preceding privileges, to create a trigger on DATABASE, you must have the ADMINISTER DATABASE TRIGGER system privilege.

Данная привилегия должна быть не только у создателя триггера, но и у (будущего) владельца.

ОК, догадывался, но найти в доке не смог.

С меня пиво!!!
...
Рейтинг: 0 / 0
DDL триггер
    #40134706
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Продолжу здесь.

Вопрос: как определить/выбрать используемые индексы в запросах и соотвественно, найти те индексы, которые не используются??
...
Рейтинг: 0 / 0
DDL триггер
    #40134708
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смотреть планы запросов.
...
Рейтинг: 0 / 0
DDL триггер
    #40134711
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmdmdm
Смотреть планы запросов.


Ммм, вы предлагаете парсить сотни текстов планов, что бы вынуть индексы или же есть другие средства для поиска содержащие статистику использования индексов??

PS Хочу узнать какие индексы используются, а какие висят "мёртвым" грузом и напрягают сервер.
...
Рейтинг: 0 / 0
DDL триггер
    #40134715
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaulWist
есть другие средства для поиска содержащие статистику использования индексов??


Есть. Проявлю уважение к вашему интеллекту и не буду подсказывать слова для поиска.

PaulWist
Хочу узнать какие индексы используются, а какие висят "мёртвым" грузом и напрягают сервер.


Для начала лучше понять, стоит ли игра свеч.

Код: plsql
1.
2.
3.
4.
select segment_name, segment_type, round(sum(bytes)/1024/1024/1024, 2) GB
  from dba_segments
 group by segment_name, segment_type
 order by 3 desc;
...
Рейтинг: 0 / 0
DDL триггер
    #40134718
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmdmdm

Для начала лучше понять, стоит ли игра свеч.




Код: plsql
1.
2.
select count(1) 
  from dba_segments where segment_type = 'INDEX'



автор126118

Как по вашему, стоит игра или нет??
...
Рейтинг: 0 / 0
DDL триггер
    #40134721
Asmodeus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PaulWist
Продолжу здесь.

Вопрос: как определить/выбрать используемые индексы в запросах и соотвественно, найти те индексы, которые не используются??

Технически - MONITORING USAGE для версий до 12.2 или включенный по умолчанию с версии 12.2 Index Usage Tracking DBA_INDEX_USAGE .

Практически все равно приходится общаться с разработчиками и вдумчиво анализировать запросы.
...
Рейтинг: 0 / 0
DDL триггер
    #40134728
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Asmodeus

Технически - MONITORING USAGE для версий до 12.2 или включенный по умолчанию с версии 12.2 Index Usage Tracking DBA_INDEX_USAGE .

Практически все равно приходится общаться с разработчиками и вдумчиво анализировать запросы.


Спасибо за ссылку.

Я подозревал, что всё плохо, но что так хе..во не ожидал

Код: plsql
1.
2.
3.
select count(1) from DBA_INDEX_USAGE
--
-- 2391 из 126118



О чём после этого говорить с программёрами
...
Рейтинг: 0 / 0
DDL триггер
    #40134736
Asmodeus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PaulWist,

А таблиц в пользовательских схемах сколько?
...
Рейтинг: 0 / 0
DDL триггер
    #40134742
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Asmodeus
PaulWist,

А таблиц в пользовательских схемах сколько?


Не поверите - 64506

Причём PK/FK нет как "класса".

Вот уж эти новомодные "течения" в программировании.
...
Рейтинг: 0 / 0
DDL триггер
    #40134743
Asmodeus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PaulWist
Asmodeus
PaulWist,

А таблиц в пользовательских схемах сколько?


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

Опять же. Если я правильно понимаю, речь у нас идет о неком коробочном продукте с широкой функциональностью. Вполне возможно, что часть функций продукта просто не используется в вашей организации, соответственно, статистики использования объектов будут сильно искажены. Можно ради интереса посмотреть (если это 1С), сколько пустых таблицы у пользователей. У меня в одной из систем таких было больше половины. Но 1Сник сказал, что это нормально, т.к. система покупалась "на вырост" и большинство модулей пока не задействованы.

Еще вариант: оракл, работая с небольшими таблицами (а в 1С их масса - нормализация и универсализация под разные движки), вполне может отдавать предпочтения полному просмотру таблиц вместо доступа через индексы. Таблица подрастает - индекс становится более актуальным.

В любом случае, не стоит делать поспешных выводов и размахивать шашкой.
...
Рейтинг: 0 / 0
DDL триггер
    #40134752
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Asmodeus
В среднем по два индекса на таблицу (один из которых, скорее всего, первичный ключ) - не так много, чтобы говорить о значительных накладных расходах.



Это не 1С, но по архитектуре очень похоже.

PK/FK - нет, от слова совсем.

Система эксплуатируется уже 10 лет, я так понимаю, почти все таблицы, которые могли увеличиться уже подросли.

Asmodeus

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


Вообщем ДА, ... будем наблюдать.

Спасибо за тред.
...
Рейтинг: 0 / 0
41 сообщений из 41, показаны все 2 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / DDL триггер
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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