Как Oracle ON LOGON триггер влияет на производительность? - PullRequest
0 голосов
/ 28 апреля 2020

Я создал триггер для события входа в систему, как показано ниже:

CREATE OR REPLACE TRIGGER "log_users_session"
AFTER LOGON ON DATABASE
WHEN USER = 'SomeUser'
BEGIN
   INSERT INTO "users_logon_log" ("username","date") VALUES ("Some user",sysdate)
END;

Это большая база данных отчетов. Я хочу знать, действительно ли это замедляет работу базы данных или имеет побочные эффекты?

Моя Oracle версия 19 c.

Ответы [ 3 ]

2 голосов
/ 28 апреля 2020

Несколько возражений, если можно.

Избавьтесь от двойных кавычек при работе с Oracle, то есть не "log_users_session", а log_users_session. В Oracle все (по умолчанию) хранится в словаре данных в верхнем регистре, но вы можете ссылаться на него любым удобным вам способом. С двойными кавычками, вы ДОЛЖНЫ ссылаться на него, используя именно тот регистр букв вместе с двойными кавычками, всегда.

Это влияет на имя столбца: "date". При удалении двойных кавычек вы получите date, и это недопустимое имя, поскольку date зарезервировано для Oracle datatype; Итак, используйте log_date или что-то в этом роде.

По вашему вопросу: вы решили войти только SomeUser, так что - если этот пользователь не установит sh zillion соединений, я бы не ожидал значительного влияния. Хотя, если это большая база данных отчетов, и все пользователи (читай: люди) используют одинаковые учетные данные при подключении / создании нового сеанса, тогда может . С другой стороны, какова цель такой настройки? Вы получите большое количество подключений для одного и того же пользователя за все время, пока вы это контролируете.

По сути, все зависит от того, что вы делаете и как. Это не будет стоить дорого, если вы попробуете и посмотрите, как оно себя ведет. Если это влияет на производительность, не используйте его больше.

1 голос
/ 29 апреля 2020

Если вам нужно только записать подключения к базе данных, я бы просто использовал функции аудита базы данных: https://docs.oracle.com/en/database/oracle/oracle-database/19/dbseg/introduction-to-auditing.html#GUID -F901756D-F747-489 C -ACDE-9DBFDD388D3E

1 голос
/ 28 апреля 2020

В зависимости от количества одновременных подключений произойдет снижение производительности от минимального до значительного. Хит линейно пропорционален нету. одновременных соединений, т. е. чем больше соединений, тем больше попаданий, чем меньше соединений, тем меньше попаданий. Было бы идеально принять решение в зависимости от среднего номера. пользователей, которые подключаются к системе в данный момент времени. Я реализовал это для базы данных объемом 300 ГБ с ~ 200 подключениями, это не оказало большого влияния.

Кроме того, таблица users_logon_log должна учитываться при регулярном обслуживании / очистке от слишком больших размеров и занимаемых данных. значительное дисковое пространство.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...