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

Буду рад, если кто поделится советом/запросом как в 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
04.10.2017, 12:31
    #39530695
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчитать free space для БД >=100 TB
Ты хвастаешься или действительно недоволен?
Попробуй для начала хинт /*+ rule */
...
Рейтинг: 0 / 0
04.10.2017, 12:43
    #39530701
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчитать free space для БД >=100 TB
При такой БД считать не надо.
Надо просто сразу покупать еще диски.
...
Рейтинг: 0 / 0
04.10.2017, 13:05
    #39530721
ORA__SQL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчитать free space для БД >=100 TB
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
04.10.2017, 13:51
    #39530745
BigBudda
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчитать free space для БД >=100 TB
Сможете скинуть более шустрый запрос, возможно на других вью?
Запустил с хинтом rule, висит минут 20....
И чем помогут временные таблицы с _temp?
...
Рейтинг: 0 / 0
04.10.2017, 14:16
    #39530759
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчитать free space для БД >=100 TB
BigBudda,
Мессир, Вы посчитайте, сколько записей по сегментам для 100Т базы
12 500 000 000 8k блоков

Производительность будет зависеть также от типов ТС
Для начала посмотрите план запроса, чтобы оценить что oracle думает
p.s. Можно попробовать parallel включить, но не уверен что взлетит на fix view
...
Рейтинг: 0 / 0
04.10.2017, 14:23
    #39530767
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчитать free space для БД >=100 TB
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
04.10.2017, 14:34
    #39530778
BigBudda
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчитать free space для БД >=100 TB
Спасибо за скрипт, но под sys выполнить не могу:
sys.new_lost_write_extents$ не существует
...
Рейтинг: 0 / 0
04.10.2017, 20:41
    #39531091
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчитать free space для БД >=100 TB
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
04.10.2017, 20:42
    #39531092
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчитать free space для БД >=100 TB
Кстати, в 11.2 dba_free_space хинтована нестед лупсами. Я б вообще избегал ей пользоваться в 11.2
...
Рейтинг: 0 / 0
05.10.2017, 09:33
    #39531237
Промазал
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчитать free space для БД >=100 TB
xtender,
Саян, промазал, для 11.2 with бесполезен...
...
Рейтинг: 0 / 0
05.10.2017, 09:49
    #39531244
Подсчитать free space для БД >=100 TB
Промазал,

При чём тут 11.2?

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

на
Код: plsql
1.
from free_space

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

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

план-то покажи...
...
Рейтинг: 0 / 0
05.10.2017, 19:20
    #39531776
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчитать free space для БД >=100 TB
еще более упрощенный вариант:
Код: 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
06.10.2017, 16:34
    #39532377
BigBudda
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчитать free space для БД >=100 TB
Ответ нашёлся на мой вопрос:

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



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

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



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


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