юни 102010
 

Много полезно, за всички, които си пазят AWR snapshots за по-дълъг период от време. От тази таблица може да се изкара trend за нарастването на базата. Примерно по месеци изглеждат така:

select tsu.snap_id, to_char(sn.mon, 'Mon.YYYY'), round(sum(tsu.tablespace_size * nvl(ts.blocksize, p.value))/1024/1024/1024, 2) GB_size
  from dba_hist_tbspc_space_usage tsu,
       sys.ts$ ts,
       v$parameter p,
       (select trunc(begin_interval_time, 'MONTH') Mon, min(snap_id) snap_id
          from dba_hist_snapshot
         group by trunc(begin_interval_time, 'MONTH')) sn
 where p.name = 'db_block_size'
   and tsu.tablespace_id = ts.ts#(+)
   and sn.snap_id = tsu.snap_id
 group by tsu.snap_id, sn.mon
 order by 1

Този SQL идва с няколко забележки:
– малко ми е тъпо размера на tablespace да се пази в блокове, а не байтове. Отне ми известно време да схвана какви са числата. Документацията не помага много 🙂
– ако в миналото е имало tablespace, който в последствие е drop-нат, се приема, че е бил с default-ния block size. Аз, лично не намерих друг начин
– още нещо леко тъпо: v$tablespace няма изведена колонка blocksize, докато dba_tablespaces няма ts#. Заради тази… хм… неконсистентност в поведението, предпочетох да използвам директно sys.ts$. На който не му харесва това, може да си ги join-не по tablespace_name

 Posted by at 11:15