Oracle ON LOGON触发器如何影响性能



我已经为登录事件创建了触发器,如下所示:

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版本19c。

如果可以的话,有一些反对意见。

使用Oracle时去掉双引号,即没有"log_users_session",而是log_users_session。在Oracle中,所有内容(默认情况下(都以大写形式存储在数据字典中,但您可以按任何方式引用它。对于双引号,您必须始终使用该字母大小写和双引号来引用它。

这会影响列名:"date"。当您删除双引号时,您会得到date,这是一个无效的名称,因为date是为Oracle数据类型保留的;所以,使用log_date或类似的东西。

关于您的问题:您决定只记录SomeUser,因此,如果该用户没有建立无数连接,我预计不会产生重大影响。不过,如果它是一个大型报告数据库,并且所有用户(读作:人员(在连接/建立新会话时使用相同的凭据,则可能。另一方面,这种设置的目的是什么?在整个监控过程中,同一用户会得到大量连接。

基本上,这取决于你做什么以及如何做。如果你尝试一下并看看它的表现,它不会花很多钱。如果它影响性能,请不要再使用它。

基于并发连接,性能打击范围从非常小到非常高。命中率与并发连接的数量成线性比例,即连接越多表示命中率越高,连接越少表示命中率较低。最好根据在给定时间连接到系统的用户的平均数量来做出决定。我已经为一个有大约200个连接的300GB数据库实现了这一点,它没有太大影响。

此外,应将users_logon_log表考虑在内,以进行定期维护/清理,避免其过大并占用大量磁盘空间。

如果您只需要记录与数据库的连接,我只需使用数据库审计功能:https://docs.oracle.com/en/database/oracle/oracle-database/19/dbseg/introduction-to-auditing.html#GUID-F901756D-F747-489C-ACDE-9DBFDD388D3E

最新更新