【问题标题】:Strange SQL wasting my resources奇怪的 SQL 浪费了我的资源
【发布时间】:2012-08-09 17:00:28
【问题描述】:

我的 11.2.0.3 数据库遇到问题,一个奇怪的查询占总数据库活动的 47.42%。

该应用使用 Flex 开发,前端是 Apache Tomcat 6.0.35,Java 版本为 1.6.0_27。

我在几个网站上搜索过,发现其他人有同样的问题,即使是在这个网站上 (Mysterious SQL blocking my stored procedure from executing on ORACLE),但到目前为止还没有找到解决方案:-(

查询是:

     SELECT package_name AS procedure_cat,
            owner AS procedure_schem,
            object_name AS procedure_name,
            argument_name AS column_name,
            DECODE(position,
                     0, 5,
                        DECODE(in_out,
                                 'IN',     1,
                                 'OUT',    4,
                                 'IN/OUT', 2,
                                           0)) AS column_type,
            DECODE (data_type,
                      'CHAR', 1,
                      'VARCHAR2', 12,
                      'NUMBER', 3,
                      'LONG', -1,
                      'DATE', 91,
                      'RAW', -3,
                      'LONG RAW', -4,
                      'TIMESTAMP', 93,
                      'TIMESTAMP WITH TIME ZONE', -101,
                      'TIMESTAMP WITH LOCAL TIME ZONE', -102,
                      'INTERVAL YEAR TO MONTH', -103,
                      'INTERVAL DAY TO SECOND', -104,
                      'BINARY_FLOAT', 100,
                      'BINARY_DOUBLE', 101,
                                       1111) AS data_type,
            DECODE(data_type,
                     'OBJECT', type_owner || '.' || type_name,
                               data_type) AS type_name,
            DECODE (data_precision,
                      NULL, data_length,
                            data_precision) AS precision,
            data_length AS length,
            data_scale AS scale,
            10 AS radix,
            1 AS nullable,
            NULL AS remarks,
            sequence,
            overload,
            default_value
  FROM all_arguments
  WHERE owner LIKE :1 ESCAPE '/'
        AND object_name LIKE :2 ESCAPE '/'
        AND package_name IS NULL
        AND (argument_name LIKE :5 ESCAPE '/'
             OR (argument_name IS NULL
                 AND data_type IS NOT NULL))
  ORDER BY procedure_schem, procedure_name, overload, sequence

我想知道是否有人找到了解决方案?

【问题讨论】:

  • 您的 DBA 是否对系统表运行了统计信息?如果不是,这可能是导致此查询性能下降的原因。
  • 谁/什么在运行这个? (已知用户,SYS?)以及来自什么程序?首先从 DBA 获取会话信息
  • 感谢您的回答!统计数据到位。该查询正在为多个用户执行,但它不在我们的应用程序中,这是来自 java 本身的东西。我在 OracleDatabaseMetaData.java 组件中找到了这个查询。我需要找到的是为什么以及如何避免执行,或者至少减少执行次数。我发现每小时执行 1 亿次 :-( 似乎每次应用调用 SP 时都会执行
  • 顺便说一句,我是 DBA。我在每个 addm 报告中都找到了该查询。我在 oracle 支持网站上进行了搜索,但一无所获。我在几个论坛中发现了类似的问题,甚至在这个论坛和 oracle 论坛中,但没有找到解决方案或明确的答案:-(
  • 检查它使用 oracle.jdbc.OracleDatabaseMetaData 的应用程序代码是否有任何机会调用 getProcedureColumns(或 getProcedures)? (docs.oracle.com/cd/E16338_01/appdev.112/e13995/oracle/jdbc/…)

标签: java oracle tomcat odbc


【解决方案1】:

您的代码是否使用了 Spring 的 SimpleJdbcCall 类?此类尝试获取有关存储过程的信息并缓存结果。因此,请确保您将 SimpleJdbcCall 类实例化一次,并在每次调用存储过程时重用它。

或者,您可以在构造 SimpleJdbcCall 对象时调用 withoutProcedureColumnMetaDataAccess()。

【讨论】:

    猜你喜欢
    • 2016-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-03
    相关资源
    最近更新 更多