毎月数百万の新しい行を取得する Oracle データベースにテーブルがあります。各行には、作成日を示す列があります。
過去 6 か月間のディスク容量の増加を取得するクエリを実行したいと考えています。つまり、結果は 2 つの列を持つテーブルになり、各行にはその月の名前とその月に使用されたディスク容量が含まれます。
ありがとう、
この記事では、テーブルの増加を取得する方法について報告します:http ://www.dba-oracle.com/t_table_growth_reports.htm
column "Percent of Total Disk Usage" justify right format 999.99
column "Space Used (MB)" justify right format 9,999,999.99
column "Total Object Size (MB)" justify right format 9,999,999.99
set linesize 150
set pages 80
set feedback off
select * from (select to_char(end_interval_time, 'MM/DD/YY') mydate, sum(space_used_delta) / 1024 / 1024 "Space used (MB)", avg(c.bytes) / 1024 / 1024 "Total Object Size (MB)",
round(sum(space_used_delta) / sum(c.bytes) * 100, 2) "Percent of Total Disk Usage"
from
dba_hist_snapshot sn,
dba_hist_seg_stat a,
dba_objects b,
dba_segments c
where begin_interval_time > trunc(sysdate) - &days_back
and sn.snap_id = a.snap_id
and b.object_id = a.obj#
and b.owner = c.owner
and b.object_name = c.segment_name
and c.segment_name = '&segment_name'
group by to_char(end_interval_time, 'MM/YY'))
order by to_date(mydate, 'MM/YY');
DBA_TABLES (または同等のもの) は AVG_ROW_LEN を提供するため、単純に 1 か月あたりに作成される行数を掛けることができます。
注意点は、新しい行の行の長さが既存の行の長さと似ていることを前提としています。「小さい」(たとえば 50 バイト) の履歴データの束があり、新しい行が大きい (150 バイト) 場合、見積もりは低すぎます。
また、更新はどのように物事に反映されますか? 行が 50 バイトから始まり、2 か月後に 150 バイトになった場合、その 100 バイトをどのように計算しますか?
最後に、行を挿入するたびにテーブルが大きくなることはありません。時々、割り当てられたスペースがいっぱいになり、別のチャンクが割り当てられます。テーブルの設定によっては、その次のチャンクは、たとえば、既存のテーブル サイズの 50% になる場合があります。つまり、身体的に 3 か月間成長せずに大幅なジャンプができ、さらに 6 か月間成長しない可能性があります。