JDBC自动查询变得非常慢

Nun*_*ano 5 java sql oracle jdbc database-metadata

我正在维护一个通过JDBC创建Oracle DB的应用程序.从今天开始这个查询:

SELECT  NULL                                                   AS pktable_cat  ,
        p.owner                                                AS pktable_schem,
        p.table_name                                           AS pktable_name ,
        pc.column_name                                         AS pkcolumn_name,
        NULL                                                   AS fktable_cat  ,
        f.owner                                                AS fktable_schem,
        f.table_name                                           AS fktable_name ,
        fc.column_name                                         AS fkcolumn_name,
        fc.position                                            AS key_seq      ,
        NULL                                                   AS update_rule  ,
        DECODE (f.delete_rule, 'CASCADE', 0, 'SET NULL', 2, 1) AS delete_rule  ,
        f.constraint_name                                      AS fk_name      ,
        p.constraint_name                                      AS pk_name      ,
        DECODE(f.deferrable, 'DEFERRABLE',5 ,'NOT DEFERRABLE',7 , 'DEFERRED', 6 ) deferrability
FROM    all_cons_columns pc,
        all_constraints p  ,
        all_cons_columns fc,
        all_constraints f
WHERE   1                      = 1
        AND p.table_name       = :1
        AND p.owner            = :3
        AND f.constraint_type  = 'R'
        AND p.owner            = f.r_owner
        AND p.constraint_name  = f.r_constraint_name
        AND p.constraint_type  = 'P'
        AND pc.owner           = p.owner
        AND pc.constraint_name = p.constraint_name
        AND pc.table_name      = p.table_name
        AND fc.owner           = f.owner
        AND fc.constraint_name = f.constraint_name
        AND fc.table_name      = f.table_name
        AND fc.position        = pc.position
ORDER BY fktable_schem,
        fktable_name  ,
        key_seq
Run Code Online (Sandbox Code Playgroud)

由于某些oracle内部构件开始变得非常慢,因为它似乎对我所有的分支都是一样的.

有人知道一个可能的原因以及如何面对这个问题吗?

此致,Nunzio

Jon*_*ler 8

数据字典或固定对象统计信息可能很旧,请尝试重新收集它们:

exec dbms_stats.gather_dictionary_stats;
exec dbms_stats.gather_fixed_objects_stats;
alter system flush shared_pool;
Run Code Online (Sandbox Code Playgroud)

即使这样也不一定会收集所有系统对象的统计信息.X$KFTBUE必须手动收集某些对象.虽然这是一个罕见的数据字典问题,可能与此无关.

如果这不起作用,则下一步可能的步骤是查看SQL Tuning Advisor等工具来创建配置文件,或使用SQL计划管理强制优化器使用以前工作过的特定计划.调整数据字典查询可能非常困难,因为您没有太多控制权.