Resumen
La prueba consiste en la migración de la
tabla TABLA1 cuyo LOB es de tipo BasicFiles (BF) al tipo SecureFiles (SF). La
idea es realizar la migración simple, luego con deduplicación solamente y por
último deduplicación con compresión, para poder realizar un análisis
comparativo del uso del espacio.
Plataforma
|
Linux
|
Oracle
|
11.2.0.1
|
Base
|
PROD
|
Tabla a migrar
|
TABLA1
|
Esquema
|
SMD
|
Relevamiento:
Lo primero que hacemos es relevar la tabla con la columna LOB a migrar para l cual obtenemos el DDL de la tabla TABLA1, revisamos la cantidad de filas que tiene, el tamaño de ocupación de la misma y del campo LOB que reside en un tablespace separado. El tamaño de ocupación del LOB lo necesitamos, pues vamos a crear un tablespace separado para almacenar los LOB en formato SecureFiles.
CREATE TABLE TABLA1
(empcod
NUMBER(2,0) NOT NULL,
ramcod NUMBER(2,0) NOT NULL,
solnro NUMBER(8,0) NOT NULL,
soldisins NUMBER(4,0) NOT NULL,
sol12txtcod NUMBER(15,0) NOT NULL,
sol12texto CLOB NOT NULL)
PCTFREE 10
INITRANS 1
MAXTRANS 255
TABLESPACE tb1_00_SMD
STORAGE (
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
)
NOCACHE
MONITORING
LOB ("SOL12TEXTO") STORE AS SYS_LOB0000100698C00006$$
(
TABLESPACE tb50_00_SMD_lob
STORAGE (
INITIAL 65536
NEXT 52428800
MINEXTENTS 1
MAXEXTENTS 2147483645
)
NOCACHE LOGGING
CHUNK 8192
)
NOPARALLEL
LOGGING
/
ALTER TABLE TABLA1
ADD PRIMARY KEY (empcod, ramcod, solnro, soldisins, sol12txtcod)
USING INDEX
PCTFREE 5
INITRANS 2
MAXTRANS 255
TABLESPACE ib1_00_SMD
STORAGE (
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
)
/
select count(*) from SMD.TABLA1
1093636
// Reviso cuanto pesa
la tabla
select bytes/1024/1024 "mb" from
dba_segments where segment_name like 'TABLA1' and owner='SMD'
728 MB
// Reviso si tiene
particiones
SELECT * FROM DBA_TAB_PARTITIONS WHERE TABLE_OWNER='SMD'
no
// Veo cuanto espacio
requiero a nivel de lob:
select a.owner, a.table_name, a.column_name, a.segment_name , b.bytes/1024/1024 MB
from dba_lobs a, dba_segments b
where a.segment_name = b.segment_name
and a.owner = b.owner
and a.owner= 'SMD'
and a.table_name='TABLA1'
order by b.bytes/1024/1024
SOL12TEXTO:
SYS_LOB00000100698C00006$$=16GB
Prueba de migración BF -> SF simple
A continuación se
arman los scripts y se realiza la prueba la migración de BasicFiles a SecureFiles simple (sin compresión ni
deduplicación)
1. Creación de tablespace
Script: /home/oracle/scripts/1.CreaTS.sql
::::::::::::::
1.CreaTS.sql
::::::::::::::
CREATE SMALLFILE TABLESPACE
"TB_SF" DATAFILE '/opt/oracle/oradata/prod/tb_sf01.dbf'
SIZE 1000M AUTOEXTEND ON NEXT 100M MAXSIZE
2000M LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;
2. Creación de table auxiliar
Script: /home/oracle/scripts/2.CreaTablaAux.sql
::::::::::::::
2.CreaTablaAux.sql
::::::::::::::
DROP TABLE SMD.AUXTABLA1;
CREATE TABLE SMD.AUXTABLA1
(empcod
NUMBER(2,0) NOT NULL,
ramcod
NUMBER(2,0) NOT NULL,
solnro
NUMBER(8,0) NOT NULL,
soldisins
NUMBER(4,0) NOT NULL,
sol12txtcod
NUMBER(15,0) NOT NULL,
sol12texto
CLOB NOT NULL)
PCTFREE 10
INITRANS 1
MAXTRANS 255
TABLESPACE tb1_00_SMD
STORAGE (
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS 2147483645
)
NOCACHE
MONITORING
LOB ("SOL12TEXTO") STORE AS SecureFile
(
TABLESPACE tb_sf
STORAGE (
INITIAL 65536
NEXT 52428800
MINEXTENTS 1
MAXEXTENTS 2147483645
)
NOCACHE LOGGING
CHUNK 8192
)
NOPARALLEL
LOGGING
/
3. Redefinición de la tabla
Script: /home/oracle/scripts/3.Redef.sql
::::::::::::::
3.Redef.sql
::::::::::::::
set timi on
spool logs/redef.log
exec dbms_redefinition.start_redef_table('SMD',
'TABLA1', 'AUXTABLA1','EMPCOD EMPCOD, RAMCOD RAMCOD, SOLNRO SOLNRO,
SOLDISINS SOLDISINS, SOL12TXTCOD SOL12TXTCOD,SOL12TEXTO
SOL12TEXTO');
exit
4. Copia de objetos dependientes
Script: /home/oracle/scripts/4.Depend.sql
::::::::::::::
4.Depend.sql
::::::::::::::
set timi on
spool on logs/depend.log
dbms_redefinition.copy_table_dependents('SMD',
'TABLA1', 'AUXTABLA1', 1, true, true, true, false, error_count);
exit
|
5.
Finalización:
intercambio de los nombres de las tablas
Script:
/home/oracle/scripts/5.Finish.sql
::::::::::::::
5.Finish.sql
::::::::::::::
set timi on
spool logs/finish.log
dbms_redefinition.finish_redef_table('SMD','TABLA1',
'AUXTABLA1');
exit
6.
Revisión
de los objetos dependientes de las tablas AUXTABLA1 (que ahora es la original)
y la tabla TABLA1T (que es la tabla migrada)
Vemos que no se creò la constraint de primary key aunque sì se creo el
unique index.
ALTER TABLE SMD.TABLA1
ADD PRIMARY KEY
(empcod, ramcod, solnro, soldisins, sol12txtcod)
7.
Revisión
del registro en la dba_lobs:
select
owner,table_name,column_name,securefile from dba_lobs where
column_name='SOL12TEXTO';
SQL> select owner,table_name,securefile
from dba_lobs where column_name='SOL12TEXTO';
OWNER TABLE_NAME SEC
------------------------------
------------------------------ ---
SMD TABLA1 YES
SMD AUXTABLA1 NO
Prueba de migración BF -> SF con compresión y deduplicación
1.
Borrado
de la tabla TABLA1 migrada
2.
Borrado
del log de la vista materializada de la tabla AUXTABLA1 (sino da: ERROR at line
1: ORA-26563:
renaming this table is not allowed)
DROP MATERIALIZED VIEW LOG ON SDM.MLOG$_TABLA1
3.
Renombramos
la tabla AUXTABLA1 como TABLA1
ALTER TABLE AUXTABLA1 RENAME TO TABLA1
4.
Copiamos
el script 2 y le agregamos el alter table compress y deduplicate
ALTER TABLE SMD.AUXTABLA1 MODIFY LOB
("SOL12TEXTO") ( COMPRESS HIGH DEDUPLICATE )
select OWNER,TABLE_NAME,
TABLESPACE_NAME,COMPRESSION,DEDUPLICATION from dba_lobs where
column_name='SOL12TEXTO'
5.
Revisamos
la tabla en la vista dba_lobs:
OWNER |
TABLE_NAME
|
TABLESPACE_NAME
|
COMPRESSION
|
DEDUPLICATION
|
SMD |
TABLA1
|
TB50_00_SMD_LOB
|
NONE
|
NONE
|
SMD |
AUXTABLA1
|
TB_SF
|
HIGH
|
LOB
|
6.
Luego
se corre el script :
nohup
./3.Redef.sh & (Tiempo del proceso 2.08 hs)
Se puede observar al monitorar que el tablespace se está llenando y el
proceso está corriendo normalmente.
7.
Ejecución
del script que migra las dependencias
./4.Depend.sh
8.
Ejecución
del script que intercambia los nombres de las tablas
./5.Finish.sh
9.
Ejecución
del script que agrega la PK
./6.AddPk.sql
10.
Ejecución
del script para revisar el espacio:
SQL> @7.RevisaEspacio.sql
Segment Name=SYS_LOB0000103121C00006$$
segment_size_blocks => 368656
segment_size_bytes => 3020029952
used_blocks => 346336
used_bytes => 2837184512
expired_blocks => 21737
expired_bytes => 178069504
unexpired_blocks => 0
unexpired_bytes => 0
Prueba de migración BF -> SF con deduplicación solamente
1.
Borrado
de la tabla TABLA1 migrada :
DROP TABLE SMD.TABLA1;
2.
Renombre
de la tabla AUXTABLA1 como TABLA1
ALTER TABLE SMD.AUXTABLA1 RENAME TO TABLA1;
3.
Copia
del script 2.CreaTablaAuxCompress.sql como 2.CreaTablaAuxDeduplicate.sql y borrado
del compress del alter table dejando sólo deduplicate;
4.
Ejecución
del script 2.CreaTablaAuxDeduplicate.sql
SQL>@2.CreaTablaAuxDeduplicate.sql
5.
Ejecución
del script que realiza la redefinición.
nohup ./3.Redef.sh & (Tiempo del proceso
2.24 hs)
6. Ejecución del script que migra las dependencias
./4.Depend.sh
7.
Ejecución
del script que intercambia los nombres de las tablas
./5.Finish.sh
8.
Ejecución
del script que agrega la PK
./6.AddPk.sql
9.
Corremos
7.RevisaEspacio.sql
SQL>
@7.RevisaEspacio.sql
Segment
Name=SYS_LOB0000103630C00006$$
segment_size_blocks => 1.035.792
segment_size_bytes => 8.485.208.064
used_blocks => 979520
used_bytes => 8024227840
expired_blocks => 55034
expired_bytes => 450838528
unexpired_blocks => 0
unexpired_bytes => 0
10.
Revisamos
la tabla en la dba_lobs:
OWNER TABLE_NAME TABLESPACE_NAME COMPRE DEDUPLICATION
------------------------------
------------------------------ ----------------------
SMD TABLA1 TB_SF NO
LOB
SMD AUXTABLA1 TB50_00_SMD_LOB NONE NONE
Resultados
A
continuación se muestran los resultados de la migración:
Prueba 1: Migración de Tabla TABLA1
|
|
Comparativo LOB
|
MB LOB
|
BF
|
16.510
|
SF
simple
|
16.510
|
SF
con deduplicación
|
8.092
|
SF
con compresión y deduplicación
|
2.880
|
Conclusiones:
Se puede observar que hay una disminución de un
50% del espacio utilizado al migrar el lob al formato Securefiles solamente con la deduplicación. Como la deduplicación calcula el hash del
lob, podría deducirse que la mayor parte de los lobs están duplicados.
El análisis de compresión y deduplicación
realizado para la tabla TABLA1 muestra una reducción de aproximadamente 5 veces
el tamaño ocupado con respecto a los datos sin comprimir.
No se observaron cambios en el uso del
espacio por migrar a SF simple.
Estos valores pueden variar según el contenido de las tablas, por lo cual no siempre se obtendrán estas tasas de reducción.
En este caso se utilizó una tabla con datos reales, y a partir de estos resultados el cliente optó por realizar la migración en ambientes de desarrollo y testing primero, para luego de un período de prueba, realizar la migración en producción.
Para más información consultar el post previo: Migración a SecureFiles.
Para más información consultar el post previo: Migración a SecureFiles.
No hay comentarios:
Publicar un comentario