eygle.com   eygle.com
eygle.com eygle
eygle.com  
 

« 《Oracle DBA手记》第二部启动募集中 | Blog首页 | 2010 数据库技术大会 即将揭幕 »

Java的DatabaseMetaData getPrimaryKeys调用

最近,我们在客户的数据库中发现了如下一个Top SQL,其逻辑读占据第一位:
                                                     CPU      Elapsd
  Buffer Gets    Executions  Gets per Exec  %Total Time (s)  Time (s) Hash Value
--------------- ------------ -------------- ------ -------- --------- ----------
  1,870,588,542      104,176       17,956.0   29.1 ########  12116.51  958390712
Module: JDBC Thin Client
SELECT NULL AS table_cat,        c.owner AS table_schem,
c.table_name,        c.column_name,        c.position AS key_seq
,        c.constraint_name AS pk_name FROM all_cons_columns c, a
ll_constraints k WHERE k.constraint_type = 'P'   AND k.table_nam
e = :1   AND k.owner like :2 escape '/'   AND k.constraint_name
= c.constraint_name    AND k.table_name = c.table_name    AND k.
owner = c.owner  ORDER BY column_name

格式化一下,这个SQL的作用是什么呢?
SELECT   NULL AS table_cat, c.owner AS table_schem, c.table_name,
         c.column_name, c.POSITION AS key_seq, c.constraint_name AS pk_name
    FROM all_cons_columns c, all_constraints k
   WHERE k.constraint_type = 'P'
     AND k.table_name = :1
     AND k.owner LIKE :2 ESCAPE '/'
     AND k.constraint_name = c.constraint_name
     AND k.table_name = c.table_name
     AND k.owner = c.owner
ORDER BY column_name

通过 Google 找到了这样一个答案
当JAVA程序中通过DatabaseMetaData#getPrimaryKeys()调用,将会执行这个SQL,如果不及时关闭,则还可能产生严重的内存占用。

那么怎样规避这个调用,考察这个调用是否必要显得非常重要,这个SQL导致的逻辑度太过显著。

对Top SQL保持敏感是DBA的重要守则。
记录以备忘。

-The End-




历史上的今天...
    >> 2012-03-26文章:
           关于Oracle数据库的夏令时
    >> 2007-03-26文章:
           生命的律动
    >> 2006-03-26文章:

无觅

By eygle on 2010-03-26 21:06 | Comments (2) | Case | 2521 |

2 Comments

数据库/ 文件。 一定要 关闭......

我也碰到这个问题,是hibernate产生的。hibernate这个版本默认打开了这个功能。


CopyRight © 2004~2020 云和恩墨,成就未来!, All rights reserved.
数据恢复·紧急救援·性能优化 云和恩墨 24x7 热线电话:400-600-8755 业务咨询:010-59007017-7040 or 7037 业务合作: marketing@enmotech.com