Это относится к табличным пространствам управляемых по словарю.
В процессе работы БД бывает такое, что несколько свободных экстентов идут друг за другом в таком случае их можно слить в один с помощью ALTER TABLESPACE tbs_name COALESCE
-- оценить фрагментацию
-- выполнить слияние свободных экстентов
alter tablespace users coalesce;
В процессе работы БД бывает такое, что несколько свободных экстентов идут друг за другом в таком случае их можно слить в один с помощью ALTER TABLESPACE tbs_name COALESCE
-- оценить фрагментацию
-- Если FSFI около 100 - фрагментации нет
-- Если FSFI ближе к 0 - фрагментация есть
SELECT TABLESPACE_NAME,
SQRT(MAX(BLOCKS)/SUM(BLOCKS))+
(100/SQRT(SQRT(COUNT(BLOCKS)))) FSFI
FROM DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME
ORDER BY 1;
-- Посмотреть фрагментацию табличного пространства USERS (вариант 1)
SELECT 'free space' owner, ' ' OBJECT, file_id, block_id, blocks
FROM dba_free_space
WHERE tablespace_name = 'USERS'
UNION
SELECT SUBSTR (owner, 1, 20), SUBSTR (segment_name, 1, 32), file_id,
block_id, blocks
FROM dba_extents
WHERE tablespace_name = 'USERS'
ORDER BY 3, 4;
-- Посмотреть фрагментацию табличного пространства USERS (вариант 2)
SELECT a.tablespace_name, a.file_id, a.block_id, a.blocks, b.block_id
FROM dba_free_space a, dba_free_space b
WHERE a.tablespace_name = 'USERS'
AND b.tablespace_name = 'USERS'
AND a.tablespace_name = b.tablespace_name
AND a.file_id = b.file_id
AND a.block_id + a.blocks = b.block_id;
-- Если FSFI ближе к 0 - фрагментация есть
SELECT TABLESPACE_NAME,
SQRT(MAX(BLOCKS)/SUM(BLOCKS))+
(100/SQRT(SQRT(COUNT(BLOCKS)))) FSFI
FROM DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME
ORDER BY 1;
-- Посмотреть фрагментацию табличного пространства USERS (вариант 1)
SELECT 'free space' owner, ' ' OBJECT, file_id, block_id, blocks
FROM dba_free_space
WHERE tablespace_name = 'USERS'
UNION
SELECT SUBSTR (owner, 1, 20), SUBSTR (segment_name, 1, 32), file_id,
block_id, blocks
FROM dba_extents
WHERE tablespace_name = 'USERS'
ORDER BY 3, 4;
-- Посмотреть фрагментацию табличного пространства USERS (вариант 2)
SELECT a.tablespace_name, a.file_id, a.block_id, a.blocks, b.block_id
FROM dba_free_space a, dba_free_space b
WHERE a.tablespace_name = 'USERS'
AND b.tablespace_name = 'USERS'
AND a.tablespace_name = b.tablespace_name
AND a.file_id = b.file_id
AND a.block_id + a.blocks = b.block_id;
-- выполнить слияние свободных экстентов
alter tablespace users coalesce;