我需要收集应用程序处理任何订单时应用程序使用的所有SQL查询(SELECT,UPDATE,DELETE,INSERT)。跟踪应用程序触发命令时执行的所有SQL查询
如果我可以通过应用程序处理至少50个订单来获取所有SQL,那么我可以在查找这些信息后检查哪些SELECT,UPDATE,DELETE语句经常使用以及应用程序经常使用哪些表。
我可以得出结论,在哪个表上我可以使用分区,就像我用WHERE子句获得整个SQL一样,我也可以知道哪种类型的分区对于任何特定的表和分区都会更好。
但是,它似乎是一个繁忙的练习,因为可能有很多SQL应用程序使用它,但它有助于我理解应用程序,并且在此练习之后,我将对数据库的应用程序行为进行审查报告被后面的员工使用。
对于这直到现在我已经使用DBMS_adivsor包,它给了我的数据库的一些表进行分区,当我检查我在DBMS_ADVISOR中使用的SQL的EXPLAIN PLAN,然后它发生在我正在EXPLAIN PLAN中的全表扫描DBMS_ADVISOR告诉我对它们进行分区。
问题是我不能根据这些信息对表进行分区,因为它是一个应用程序级别的分区,而且我的经理也不会被这些小信息所证实。所以我想出了上面的计划:(
我需要这样做来找出我可以执行表分区和其他性能调整的东西,如创建索引的表,因为我可以得到where子句与过滤器,所以它像数据库调优,我想这样做,因为这将帮助我成长我的职业生涯中的数据库开发。
请帮我出了这种情况。
将这个查询给我所需要的信息!
select st.command
from V$SQLTEXT_WITH_NEWLINES st, SYS.V_$SQL s
where st.hash_value = s.hash_value
and parsing_schema_name = 'NETSERVICOS2CM'
and s.module = 'JDBC THIN CLIENT';
跟踪非DBA用户的----
GRANT SELECT ON SYS.V_$SESSION TO USER;
GRANT SELECT ON SYS.V_$MYSTAT TO USER;
要获得SID和SERAIL#
SELECT sid, serial# FROM SYS.V_$SESSION
WHERE SID = (SELECT DISTINCT SID FROM SYS.V_$MYSTAT);
然后在DBA用户执行这个 -
EXEC DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION (sid=>3002, serial#=>31833,sql_trace=> true);
或
上没有DBA用户,我使用 -
ALTER SESSION SET SQL_TRACE = TRUE;
OR
EXEC DBMS_SESSION.set_sql_trace(sql_trace => TRUE);
触发跟踪会话特定用户----
CREATE OR REPLACE TRIGGER ON_MY_SCHEMA_LOGIN
AFTER LOGON ON DATABASE
WHEN (USER = 'NETSERVICOS1CM')
BEGIN
EXECUTE IMMEDIATE 'ALTER SESSION SET TRACEFILE_IDENTIFIER = "net1cm"';
EXECUTE IMMEDIATE 'alter session set statistics_level=ALL';
EXECUTE IMMEDIATE 'alter session set events ''10046 trace name context forever, level 12''';
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
之后停止我正在使用的跟踪
ALTER SESSION SET EVENTS '10046 trace name context off';
ALTER SYSTEM SET EVENTS '10046 trace name context off';
正如Derek所建议的那样。
此之后,你可能有多个跟踪文件做出巩固跟踪文件,我们可以使用TRCSESS工具 -
trcsess output=net1cm_trcsess.trc module="JDBC Thin Client" *net1cm.trc
这将创建在我的情况下产生的所有跟踪文件,一个跟踪文件net1cm_trcsess.trc (带有跟踪文件标识符net1cm)。
现在我们可以使用TKPROF工具来生成报告,这是在使用下面的示例命令人类可读的形式---
tkprof net1cm_trcsess.trc OUTPUT=net1cm_trcsess.txt EXPLAIN=netservicos1cm/netservicos1 SYS=NO
感谢
您可以使用SQL Profiler – HaveNoDisplayName