powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Подсчитать free space для БД >=100 TB
20 сообщений из 20, страница 1 из 1
Подсчитать free space для БД >=100 TB
    #39530684
BigBudda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем!

Буду рад, если кто поделится советом/запросом как в Oracle 11.2.0.4
быстро = за пару минут подсчитать размер free space для табличных пространств.
Весь вопрос в том, что размер БД 100 ТБ, и запрос типа

select b.tablespace_name, tbs_size SizeMb, a.free_space FreeMb
from (select tablespace_name, round(sum(bytes)/1024/1024 ,2) as free_space
from dba_free_space
group by tablespace_name) a,
(select tablespace_name, sum(bytes)/1024/1024 as tbs_size
from dba_data_files
group by tablespace_name) b;
...
Рейтинг: 0 / 0
Подсчитать free space для БД >=100 TB
    #39530695
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты хвастаешься или действительно недоволен?
Попробуй для начала хинт /*+ rule */
...
Рейтинг: 0 / 0
Подсчитать free space для БД >=100 TB
    #39530701
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При такой БД считать не надо.
Надо просто сразу покупать еще диски.
...
Рейтинг: 0 / 0
Подсчитать free space для БД >=100 TB
    #39530721
ORA__SQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BigBuddaбыстро = за пару минут подсчитать размер free space для табличных пространств.Сначала так, а потом считай
Код: plsql
1.
2.
3.
create table dba_free_space_tmp as select * from dba_free_space;
create table dba_data_files_tmp as select * from dba_data_files;
 
...
Рейтинг: 0 / 0
Подсчитать free space для БД >=100 TB
    #39530745
BigBudda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сможете скинуть более шустрый запрос, возможно на других вью?
Запустил с хинтом rule, висит минут 20....
И чем помогут временные таблицы с _temp?
...
Рейтинг: 0 / 0
Подсчитать free space для БД >=100 TB
    #39530759
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BigBudda,
Мессир, Вы посчитайте, сколько записей по сегментам для 100Т базы
12 500 000 000 8k блоков

Производительность будет зависеть также от типов ТС
Для начала посмотрите план запроса, чтобы оценить что oracle думает
p.s. Можно попробовать parallel включить, но не уверен что взлетит на fix view
...
Рейтинг: 0 / 0
Подсчитать free space для БД >=100 TB
    #39530767
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
BigBuddaselect b.tablespace_name, tbs_size SizeMb, a.free_space FreeMb
from (select tablespace_name, round(sum(bytes)/1024/1024 ,2) as free_space
from dba_free_space
group by tablespace_name) a,
(select tablespace_name, sum(bytes)/1024/1024 as tbs_size
from dba_data_files
group by tablespace_name) b;во-первых где условие джойна потерял?
во-вторых, попробуй так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
with 
 ts as (select/*+ materialize */ name,ts#,bitmapped,online$,contents$,blocksize,flags from sys.ts$)
,fi as (select/*+ materialize */ * from sys.file$)
,ktfbfe as (select/*+ materialize */ * from sys.x$ktfbfe)
,free_space(tablespace_name, bytes) as (
   select ts.name, 
          sum(f.length) * ts.blocksize
   from ts, sys.fet$ f
   where ts.ts# = f.ts#
     and ts.bitmapped = 0
   group by ts.name,ts.blocksize
   union all
   select
          ts.name,
          sum(f.ktfbfeblks) * ts.blocksize
   from ts, ktfbfe f
   where ts.ts# = f.ktfbfetsn
     and ts.bitmapped <> 0 and ts.online$ in (1,4) and ts.contents$ = 0
     and bitand(ts.flags, 4503599627370496) <> 4503599627370496
   group by ts.name,ts.blocksize
   union all
   select
          ts.name,
          sum(u.ktfbueblks) * ts.blocksize
   from sys.recyclebin$ rb, ts, sys.x$ktfbue u, fi
   where ts.ts# = rb.ts#
     and rb.ts# = fi.ts#
     and u.ktfbuefno = fi.relfile#
     and u.ktfbuesegtsn = rb.ts#
     and u.ktfbuesegfno = rb.file#
     and u.ktfbuesegbno = rb.block#
     and ts.bitmapped <> 0 and ts.online$ in (1,4) and ts.contents$ = 0
     and bitand(ts.flags, 4503599627370496) <> 4503599627370496
   group by ts.name,ts.blocksize
   union all
   select ts.name,
          sum(u.length) * ts.blocksize
   from ts, sys.uet$ u, fi, sys.recyclebin$ rb
   where ts.ts# = u.ts#
     and u.ts# = fi.ts#
     and u.segfile# = fi.relfile#
     and u.ts# = rb.ts#
     and u.segfile# = rb.file#
     and u.segblock# = rb.block#
     and ts.bitmapped = 0
   group by ts.name,ts.blocksize
   union all
   select
          ts.name,
          sum(f.extent_length_blocks_2K) *2048
   from ts, sys.new_lost_write_extents$ f, fi
   where ts.ts# = f.extent_datafile_tsid
     and f.extent_datafile_tsid = fi.ts#
     and ts.bitmapped <> 0 and ts.online$ in (1,4) and ts.contents$ = 0
     and bitand(ts.flags, 4503599627370496) = 4503599627370496
   group by ts.name
   )
select b.tablespace_name, tbs_size SizeMb, a.free_space FreeMb
from (select tablespace_name, round(sum(bytes)/1024/1024 ,2) as free_space
from free_space
group by tablespace_name) a,
(select tablespace_name, sum(bytes)/1024/1024 as tbs_size
from dba_data_files
group by tablespace_name) b
where a.tablespace_name=b.tablespace_name;
/


должно быть намного быстрее
...
Рейтинг: 0 / 0
Подсчитать free space для БД >=100 TB
    #39530778
BigBudda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за скрипт, но под sys выполнить не могу:
sys.new_lost_write_extents$ не существует
...
Рейтинг: 0 / 0
Подсчитать free space для БД >=100 TB
    #39531091
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
BigBudda,

для 11.2
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
with
 ts as (select/*+ materialize */ name,ts#,bitmapped,online$,contents$,blocksize,flags from sys.ts$)
,fi as (select/*+ materialize */ * from sys.file$)
,ktfbfe as (select/*+ materialize */ * from sys.x$ktfbfe)
,free_space(tablespace_name, bytes) as (
      select ts.name, 
             sum(f.length) * ts.blocksize
      from ts, sys.fet$ f
      where ts.ts# = f.ts#
        and ts.bitmapped = 0
      group by ts.name,ts.blocksize
      union all
      select
             ts.name,
             sum(f.ktfbfeblks) * ts.blocksize
      from ts, ktfbfe f
      where ts.ts# = f.ktfbfetsn
        and ts.bitmapped <> 0 and ts.online$ in (1,4) and ts.contents$ = 0
      group by ts.name,ts.blocksize
      union all
      select
             ts.name, 
             sum(u.ktfbueblks) * ts.blocksize
      from sys.recyclebin$ rb, ts, sys.x$ktfbue u, fi
      where ts.ts# = rb.ts#
        and rb.ts# = fi.ts#
        and u.ktfbuefno = fi.relfile#
        and u.ktfbuesegtsn = rb.ts#
        and u.ktfbuesegfno = rb.file#
        and u.ktfbuesegbno = rb.block#
        and ts.bitmapped <> 0 and ts.online$ in (1,4) and ts.contents$ = 0
      group by ts.name,ts.blocksize
      union all
      select ts.name, 
             sum(u.length) * ts.blocksize
      from ts, sys.uet$ u, fi, sys.recyclebin$ rb
      where ts.ts# = u.ts#
        and u.ts# = fi.ts#
        and u.segfile# = fi.relfile#
        and u.ts# = rb.ts#
        and u.segfile# = rb.file#
        and u.segblock# = rb.block#
        and ts.bitmapped = 0
      group by ts.name,ts.blocksize
)
select b.tablespace_name, tbs_size SizeMb, a.free_space FreeMb
from (select tablespace_name, round(sum(bytes)/1024/1024 ,2) as free_space
      from free_space
      group by tablespace_name
     ) a,
     (select tablespace_name, sum(bytes)/1024/1024 as tbs_size
      from dba_data_files
      group by tablespace_name
     ) b
where a.tablespace_name=b.tablespace_name

...
Рейтинг: 0 / 0
Подсчитать free space для БД >=100 TB
    #39531092
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Кстати, в 11.2 dba_free_space хинтована нестед лупсами. Я б вообще избегал ей пользоваться в 11.2
...
Рейтинг: 0 / 0
Подсчитать free space для БД >=100 TB
    #39531237
Промазал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
xtender,
Саян, промазал, для 11.2 with бесполезен...
...
Рейтинг: 0 / 0
Подсчитать free space для БД >=100 TB
    #39531244
Промазал,

При чём тут 11.2?

Заменить
Код: plsql
1.
from dba_free_space

на
Код: plsql
1.
from free_space

не осилил?
...
Рейтинг: 0 / 0
Подсчитать free space для БД >=100 TB
    #39531307
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Опечатался,

да, спасибо, поправленное:
для 11.2
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
with
 ts as (select/*+ materialize */ name,ts#,bitmapped,online$,contents$,blocksize,flags from sys.ts$)
,fi as (select/*+ materialize */ * from sys.file$)
,ktfbfe as (select/*+ materialize */ * from sys.x$ktfbfe)
,free_space(tablespace_name, bytes) as (
      select ts.name, 
             sum(f.length) * ts.blocksize
      from ts, sys.fet$ f
      where ts.ts# = f.ts#
        and ts.bitmapped = 0
      group by ts.name,ts.blocksize
      union all
      select
             ts.name,
             sum(f.ktfbfeblks) * ts.blocksize
      from ts, ktfbfe f
      where ts.ts# = f.ktfbfetsn
        and ts.bitmapped <> 0 and ts.online$ in (1,4) and ts.contents$ = 0
      group by ts.name,ts.blocksize
      union all
      select
             ts.name, 
             sum(u.ktfbueblks) * ts.blocksize
      from sys.recyclebin$ rb, ts, sys.x$ktfbue u, fi
      where ts.ts# = rb.ts#
        and rb.ts# = fi.ts#
        and u.ktfbuefno = fi.relfile#
        and u.ktfbuesegtsn = rb.ts#
        and u.ktfbuesegfno = rb.file#
        and u.ktfbuesegbno = rb.block#
        and ts.bitmapped <> 0 and ts.online$ in (1,4) and ts.contents$ = 0
      group by ts.name,ts.blocksize
      union all
      select ts.name, 
             sum(u.length) * ts.blocksize
      from ts, sys.uet$ u, fi, sys.recyclebin$ rb
      where ts.ts# = u.ts#
        and u.ts# = fi.ts#
        and u.segfile# = fi.relfile#
        and u.ts# = rb.ts#
        and u.segfile# = rb.file#
        and u.segblock# = rb.block#
        and ts.bitmapped = 0
      group by ts.name,ts.blocksize
)
select b.tablespace_name, tbs_size SizeMb, a.free_space FreeMb
from (select tablespace_name, round(sum(bytes)/1024/1024 ,2) as free_space
      from free_space
      group by tablespace_name
     ) a,
     (select tablespace_name, sum(bytes)/1024/1024 as tbs_size
      from dba_data_files
      group by tablespace_name
     ) b
where a.tablespace_name=b.tablespace_name;

...
Рейтинг: 0 / 0
Подсчитать free space для БД >=100 TB
    #39531419
BigBudda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Скрипт с free_space выполняется дольше.
...
Рейтинг: 0 / 0
Подсчитать free space для БД >=100 TB
    #39531482
alexkir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как насчет dba_tablespace_usage_metrics ?
...
Рейтинг: 0 / 0
Подсчитать free space для БД >=100 TB
    #39531756
д0kХ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня есть ИМХО подозрение
что реальных датафайлов на 10 - 20 Тб, а все остальное FRA.
...
Рейтинг: 0 / 0
Подсчитать free space для БД >=100 TB
    #39531762
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
BigBudda,

план-то покажи...
...
Рейтинг: 0 / 0
Подсчитать free space для БД >=100 TB
    #39531776
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
еще более упрощенный вариант:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
with 
 fi as (select/*+ materialize */ * from sys.file$)
,used as (select/*+ materialize */ fi.ts#,sum(blocks) blocks from fi group by fi.ts#)
,free as (
   select ts#,sum(blocks) blocks
   from (
      select f.ts#,
             sum(f.length) blocks
      from sys.fet$ f
      group by f.ts#
      union all
      select
             f.ktfbfetsn,
             sum(f.ktfbfeblks)
      from sys.x$ktfbfe f
      group by f.ktfbfetsn
      union all
      select
             rb.ts#, 
             sum(u.ktfbueblks)
      from sys.recyclebin$ rb, sys.x$ktfbue u, fi
      where rb.ts# = fi.ts#
        and u.ktfbuefno = fi.relfile#
        and u.ktfbuesegtsn = rb.ts#
        and u.ktfbuesegfno = rb.file#
        and u.ktfbuesegbno = rb.block#
      group by rb.ts#
      union all
      select u.ts#, 
             sum(u.length)
      from sys.uet$ u, fi, sys.recyclebin$ rb
      where u.ts# = fi.ts#
        and u.segfile# = fi.relfile#
        and u.ts# = rb.ts#
        and u.segfile# = rb.file#
        and u.segblock# = rb.block#
      group by u.ts#
  )
  group by ts#
)
select t.name
      ,free.blocks*blocksize as free_space
      ,used.blocks*blocksize 
from sys.ts$ t,free,used
where t.ts#=free.ts#
  and t.ts#=used.ts#
/

...
Рейтинг: 0 / 0
Подсчитать free space для БД >=100 TB
    #39532377
BigBudda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ответ нашёлся на мой вопрос:

Код: plsql
1.
2.
3.
4.
select object_name, reason
from DBA_OUTSTANDING_ALERTS
where message_group='Space'
and message_TYPE='Warning';



Данный запрос отрабатывает за доли секунды, даже для БД в несколько десятков террабайт.
...
Рейтинг: 0 / 0
Подсчитать free space для БД >=100 TB
    #39532382
Фотография AlexFF__|
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BigBuddaОтвет нашёлся на мой вопрос:

Код: plsql
1.
2.
3.
4.
select object_name, reason
from DBA_OUTSTANDING_ALERTS
where message_group='Space'
and message_TYPE='Warning';



Данный запрос отрабатывает за доли секунды, даже для БД в несколько десятков террабайт.
=))))))))) До слез! =)))))))))))
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Подсчитать free space для БД >=100 TB
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]