Медленная загрузка стола - PullRequest
1 голос
/ 24 октября 2019

После того, как я удалил Oracle 11g и установил Oracle 12c, у меня возникла проблема с загрузкой таблицы в левом древовидном меню в SQL Developer. Раньше я занимал не более одной секунды, а теперь это занимает несколько минут. У вас есть идеи, где может быть проблема?

Единственное, что я обнаружил, это то, что проблема, вероятно, в этом запросе

select * from (
  SELECT o.OBJECT_NAME, o.OBJECT_ID ,'' short_name, decode(bitand(t.property, 32), 32, 'YES', 'NO') partitioned,
                decode(bitand(t.property, 64), 64, 'IOT',
               decode(bitand(t.property, 512), 512, 'IOT_OVERFLOW',
               decode(bitand(t.flags, 536870912), 536870912, 'IOT_MAPPING', null))) iot_type, 
         o.OWNER OBJECT_OWNER, o.CREATED, o.LAST_DDL_TIME, O.GENERATED, O.TEMPORARY, case when xt.obj# is null then 'N' else 'Y' end EXTERNAL
    FROM SYS.Dba_OBJECTS O ,sys.tab$ t, sys.external_tab$ xt
    WHERE O.OWNER = :SCHEMA
    and   o.object_id = t.obj#(+)
    and   o.object_id = xt.obj#(+)
    AND O.OBJECT_TYPE = 'TABLE' 
union all
SELECT OBJECT_NAME, OBJECT_ID , syn.SYNONYM_NAME short_NAME, decode(bitand(t.property, 32), 32, 'YES', 'NO') partitioned,
                decode(bitand(t.property, 64), 64, 'IOT',
               decode(bitand(t.property, 512), 512, 'IOT_OVERFLOW',
               decode(bitand(t.flags, 536870912), 536870912, 'IOT_MAPPING', null))) iot_type, 
       SYN.TABLE_OWNER OBJECT_OWNER, o.CREATED, o.LAST_DDL_TIME, O.GENERATED, O.TEMPORARY, case when xt.obj# is null then 'N' else 'Y' end EXTERNAL
              FROM SYS.Dba_OBJECTS O, sys.user_synonyms syn,sys.tab$ t, sys.external_tab$ xt
              WHERE  syn.table_owner = o.owner
              and    syn.TABLE_NAME = o.object_NAME
              and    o.object_id = t.obj#
              and   o.object_id = xt.obj#(+)
              and    o.object_type = 'TABLE'
              and    :INCLUDE_SYNS = 1
)
 WHERE /**/OBJECT_NAME NOT IN (SELECT OBJECT_NAME FROM RECYCLEBIN)
                         AND not object_name like 'BIN$%'

Спасибо за любые идеи.

Ответы [ 2 ]

1 голос
/ 24 октября 2019

Спасибо за ваши ответы. Я выяснил это с помощью очистки корзины. Загрузка таблиц была медленной из-за этой части инструкции

WHERE / ** / OBJECT_NAME NOT IN (SELECT OBJECT_NAME FROM RECYCLEBIN), а не имя_объекта, как 'BIN $%'

0 голосов
/ 24 октября 2019

Использование NOT EXISTS в большинстве случаев лучше, чем NOT IN с точки зрения производительности. Вы можете попробовать следующий запрос, составленный из современного синтаксиса с условием

WHERE NOT EXISTS ( SELECT 1 
                     FROM RECYCLEBIN 
                    WHERE OBJECT_NAME = oo.OBJECT_NAME 
                       OR OBJECT_NAME LIKE 'BIN$%' )

, взятым в один подзапрос:

SELECT *
  FROM (SELECT o.OBJECT_NAME,
               o.OBJECT_ID,
               '' short_name,
               decode(bitand(t.property, 32), 32, 'YES', 'NO') partitioned,
               decode(bitand(t.property, 64),
                      64,
                      'IOT',
                      decode(bitand(t.property, 512),
                             512,
                             'IOT_OVERFLOW',
                             decode(bitand(t.flags, 536870912),
                                    536870912,
                                    'IOT_MAPPING',
                                    null))) iot_type,
               o.OWNER OBJECT_OWNER,
               o.CREATED,
               o.LAST_DDL_TIME,
               O.GENERATED,
               O.TEMPORARY,
               case
                 when xt.obj# is null then
                  'N'
                 else
                  'Y'
               end EXTERNAL
          FROM SYS.DBA_OBJECTS O
          LEFT JOIN sys.tab$ t ON o.object_id = t.obj#
          LEFT JOIN sys.external_tab$ xt ON o.object_id = xt.obj#
         WHERE O.OWNER = :SCHEMA
           AND O.OBJECT_TYPE = 'TABLE'       
        UNION ALL
        SELECT OBJECT_NAME,
               OBJECT_ID,
               syn.SYNONYM_NAME short_NAME,
               decode(bitand(t.property, 32), 32, 'YES', 'NO') partitioned,
               decode(bitand(t.property, 64),
                      64,
                      'IOT',
                      decode(bitand(t.property, 512),
                             512,
                             'IOT_OVERFLOW',
                             decode(bitand(t.flags, 536870912),
                                    536870912,
                                    'IOT_MAPPING',
                                    null))) iot_type,
               SYN.TABLE_OWNER OBJECT_OWNER,
               o.CREATED,
               o.LAST_DDL_TIME,
               O.GENERATED,
               O.TEMPORARY,
               case
                 when xt.obj# is null then
                  'N'
                 else
                  'Y'
               end EXTERNAL
          FROM SYS.DBA_OBJECTS O
          JOIN sys.user_synonyms syn ON syn.TABLE_NAME = o.object_NAME
          JOIN sys.tab$ t ON o.object_id = t.obj#       
          LEFT JOIN sys.external_tab$ xt ON o.object_id = xt.obj# 
         WHERE syn.table_owner = o.owner 
           AND o.object_type = 'TABLE'
           AND :INCLUDE_SYNS = 1 
           ) oo
 WHERE NOT EXISTS ( SELECT 1 FROM RECYCLEBIN WHERE OBJECT_NAME = oo.OBJECT_NAME OR OBJECT_NAME LIKE 'BIN$%' );
...