当前位置: 首页 > 面试题库 >

JDBC自动查询变得非常慢

谢泽语
2023-03-14
问题内容

我正在维护一个通过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

由于某些oracle内部机制,开始变得非常缓慢,因为我的所有分支似乎都一样。

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

问候,努齐奥


问题答案:

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

exec dbms_stats.gather_dictionary_stats;
exec dbms_stats.gather_fixed_objects_stats;
alter system flush shared_pool;

即使这样,也不一定能收集 所有
系统对象的统计信息。有些对象(例如X$KFTBUE)必须手动收集。尽管这是一个罕见的数据字典问题,但在这里可能并不重要。

如果这不起作用,则接下来可能要采取的一些步骤是在寻找诸如SQL Tuning
Advisor之类的工具来创建配置文件,或者使用SQL计划管理来强制优化器使用以前曾使用过的特定计划。调整数据字典查询可能非常困难,因为您没有太多控制权。



 类似资料:
  • 问题内容: 我们正在为一个奇怪的问题而苦苦挣扎:当原始SQL执行得相当快时,存储过程将变得极其缓慢。 我们有 SQL Server 2008 R2 Express Edition SP1 10.50.2500.0,上面有多个数据库。 一个数据库(大小约为747Mb) 一个存储过程,该过程采用不同的参数,并且确实从数据库中的多个表中进行选择。 代码: 该存储过程运行得非常好且速度很快(它的执行通常需

  • null 如果我从存储过程中获取原始SQL查询--它将在1-2秒内执行。 我们已经尝试: > 使用参数创建存储过程 null

  • 问题内容: 这不起作用。任何提示或技巧都将不胜感激。 问题答案: 您需要准备好的声明,请查看本教程。

  • 我正在对一个小表执行一个简单的查询 系统表只有三列(Id、Name、Progress)和1300行。 我获取数据的代码是: 这段代码在JTable中显示日期大约需要15秒,而如果在phpmyadmin中执行查询,则需要不到1秒。

  • 不知道为什么,模拟器无论切换界面还是动画都变得很慢,但是输入,很正常,没有慢。 尝试-1 我重新启动Xcode和模拟器,但没有任何效果。

  • 问题内容: 我有一张表,其中有一列,有330万个条目。我想遍历表,每200个条目执行一次操作。我有以下代码: 最初,此方法运行良好(生成tmp表的时间约为0.15秒),但偶尔会变慢,例如,大约有30万张票,它开始花费11-12秒的时间来生成此tmp表,然后大约有40万张。基本上看来是不可靠的。 我将在其他查询中使用这些ID,因此我认为在tmp表中放置ID的最佳位置。有没有更好的方法来遍历这样的结果