Top 10 - Biggest Tables and Indexes
set lines 170
set pages 20
col owner format a20
col object format a30
col type format a6
col tablespace format a20
col size_in_gb format 999,999.9
select *
from (select owner owner,
segment_name object,
segment_type type,
tablespace_name tablespace,
round(bytes/1024/1024/1024,1) size_in_gb
from dba_segments
where owner not in ('SYS','SYSTEM')
order by bytes desc
)
where rownum < 11
order by size_in_gb desc;
Showing posts with label tablespace. Show all posts
Showing posts with label tablespace. Show all posts
Tuesday, September 22, 2015
Tuesday, January 29, 2013
How FULL are the BLOCKS in my TABLE?
Table Block Space Usage:
set serveroutput on size 100000
declare
v_unformatted_blocks number;
v_unformatted_bytes number;
v_fs1_blocks number;
v_fs1_bytes number;
v_fs2_blocks number;
v_fs2_bytes number;
v_fs3_blocks number;
v_fs3_bytes number;
v_fs4_blocks number;
v_fs4_bytes number;
v_full_blocks number;
v_full_bytes number;
begin
dbms_space.space_usage (
'&TABLEOWNER', --object owner
'&TABLENAME', --object name
'TABLE', --object type TABLE, INDEX, or "TABLE PARTITION"
v_unformatted_blocks,
v_unformatted_bytes,
v_fs1_blocks,
v_fs1_bytes,
v_fs2_blocks,
v_fs2_bytes,
v_fs3_blocks,
v_fs3_bytes,
v_fs4_blocks,
v_fs4_bytes,
v_full_blocks,
v_full_bytes
--'&PARTITIONNAME',
);
dbms_output.put_line('Unformatted Blocks = '||v_unformatted_blocks);
dbms_output.put_line('FS1 Blocks = '||v_fs1_blocks);
dbms_output.put_line('FS2 Blocks = '||v_fs2_blocks);
dbms_output.put_line('FS3 Blocks = '||v_fs3_blocks);
dbms_output.put_line('FS4 Blocks = '||v_fs4_blocks);
dbms_output.put_line('Full Blocks = '||v_full_blocks);
end;
/
Sample Output:
Unformatted Blocks = 16
FS1 Blocks = 42 <--- 0-25% full
FS2 Blocks = 31 <-- 25-50% full
FS3 Blocks = 35 <-- 50-75% full
FS4 Blocks = 4651 <- 75-99% full
Full Blocks = 99448
FS1 Blocks = 42 <--- 0-25% full
FS2 Blocks = 31 <-- 25-50% full
FS3 Blocks = 35 <-- 50-75% full
FS4 Blocks = 4651 <- 75-99% full
Full Blocks = 99448
Shrinking options:
-- Enable row movement.
ALTER TABLE scott.emp ENABLE ROW MOVEMENT;
ALTER TABLE scott.emp ENABLE ROW MOVEMENT;
-- Recover space and amend the high water mark (HWM).
ALTER TABLE scott.emp SHRINK SPACE;
ALTER TABLE scott.emp SHRINK SPACE;
-- Recover space, but don't amend the high water mark (HWM).
ALTER TABLE scott.emp SHRINK SPACE COMPACT;
ALTER TABLE scott.emp SHRINK SPACE COMPACT;
-- Recover space for the object and all dependant objects.
ALTER TABLE scott.emp SHRINK SPACE CASCADE;
ALTER TABLE scott.emp SHRINK SPACE CASCADE;
DML Activity by Object (including statistics)
This is a helpful script to see DML activity on tables.
By default, if the "Updates" column is over 10%, stats will be gathered on that object.
First, flush DML activity stats to dba_tab_modifications:
dbms_stats.flush_monitoring_info
set linesize 140
set pagesize 50
col table_partition heading 'Table.Partition' format a40
col analyzed heading 'Last Analyzed'
col num_rows heading '# Rows' format 99,999,999,999
col tot_updates heading 'Total DMLs' format 99,999,999,999
col truncd heading 'Truncated?'
col pct_updates heading '%|Updates' format 999.99
col ts heading 'Last DML'
select table_name||decode(partition_name,null,'','.'||partition_name) table_partition,
to_char(last_analyzed,'MM/DD/YY HH24:MI') analyzed,
num_rows,
tot_updates,
to_char(timestamp,'MM/DD/YY HH24:MI') ts,
to_number(perc_updates) pct_updates,
decode(truncated,'NO','','Yes ') truncd
from (select a.*,
nvl(decode(num_rows, 0, '-1', 100 * tot_updates / num_rows), -1) perc_updates
from (select (select num_rows
from dba_tables
where dba_tables.table_name = DBA_TAB_MODIFICATIONS.table_name
and DBA_TAB_MODIFICATIONS.table_owner = dba_tables.owner) num_rows,
(select last_analyzed
from dba_tables
where dba_tables.table_name = DBA_TAB_MODIFICATIONS.table_name
and DBA_TAB_MODIFICATIONS.table_owner = dba_tables.owner) last_analyzed,
(inserts + updates + deletes) tot_updates,
DBA_TAB_MODIFICATIONS.*
from sys.DBA_TAB_MODIFICATIONS
) a
) b
where perc_updates > 5
and table_owner = '&SCHEMA'
order by last_analyzed desc
/
exit
/
SAMPLE OUTPUT:
Table.Partition Last Analyzed # Rows Total DMLs Last DML Updates Truncated?
-------------------- -------------- --------------- --------------- -------------- ------- ----------
AQ$_QUEUE_TABLES 03/12/13 14:32 11 1 03/12/13 14:36 9.09
col table_partition heading 'Table.Partition' format a40
col analyzed heading 'Last Analyzed'
col num_rows heading '# Rows' format 99,999,999,999
col tot_updates heading 'Total DMLs' format 99,999,999,999
col truncd heading 'Truncated?'
col pct_updates heading '%|Updates' format 999.99
col ts heading 'Last DML'
select table_name||decode(partition_name,null,'','.'||partition_name) table_partition,
to_char(last_analyzed,'MM/DD/YY HH24:MI') analyzed,
num_rows,
tot_updates,
to_char(timestamp,'MM/DD/YY HH24:MI') ts,
to_number(perc_updates) pct_updates,
decode(truncated,'NO','','Yes ') truncd
from (select a.*,
nvl(decode(num_rows, 0, '-1', 100 * tot_updates / num_rows), -1) perc_updates
from (select (select num_rows
from dba_tables
where dba_tables.table_name = DBA_TAB_MODIFICATIONS.table_name
and DBA_TAB_MODIFICATIONS.table_owner = dba_tables.owner) num_rows,
(select last_analyzed
from dba_tables
where dba_tables.table_name = DBA_TAB_MODIFICATIONS.table_name
and DBA_TAB_MODIFICATIONS.table_owner = dba_tables.owner) last_analyzed,
(inserts + updates + deletes) tot_updates,
DBA_TAB_MODIFICATIONS.*
from sys.DBA_TAB_MODIFICATIONS
) a
) b
where perc_updates > 5
and table_owner = '&SCHEMA'
order by last_analyzed desc
/
exit
/
SAMPLE OUTPUT:
Table.Partition Last Analyzed # Rows Total DMLs Last DML Updates Truncated?
-------------------- -------------- --------------- --------------- -------------- ------- ----------
AQ$_QUEUE_TABLES 03/12/13 14:32 11 1 03/12/13 14:36 9.09
Subscribe to:
Posts (Atom)