签到成功

知道了

CNDBA社区CNDBA社区

常用的查看对象信息的SQL

2018-05-23 09:19 1772 0 原创 Oracle 性能优化
作者: Expect-乐

从awr中根据快照编号、schema名称以及按照top sql的类别(elapsed_time,cpu_time,disk_reads,executions,buffer_gets)取出所有的被审核的sql语句

SELECT sql_id,
       plan_hash_value,
       parsing_schema_name
FROM table(dbms_sqltune.select_workload_repository(&beg_snap, &end_snap, 'parsing_schema_name=''&username''', NULL, '&parameter', NULL, NULL, NULL, NULL))

从dba_hist_sqlstat中,按照sql_id,plan_hash_value,快照点以及schema 名,取出某一条sql在执行时,使用cpu,buffer_gets等方面的情况。

SELECT t.sql_id,
       t.plan_hash_value,
       t.parsing_schema_name AS username,
       round(sum(t.cpu_time_total) / 1000000, 4) AS cpu_time_total,
       round(sum(t.cpu_time_delta) / 1000000, 4) AS cpu_time_delta,
       round(ceil((sum(cpu_time_delta) / decode(sum(executions_delta), 0, 1, sum(executions_delta)))) / 1000000, 4) per_cpu_time,
       sum(t.disk_reads_total) AS disk_reads_total,
       sum(t.disk_reads_delta) AS disk_reads_delta,
       ceil((sum(disk_reads_delta) / decode(sum(executions_delta), 0, 1, sum(executions_delta)))) per_disk_reads,
       sum(t.direct_writes_total) AS direct_writes_total,
       sum(t.direct_writes_delta) AS direct_writes_delta,
       ceil((sum(direct_writes_delta) / decode(sum(executions_delta), 0, 1, sum(executions_delta)))) per_direct_writes,
       round(sum(t.elapsed_time_total) / 1000000, 4) AS elapsed_time_total,
       round(sum(t.elapsed_time_delta) / 1000000, 4) AS elapsed_time_delta,
       round(ceil((sum(elapsed_time_delta) / decode(sum(executions_delta), 0, 1, sum(executions_delta)))) / 1000000, 4) per_elapsed_time,
       sum(t.buffer_gets_total) AS buffer_gets_total,
       sum(t.buffer_gets_delta) AS buffer_gets_delta,
       ceil((sum(buffer_gets_delta) / decode(sum(executions_delta), 0, 1, sum(executions_delta)))) per_buffer_gets,
       sum(t.rows_processed_delta) AS rows_processed_delta,
       sum(t.rows_processed_total) AS rows_processed_total,
       ceil((sum(rows_processed_delta) / decode(sum(executions_delta), 0, 1, sum(executions_delta)))) rows_processed_gets,
       sum(t.executions_total) AS executions_total,
       sum(t.executions_delta) AS executions_delta,
       round(sum(DISK_READS_DELTA) + sum(BUFFER_GETS_DELTA) / decode(sum(ROWS_PROCESSED_DELTA), 0, 1, sum(ROWS_PROCESSED_DELTA)), 3) AS per_row_blk
FROM dba_hist_sqlstat t
WHERE t.snap_id BETWEEN '&beg_snap' AND '&end_snap'
  AND t.parsing_schema_name = '&username'
  AND t.sql_id = '&sql_id'
  AND t.plan_hash_value = '&plan_hash_value'
GROUP BY sql_id,
         plan_hash_value,
         t.parsing_schema_name

从dba_hist_sql_plan中,按照sql_id,plan_hash_value,获取某一条sql语句的执行计划,并保存该执行计划的前799行。

SELECT p.sql_id,
       p.plan_hash_value,
       p.id,
       p.depth,
       p.parent_id,
       p.operation,
       lpad(' ', 2 * p.depth) || p.operation operation_display,
       p.options,
       p.object_node,
       p.object_owner,
       p.object_name,
       p.object_type,
       p.optimizer,
       p.search_columns,
       p.position,
       p.cost,
       p.cardinality,
       p.bytes,
       p.other_tag,
       p.partition_start,
       p.partition_stop,
       p.partition_id,
       p.other,
       p.distribution,
       p.cpu_cost,
       p.io_cost,
       to_char(t.FILTER_PREDICATES) AS FILTER_PREDICATES
FROM dba_hist_sql_plan p
LEFT JOIN
  (SELECT *
   FROM
     (SELECT sql_id,
             plan_hash_value,
             s.ID,
             FILTER_PREDICATES,
             rank() over(partition BY sql_id, plan_hash_value
                         ORDER BY s.TIMESTAMP,s.CHILD_NUMBER DESC) mm
      FROM gv$sql_plan s
      WHERE s.inst_id<>0
        AND s.SQL_ID = '&sql_id'
        AND s.PLAN_HASH_VALUE = '&h_value'
        AND s.id<=799 )
   WHERE mm = 1) t ON p.sql_id = t.sql_id
AND p.plan_hash_value = t.plan_hash_value
AND p.id=t.id
WHERE p.sql_id = '&sql_id'
  AND p.plan_hash_value = '&h_value'
  AND p.id<=799

从dba_hist_sqltext中,获取某条sql语句的文本,分别保存该sql语句文本的40和2000个字符。

SELECT p.dbid,
       p.sql_id,
       dbms_lob.substr(p.sql_text,40,1) sql_text,
       dbms_lob.substr(p.sql_text,2000,1) sql_text_detail
FROM dba_hist_sqltext p
WHERE p.sql_id = '&sql_id'

获取未使用绑定变量的sql语句的情况,并且FORCE_MATCHING_SIGNATURE和username字段作为获取相关未使用绑定变量的依据。

SELECT d.INST_ID,
       d.PARSING_SCHEMA_NAME AS username,
       to_char(FORCE_MATCHING_SIGNATURE),
       d.PLAN_HASH_VALUE,
       count(*)
FROM gv$sql d
WHERE FORCE_MATCHING_SIGNATURE > 0
  AND d.PARSING_SCHEMA_NAME NOT IN ('SYS',
                                    'SYSTEM')
  AND d.MODULE <> 'PL/SQL Developer'
  AND d.module <> 'DBMS_SCHEDULER'
  AND FORCE_MATCHING_SIGNATURE != EXACT_MATCHING_SIGNATURE
  AND d.PARSING_SCHEMA_NAME ='&username'
GROUP BY to_char(FORCE_MATCHING_SIGNATURE),
         d.PLAN_HASH_VALUE,
         d.PARSING_SCHEMA_NAME,
         d.INST_ID
HAVING count(*) > 100
ORDER BY d.INST_ID,
         count(*) DESC

根据快照点,获取两个快照点之间的某个schema下的sql语句的游标使用情况。

SELECT *
FROM
  (SELECT t.parsing_schema_name AS username,
          t.sql_id,
          t.plan_hash_value,
          t.version_count,
          row_number() over(partition BY t.sql_id
                            ORDER BY t.plan_hash_value DESC) rank
   FROM dba_hist_sqlstat t
   WHERE t.parsing_schema_name = '&username'
     AND (t.snap_id BETWEEN '&beg_snap' AND '&end_snap')) e
WHERE e.rank = 1

获取某个schema下的对象类型为index的基本信息,如:索引名称,索引类型,索引的高度,最后一次ddl的时间等信息。

select owner,
       index_name,
       decode(INDEX_TYPE,
              'NORMAL',
              'B-tree',
              decode(index_type,
                     'BITMAP',
                     'BitMap',
                     decode(table_type,
                            'IOT',
                            'IOT',
                            decode(index_type, 'LOB', 'LOB')))) idx_type,
       TABLE_OWNER,
       table_name,
       TABLE_TYPE,
       COMPRESSION,
       STATUS,
       BLEVEL,
       CLUSTERING_FACTOR,
       UNIQUENESS,
       DISTINCT_KEYS,
       LAST_ANALYZED,
       LAST_DDL_TIME
  from (select distinct t.INDEX_NAME,
                        t.OWNER,
                        t.index_type,
                        t.TABLE_OWNER,
                        t.TABLE_NAME,
                        decode(u.partitioned,
                               'YES',
                               'PART',
                               decode(u.temporary,
                                      'Y',
                                      'TEMP',
                                      decode(u.iot_type,
                                             'IOT',
                                             'IOT',
                                             'NORMAL'))) table_type,
                        t.COMPRESSION,
                        t.STATUS,
                        t.BLEVEL,
                        t.CLUSTERING_FACTOR,
                        t.DISTINCT_KEYS,
                        t.UNIQUENESS,
                        t.LAST_ANALYZED,
                        s.LAST_DDL_TIME
          from dba_indexes t, dba_objects s, dba_tables u
         where t.INDEX_NAME = s.OBJECT_NAME
           and u.table_name = t.table_name
           and s.owner = u.owner
           and t.OWNER = s.OWNER
           and s.object_type = 'INDEX'
           and t.owner = '{obj_owner}'
         order by t.index_name)

获取某个schema下的对象类型为index的基本信息,如:索引的物理大小。

    select u.owner,
       u.segment_name,
       sum(u.bytes) / 1024 / 1024 as idx_space
  from dba_segments u
 where u.segment_type like '%INDEX%'
   and u.owner = '{obj_owner}'
 group by u.owner, u.segment_name, u.segment_type
 order by u.owner, u.segment_name, u.segment_type

获取某个schema下的对象类型为index的基本信息,如:索引所在列的名称,列在索引中的位置(复合索引)等。

    select 
    INDEX_OWNER,     
    INDEX_NAME,     
    TABLE_OWNER,    
    TABLE_NAME,      
    COLUMN_NAME,     
    COLUMN_POSITION,   
    DESCEND   
    from  dba_ind_columns t
    where index_owner='{obj_owner}' and index_name not like '%BIN$%'
    order by t.INDEX_NAME,t.COLUMN_POSITION

获取某个schema下的对象类型为table的基本信息,如:表的名称,表的类型,最后一次ddl的时间等信息。

    select t.owner,
           t.table_name,
           decode(t.partitioned,
                  'YES',
                  'PART',
                  decode(t.temporary, 'Y', 'TEMP', decode (t.iot_type,'IOT','IOT','NORMAL'))) table_type,
           s.object_type,
           t.iot_name,
           t.NUM_ROWS,
           t.BLOCKS,
           t.AVG_ROW_LEN,
           t.LAST_ANALYZED,
           s.last_ddl_time,
           t.CHAIN_CNT,
           trunc(((t.AVG_ROW_LEN * t.NUM_ROWS) / 8) /
                 (decode(t.BLOCKS, 0, 1, t.BLOCKS)) * 100) as HWM_STAT,
           t.COMPRESSION
      from dba_tables t, dba_objects s
     where t.table_name = s.object_name
       and t.owner = s.owner
       and s.object_type = 'TABLE'
       and t.table_name not like '%BIN%'
       and t.owner = '{obj_owner}'

获取某个schema下的对象类型为table的基本信息,如:表的物理大小

    select segment_name, sum(bytes) / 1024 / 1024 as tab_space
    from dba_segments u
    where u.segment_type in ('TABLE','TABLE PARTITION','TABLE SUBPARTITION') 
    and u.owner = '{obj_owner}'
    and u.segment_name not like '%BIN%'
    group by u.owner, u.segment_name

获取某个schema下的对象类型为table的基本信息,如:表中列的数量。

    select s.table_name,count(s.COLUMN_NAME) as col_num
    from dba_tab_columns s, dba_objects t
    where s.owner = '{obj_owner}'
    and s.owner = t.owner
    and s.TABLE_NAME = t.object_NAME
    and t.object_type = 'TABLE'
    and s.table_name not like '%BIN%'
    group by s.OWNER, s.TABLE_NAME

获取某个schema下的对象类型为partition index的基本信息,如:索引名称,类型,所在列的名称等。

    select t.INDEX_NAME,
       t.OWNER,
       t.TABLE_NAME,   
       v.column_name,
       t.PARTITIONING_TYPE,
       t.SUBPARTITIONING_TYPE,
       t.PARTITION_COUNT,
       t.LOCALITY,
       t.ALIGNMENT
  from dba_part_indexes t, dba_part_key_columns v
 where t.index_name = v.name
   and t.owner = '{obj_owner}'

获取某个schema下的对象类型为partition index的基本信息,如:索引的物理大小。

    select segment_name, sum(t.bytes) / 1024 / 1024 as tab_space
    from dba_segments t
    where t.owner = '{obj_owner}'
    and t.partition_name is not null
    and t.segment_type in ('INDEX SUBPARTITION', 'INDEX PARTITION')
    group by segment_name

获取某个schema下的对象类型为partition index的基本信息,如:索引的名称,最后一次ddl的时间。

    select t.OWNER,
       t.INDEX_NAME,
       t.TABLE_NAME,
       u.partition_name,
       u.partition_position,       
       v.column_name,
       t.PARTITIONING_TYPE,
       t.SUBPARTITIONING_TYPE,
       t.PARTITION_COUNT,
       t.LOCALITY,
       t.ALIGNMENT,
       u.COMPRESSION,
       u.STATUS,
       u.BLEVEL,
       u.CLUSTERING_FACTOR,
       u.DISTINCT_KEYS,
       u.LAST_ANALYZED
  from dba_part_indexes t, dba_ind_partitions u,dba_part_key_columns v
 where t.INDEX_NAME = u.INDEX_NAME
   and t.index_name = v.name
   and t.OWNER = u.INDEX_OWNER
   and t.owner = '{obj_owner}'
 order by u.index_name,u.partition_name

获取某个schema下的对象类型为partition table的基本信息,如:表的名称,分区名称,最后一次ddl的时间等。

    select t.table_owner,
       t.table_name,
       s.object_id,
       s.OBJECT_TYPE,
       'part tab' as part_role,
       s.DATA_OBJECT_ID,
       t.partition_name,
       t.subpartition_count,
       t.partition_position,
       t.CHAIN_CNT,
       trunc(((t.AVG_ROW_LEN * t.NUM_ROWS) / 8) /
             (decode(t.BLOCKS, 0, 1, t.BLOCKS)) * 100) as HWM_STAT,
       t.blocks,
       t.num_rows,
       t.avg_row_len,
       t.last_analyzed,
       s.LAST_DDL_TIME
  from dba_tab_Partitions t, dba_objects s
 where t.partition_name = s.SUBOBJECT_NAME
   and t.table_name = s.object_name
   and t.table_owner = s.owner
   and t.table_name not like '%BIN$%'
   and s.OBJECT_TYPE = 'TABLE PARTITION'
   and t.table_owner = '{obj_owner}'
 order by table_owner, table_name, partition_name

获取某个schema下的对象类型为partition table的基本信息,如:表中每个分区的物理大小

    select u.segment_name,
       u.partition_name,
       sum(u.bytes) / 1024 / 1024 as tab_space
  from dba_segments u
 where u.segment_type = 'TABLE PARTITION'
   and u.owner = '{obj_owner}'
   and u.segment_name not like '%BIN$%'
 group by u.owner, u.segment_name, u.partition_name
union
select s.segment_name,
       t.partition_name,
       sum(s.bytes) / 1024 / 1024 as tab_space
  from dba_segments s, dba_tab_subpartitions t
 where s.partition_name = t.subpartition_name
   and s.segment_type = 'TABLE SUBPARTITION'
   and s.segment_name not like '%BIN$%'
   and s.owner = t.table_owner
   and s.owner = '{obj_owner}'
 group by s.owner, s.segment_name,t.partition_name

获取某个schema下对象类型为partition table的相关信息,如:分区表的类型,分区键,分区的数量等信息。

       select s.OWNER,
       s.OBJECT_NAME as TABLE_NAME,
       s.OBJECT_ID,
       s.DATA_OBJECT_ID,
       u.partitioning_type,
       t.column_name,
       u.partitioning_key_count,
       u.partition_count,
       u.subpartitioning_key_count,
       u.subpartitioning_type,
       s.LAST_DDL_TIME,
       'part tab parent' as part_role
  from dba_objects s, Dba_part_key_columns t, dba_part_tables u
 where s.OBJECT_NAME = t.name
   and t.name = u.table_name
   and t.owner = u.owner
   and s.owner = t.owner
   and s.owner = '{obj_owner}'
   and s.SUBOBJECT_NAME is null
   and s.OBJECT_name in (select distinct table_name
                           from dba_tab_partitions t
                          where t.table_owner =  '{obj_owner}')
 order by owner, object_name

获取某个schema下对象类型为partition table的相关信息,如:每个part table的物理大小。

    select segment_name, sum(t.bytes) / 1024 / 1024 as tab_space
    from dba_segments t
    where t.owner = '{obj_owner}'
    and t.partition_name is not null
    and t.segment_name not like '%BIN$%'
    and t.segment_type in ('TABLE SUBPARTITION','TABLE PARTITION')
    group by segment_name

获取某个schema下对象类型为partition table的相关信息,如:每个part table包含的记录数量。

    select t.table_name, sum(t.num_rows) num_rows
    from dba_tab_Partitions t
    where t.table_owner = '{obj_owner}'
    and t.table_name not like '%BIN$%'
    group by t.table_name
    order by t.table_name 

获取某个schema下对象类型为partition table,并且包含子分区的相关信息,如:子分区的名称,位置等信息。

    select t.table_owner,
       t.table_name,
       s.object_id,
       s.OBJECT_TYPE,
       'part tab son' as part_role,
       s.DATA_OBJECT_ID,
       t.partition_name,
       t.SUBPARTITION_NAME,
       t.SUBPARTITION_POSITION,
       u.column_name,
       t.CHAIN_CNT,
       t.blocks,
       t.num_rows,
       t.avg_row_len,
       trunc(((t.AVG_ROW_LEN * t.NUM_ROWS) / 8) /
             (decode(t.BLOCKS, 0, 1, t.BLOCKS)) * 100) as HWM_STAT,
       t.last_analyzed,
       s.LAST_DDL_TIME
  from dba_tab_subpartitions t, dba_objects s,Dba_Subpart_Key_Columns u
 where t.table_name = u.name
 and t.subpartition_name = s.SUBOBJECT_NAME
   and t.table_name = s.object_name
   and t.table_owner = s.owner
   and t.table_name not like '%BIN$%'     
   and s.OBJECT_TYPE = 'TABLE SUBPARTITION'
   and t.table_owner = '{obj_owner}'
 order by table_owner, table_name, partition_name

获取某个schema下对象类型为table,并且包含子分区的相关信息,如:子分区的物理大小。

   select s.segment_name,
       t.partition_name,
       s.partition_name,
       sum(s.bytes) / 1024 / 1024 as tab_space
  from dba_segments s, dba_tab_subpartitions t
 where s.partition_name = t.subpartition_name
   and s.segment_type = 'TABLE SUBPARTITION'
   and s.owner = t.table_owner
   and s.owner = '{obj_owner}'
 group by s.owner, s.segment_name,t.partition_name,s.partition_name

获取某个schema下对象类型为table的相关信息,如:列的名称,列的类型,平均长度等信息。

     select t.OWNER,
       t.TABLE_NAME,
       t.COLUMN_NAME,
       t.DATA_TYPE,
       '' TYPE_CHANGE,
       t.NULLABLE,
       t.NUM_NULLS,
       t.NUM_DISTINCT,
       t.DATA_DEFAULT,
       t.AVG_COL_LEN
  from dba_tab_columns t, dba_objects s
 where t.OWNER = s.owner
   and t.TABLE_NAME = s.object_name
   and t.OWNER = '{obj_owner}'
   and s.OBJECT_TYPE='TABLE' 
   order by t.TABLE_NAME,t.COLUMN_NAME

获取某个schema下对象类型为view的相关信息,如:view依赖的对象名称和对象类型。

     select name||referenced_name as obj_pk,
     s.owner,
     s.name as view_name,
     s.type as object_type,
     s.referenced_owner,
     s.referenced_name,
     s.referenced_type
    from DBA_DEPENDENCIES s
    where s.type = 'VIEW'
    and s.owner = '{obj_owner}'
    order by s.name
http://www.cndba.cn/Expect-le/article/2810
http://www.cndba.cn/Expect-le/article/2810 http://www.cndba.cn/Expect-le/article/2810 http://www.cndba.cn/Expect-le/article/2810 http://www.cndba.cn/Expect-le/article/2810 http://www.cndba.cn/Expect-le/article/2810 http://www.cndba.cn/Expect-le/article/2810
http://www.cndba.cn/Expect-le/article/2810
http://www.cndba.cn/Expect-le/article/2810 http://www.cndba.cn/Expect-le/article/2810

版权声明:本文为博主原创文章,未经博主允许不得转载。

常用的SQL

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
Expect-乐

Expect-乐

关注

Without the continuous bitter cold, there can be no fragrant plum blossom

  • 336
    原创
  • 6
    翻译
  • 100
    转载
  • 41
    评论
  • 访问:1378819次
  • 积分:1957
  • 等级:核心会员
  • 排名:第3名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ