Professional Documents
Culture Documents
Resumo
Neste artigo apresenta-se um levantamento bibliogrfica com referncias contemporneas
para o banco de dados Oracle 12c, bem como a realizao de testes prticos de distintas
cargas de dados, a fim de se obterem parmetros que possam auxiliar a um desenvolvedor na
escolha da melhor tcnica para se implementar tal funcionalidade. Como metodologia,
realizada uma pesquisa exploratria com coleta de dados por meio da pesquisa bibliogrfica e
experimental no qual os dados coletados com os ensaios so apresentados e discutidos
comparativamente. Com os resultados, pode-se observar os diferentes comportamentos das
tecnologias de cargas de dados com os distintos cenrios apresentados, o qual pode-se
concluir que diferentes situaes do dia-a-dia vo exigir diferentes tcnicas de
implementao, a fim de se obter o aproveitamento mximo dos recursos computacionais
disponveis.
Palavras-chave: Oracle 12c. Melhorias SQL. Carga de Dados.
Introduo
A crescente demanda pelo armazenamento de informaes de maneira computacional
integrados em tempo real para atendimento da necessidade dos usurios, enquanto outros
dados uma espera de at uma semana pode ser aceitvel.
Neste sentido, neste trabalho destina-se a apresentar um estudo e levantamento terico
de boas prticas de administrao de dados, tais como otimizaes nas construes de SQLs,
melhoria na parametrizao de ndices e otimizaes gerais para melhoria do desempenho de
aplicaes e de cargas de dados que so comuns ao dia-a-dia dos usurios e administradores
de bases de dados Oracle.
Para o estudo terico sobre o Oracle 12c, foram apontadas diferentes bibliografias
contemporneas, as quais buscam enfatizar as diferenas do mesmo com o seu antecessor, o
Oracle 11g.
A metodologia adotada para este artigo ser uma pesquisa exploratria com coleta de
dados por meio de pesquisa bibliogrfica e experimental. O experimento ser realizado por
meio de testes de carga de pequeno e mdio porte com os softwares Oracle 12c no ambiente
Windows 8.1. Os resultados sero apresentados na forma de um quadro comparativo.
2.1
Arquitetura Multi-Inquilino
A arquitetura da base de dados Oracle 12c Release 1 permite a configurao de vrias
sub-bases de dados dentro de uma nica base de dados superior. Este conceito foi denominado
de Continer de Base de Dados Multi-Inquilo (Multitenant Container Database ou
Consolidated Database (CDB)) suporta at 252 sub-bases, intituladas como Banco de Dados
Plugveis (Pluggable Database PDB) (LLEWELLYN, 2013) (ASHDOWN e KYTE,
2014).
Um PDB representa um conjunto de schemas, objetos schemas e objetos non-schema
que so vistos pelas sesses via Oracle Net Client como sendo uma base non-CDB, ou seja,
de forma convencional (ASHDOWN e KYTE, 2014). Na Figura 1 ilustra-se esta arquitetura.
2.2
Gerenciamento de Usurios
Em uma arquitetura CDB, possvel tanto criar usurios comuns quanto usurios
locais (HUEY, 2014). O usurio comum, que deve ser nomeado com o prefixo C##, um
usurio conhecido pela raiz e por toda as PDBs. Estes usurios conectam diretamente raiz, e
podem possuir privilgios em um PDB. J o usurio local, que no pode ser nomeado com o
prefixo C##, conhecido apenas em um PDB especfico.
2.3
ndices
Um ndice uma estrutura opcional que pode ser criado relacionando-se a uma ou
2.4
Diretrios
Os diretrios correspondem ponte entre o banco de dados Oracle e leitura e escrita
em arquivos do sistema operacional. Estes objetos provm uma camada de abstrao entre o
usurio e o sistema operacional (WATSON, 2014).
2.5
Estruturas de Armazenamento
Uma das caractersticas de um RDBMS a independncia entre as estruturas fsicas e
2.5.1 Tablespace
uma unidade de armazenamento do banco de dados para agrupamento de estruturas
lgicas, que contm muitos segmentos e muitos datafiles (ASHDOWN e KYTE, 2014),
conforme demonstrado na Figura 3.
Figura 3. Distribuio das estruturas lgicas por entre as estruturas de armazenamento fsicas e lgicas.
2.5.2 Segmento
Representa qualquer objeto do banco de dados que armazena dados e requer espao
fsico. Os segmentos tpicos so ndices e tabelas. Um segmento deve pertencer a um nico
tablespace, mas o tablespace pode ser dividido em vrios datafiles (ASHDOWN e KYTE,
2014), conforme demonstrado na Figura 3.
2.5.3 Extenso
O gerenciamento bloco a bloco pode tornar-se uma tarefa rdua, por isto os blocos so
agrupados em extenses. Uma extenso um conjunto de enumerados blocos Oracle
pertencentes a um datafile. Cada segmento consiste em uma ou mais extenses, tambm
enumeradas (ASHDOWN e KYTE, 2014).
2.5.5 Datafile
um arquivo fsico no disco que criado pelo banco de dados Oracle, e contm dados
e estruturas, tais como tabelas e ndices (ASHDOWN e KYTE, 2014).
2.6
Shared Pool
A tecnologia Shared Pool do banco de dados Oracle pode armazenar e provisionar
diferentes tipos de dados, incluindo blocos PL/SQL e SQL, a qual pode gerar benefcios. Se
um comando SQL est no Shared Pool, parte da etapa de interpretao do comando omitida,
onde as informaes ficam disponveis para reutilizaes, reduzindo consumo de CPU e de
I/O (CHAN, 2014) (ALAPATI, KUHN e PADFIELD, 2013).
2.7
Movendo Dados
Uma das comuns necessidades em um ambiente de banco de dados movimentar estes
dados de um local para outro. Para estas demandas, a base de dados Oracle prov diversas
maneiras para realizar esta operao: Datapump, SQL*Loader, Ligaes de Bancos de Dados
ou Tabelas Externas (WATSON, 2014), os quais sero apresentados nas subsees seguintes.
2.8
Tabelas Externas
Conforme a definio de OHEARN (2010), uma tabela externa a uma tabela onde a
sua definio (metadado) est no banco de dados, porm a tabela em si (contedo) reside fora
do banco de dados, proporcionando como uma das vantagens e principal benefcio a
facilidade de configurao e manipulao de dados que a mesma possibilita (OHEARN,
2010).
Para se declarar uma tabela externa, necessrio explicitar o metadado da tabela, o
nome e diretrio do arquivo externo e o driver de acesso e seus parmetros, conforme
demonstrado na Figura 6.
2.9
Data Pump
Segundo THOMAS (2014), o Oracle Data Pump mecanismo de alta velocidade para
transferir dados ou metadados de uma base de dados Oracle para outra. Este utilitrio um
executado do lado do servidor, e por isto tem acesso direto aos datafiles melhorando
drasticamente o desempenho (WATSON, 2014).
Os arquivos dump gerados pela exportao contm marcaes em XML, e isto pode
implicar em um overhead considervel dependendo da tabela. Desproporcionalmente maior
para tabelas menores, porm desconsiderveis para tabelas maiores (WATSON, 2014).
O Data Pump possui dois mtodos para carga e descarga de dados: caminho direto e
caminho de tabela externa. Para importar pelo mtodo do caminho direto, o Data Pump l do
arquivo de dump, usa o contedo para criar blocos de dados e os escreve diretamente no
datafile. J no mtodo tabela externa, o Data Pumo constri SQL Inserts do contedo do
arquivo de dump que est sendo lido e os executa pelo processo normal. A definio de um
mtodo ou outro que ser utilizado transparente para o usurio e depende da complexidade
da tabela que est sendo carregada/descarregada (ASHDOWN e KYTE, 2014).
2.10
SQL*Loader
A tecnologia de troca de dados entre diferentes bases disponvel no Oracle o
SQL*Loader, no qual um processo como os demais e ser requerido para ler dados gerados
por outras bases, desde que o formato seja compatvel (ROESER, 2013).
Para o carregamento de informaes, existem duas tcnicas: convencional e o caminho
direto. O mtodo convencional converte as linhas do arquivo lido em comandos INSERT.
Este mtodo usa o cache do banco e gera segmentos de UNDO e REDO. O comando
COMMIT deve ser realizado para efetuar a modificao no banco (ROESER, 2013).
J o mtodo caminho direto, ao contrrio do mtodo convencional, ignora o buffer
cache. O SQL*Loader neste caso acessa l o contedo do arquivo e envia-o para o processo
no servidor. Este processo monta blocos de tabelas na PGA e escreve estes dados diretamente
nos datafiles (ROESER, 2013).
Otimizao de Consultas
3.1
configurao do mesmo pode maximizar ainda mais o desempenho do banco de dados. Cada
coluna pode ser classificada de uma maneira diferente de outra em funo dos dados que ela
tende a possuir (ASHDOWN, 2014).
O banco de dados Oracle 12c prov uma variedade de opes para criao de ndices.
Estes aspectos so demostrados nas subsees seguintes (CHAN, 2014) (ALAPATI, KUHN e
PADFIELD, 2013):
B-tree Function-based Index: til para colunas que possuem SQLs com
funes, no qual o resultado um valor de alta cardinalidade, por exemplo,
formatar um texto (ASHDOWN, 2014).
Bitmap Function-based Index: til para colunas que possuem SQLs com
funes, no qual o resultado um valor de baixa cardinalidade, por exemplo,
pegar a primeira letra de um texto (OHEARN, 2010).
Criar uma chave primria para a tabela onde um ndice nico ser criado.
3.2
de SQL mal escritos. Uma boa estruturao destes comandos est diretamente relacionada ao
uso eficiente dos recursos, e desta forma contribuindo para melhoria do desempenho do banco
10
de dados como um todo. Alm disso, uma boa estruturao nestes comandos contribui para
facilitar a manuteno das aplicaes (ALAPATI, KUHN e PADFIELD, 2013).
Neste sentido, um recurso para melhoria de desempenho disponvel pela Oracle o
reuso do parsing do SQL por meio do Shared Pool (ASHDOWN, 2014).
O Shared Pool o local onde as estruturas que compe o resultado final desse
processo de so memorizadas e compartilhadas por entre os usurios do banco de dados, j o
parser o artifcio que interpreta o comando SQL e cria um plano de execuo para o mesmo.
Este processo tem muitas etapas, tais como verificao de sintaxe e segurana (ALAPATI,
KUHN e PADFIELD, 2013). No Oracle 12c, existem dois tipos de operaes de parsing:
Hard Parsing: Quando um comando SQL utilizado pela primeira vez todas as etapas
do parsing so executadas. Este processo o mais custoso.
Soft Parsing: Quando um comando SQL re-utilizado, parte do processo feito no hard
parsing aproveitada atravs do Shared Pool, gerando uma melhoria de desempenho.
Somente as etapas de verificao as sintaxe e segurana so realizadas.
O processo de parsing deve ser minimizado do tanto quanto for possvel e cabe aos
Experimentos
Neste captulo so apresentadas e demonstradas as etapas que foram realizadas no
11
4.1
Configuraes Iniciais
Todos os experimentos foram realizados no ambiente Sistema Operacional Windows
8.1, 64-bit, em ingls, recm instalado, em um computador Processador Intel Core i5 4200U
4 Gerao 8GB de memria DDR3 1600MHZ contendo um Solid State Drive (SSD) de 256
GB. A verso do banco de dados Oracle 12c a 12.1.0.1.0 Enterprise Edition para Microsoft
Windows 64 bits, o qual foi baixada sobre a licena de desenvolvimento, testes, prototipao
e demonstrao OTN (Oracle Technology Network).
Nas subsees seguintes apresentam-se os componentes de reuso dos experimentos, os
quais serviro como facilitadores para a execuo dos mesmos.
4.1.2 Conexes
Para configurao de conexes base de dados, duas entradas no arquivo
TNSNAMES.ORA sero criadas, conforme Figura 7.
12
4.1.3 Tabelas
O experimento consiste no translado de dados de um lado para outro com distintos
tamanhos, nmero de linha e nmero de colunas. Sero realizados 4 experimentos seguindo a
mesma metodologia adotada para os demais. Neste sentido, nesta etapa sero criadas 4 tabelas
vazias em ambos PDBs.
Para os experimentos, foram geradas quatro tabelas, sendo as nomeadas em
TABELA_10MB_1COL e TABELA_100MB_1COL possuindo 1 coluna com o tamanho 16
caracteres
alfanumricos
do
tipo
VARCHAR2(16),
as
outras
nomeadas
em
13
Tabela
N de Linhas
TABELA_10MB_1COL
TABELA_10MB_10COL
TABELA_100MB_1COL
TABELA_100MB_10COL
N de Colunas
655360
65536
6553600
655360
1
10
1
10
Tamanho
10MB
10MB
100MB
100MB
Na sequncia, foram gerados arquivos CSV no diretrio DIRPRD com estes dados,
para utilizao no experimento com tabelas externas. Os nomes dos arquivos so
ARQUIVO_10MB_1COL.csv,
ARQUIVO_10MB_10COL.csv,
das
tabelas
TABELA_10MB_1COL,
TABELA_10MB_10COL,
14
4.2
Metodologia
Cada uma das cargas ser executada sequencialmente para uma carga de 5000MB.
Para isto, o nmero de execues foi ajustado para cada uma das tabelas de teste, de modo a
que seja verificado ao final estatsticas que sero comparados aos outros mtodos. Ao final, o
tempo total da execuo ser coletado e apresentado em um quadro comparativo.
Em todos os cenrios, os testes sero executados por um bloco PL/SQL ou por script
Windows Batch File, que faro o controle das execues, e em todos os experimentos o tempo
da primeira execuo do teste descartado.
Para as cargas de 10MB, sero mensurados os tempos de execuo de um lote de 500
execues, e para as cargas de 100MB o lote de 50, totalizando 5000MB para todos os
experimentos.
Para a execuo dos experimentos, foram criados blocos em PL/SQL para realizar a
chamada das cargas, conforme descrito no apndice no Exemplo 3.
Na sequncia, cada um dos experimentos executado o nmero de vezes suficiente
para que se obter uma carga total de 5000MB, conforme Exemplo 5 no apndice.
15
sero
nomeados
TABELA_10MB_1COL,
TABELA_100MB_10COL,
preenchidos
com
TABELA_10MB_10COL,
com
os
nomes,
base
os
dados
da
tabela
TABELA_100MB_1COL
DUMP_10MB_1COL.DMP,
16
4.2.4 SQL*Loader
O SQL*Loader requer que a sua execuo seja via linha de comando e que sejam
criados arquivos de controle com as configuraes de execuo, os quais so demonstradas
em Exemplo 15, Exemplo 16, Exemplo 17 e Exemplo 18 no apndice.
Na sequncia, cada um dos experimentos foi executado o nmero de vezes suficiente
para que se obtivesse uma carga total de 5000MB, conforme apndice Exemplo 19 em
Windows Batch File.
100 MB
1 Coluna
10 Colunas
1 Coluna
10 Colunas
Ligao de
Banco de Dados
715
450
668
350
Tabela Externa
523
221
223
155
388
286
331
172
2027
2014
195
195
501
240
306
140
17
Para o experimento de Ligao de Banco de Dados, os tempos para carga foram 715,
450, 668 e 350 segundos. J para o Tabela Externa foram 523, 221, 223, 155 segundos. Na
utilizao do Data Pump via Tabela Externa os tempos foram 388, 286, 331 e 172 segundos.
J para Data Pump via IMPDP os tempos foram 2027, 2014, 195, 195 segundos. Para o
SQL*Loader os tempos foram 501, 240, 306 e 140 segundos para as cargas de 10MB 1
coluna, 10MB 10 colunas, 100MB 1 coluna e 100MB 10 colunas, respectivamente.
Na Figura 12 demonstrado o throughtput em mb/s obtido com os experimentos.
O maior throughtput foi obtido por meio da tecnologia SQL*Loader carga 100MB de
10 colunas que obteve uma velocidade mdia de 35,7 mb/s. J a menor velocidade foi por
meio da tecnologia Data Pump IMPDP para a carga 10MB, o qual apresentou o valor de 2,5
mb/s.
Segundo anlises, o uso de um mesmo conjunto de dados, porm em linhas ao invs
de colunas, tem um comportamento diferente de desempenho para as diferentes tecnologias.
Para o Ligao de Banco de Dados, a converso de linhas para colunas oferece um
ganho de 59% em tempo para 10MB e 91% para 100MB. J o Tabela Externa o ganho de
137% para 10MB e 44% para 100MB. Com o Data Pump via Tabela Externa, o ganho foi de
36% para 10MB e 92% para 100MB, j o Data Pump com IMPDP no houve ganho
considervel para as diferentes cargas. Para o SQL*Loader o ganho foi de 109% para a carga
de 10MB e 119% para a carga de 100MB.
18
Concluses
possvel notar, a partir dos resultados dos experimentos, que duas massas de dados
de mesmo tamanho, porm com uma diferente distribuio, possuem resultados distintos, no
qual o arquivo com maior nmero de linhas tem um desempenho inferior ao arquivo de
mesmo tamanho com maior nmero de colunas.
A estratgia DBLINK por sua vez apresenta vantagens com relaes facilidade de
configurao e a necessidade de se possurem os dados atualizados constantemente, porm, o
fator de rede que no foi avaliado pode se tornar um vilo para grandes volumes de dados.
Os experimentos com Tabelas Externas possuem configurao simples, e o
desempenho apresentado para pequenas e mdias cargas foi mediano comparado aos seus
concorrentes.
J a estratgia de Data Pump utilizando a API PL/SQL demonstrou uma configurao
complexa, e resultados poucos satisfatrios para pequenos conjuntos de dados. Por outro lado,
o Data Pump utilizando Tabelas Externas se demonstrou de fcil configurao e eficiente
tambm para pequenos e mdios conjuntos de dados, entretanto sua aplicao muito
especfica.
O SQL*Loader por sua vez, demonstrou o melhor desempenho mdio dentre os
experimentos. Sua configurao fcil, entretanto, o mesmo no possui uma API em PL/SQL
para que sua chamada seja realizada internamente ao banco Oracle, facilitando o acesso a sua
configurao.
Abstract
This paper presents a literature review of contemporary references to the Oracle 12c database
as well as conducting practical tests for different data loads to obtain parameters that can
assist a developer in choosing the best technique for to implement data loading. As a
methodology, an exploratory study with data collection through literature and experimental
research in which data collected from the tests are presented and discussed in comparison is
performed. From the results, it is possible to conclude that the different behavior of the load
data with the technologies presented different scenarios, which different situations will
require different implementation techniques in order to obtain the maximum utilization of
available computational resources.
Palavras-chave: Oracle 12c, SQL Improvements, Data Loading.
19
Referncias
ALAPATI, S. R.; KUHN, D.; PADFIELD, B. Oracle Database 12c Performance
Tuning Recipes. [S.l.]: Apress, 2013.
ASHDOWN, L. Oracle Database SQL Tuning Guide 12c Release 1 (12.1). [S.l.]:
Oracle, 2014.
ASHDOWN, L.; KYTE, T. Oracle Database Concepts 12c Release 1 (12.1). [S.l.]:
Oracle, 2014.
CHAN, I. Oracle Database Performance Tuning Guide 12c Release 1 (12.1). [S.l.]:
Oracle, 2014.
HUEY, P. Oracle Database Security Guide 12c Release 1 (12.1). [S.l.]: Oracle,
2014.
LLEWELLYN, B. Oracle Multitenant. An Oracle White Paper, Redwood Shores,
CA, 2013.
OHEARN, S. OCA Oracle Database SQL Certified Expert Exam Guide. [S.l.]:
Oracle Press, 2010.
ROESER, M. B. Oracle Database SQL Language Reference 12c Release 1 (12.1).
[S.l.]: Oracle, 2013.
URBANO, R. Oracle Database Administrator's Guide 12c Release 1 (12.1). [S.l.]:
Oracle, 2014.
WATSON, J. OCA Oracle Database 12c Installation and Administration Exam
Guide. [S.l.]: McGraw-Hill, 2014.
Glossrio
CDB: Container Database Continer de Banco de Dados.
Datafile: Arquivo de Dados.
Datapump: Injeo de Dados.
PDB: Pluggable Database Banco de Dados Plugvel.
MB: Megabytes.
20
Apndice
CREATE PLUGGABLE DATABASE PDBTST
ADMIN USER TSTADM IDENTIFIED BY TSTADM ROLES = (dba)
DEFAULT TABLESPACE users
DATAFILE 'C:\app\DouglasNandi\oradata\orcl\pdbtst\pdbtst01.dbf' SIZE
10000M AUTOEXTEND ON
FILE_NAME_CONVERT = ('C:\app\DouglasNandi\oradata\orcl\pdbseed\',
'C:\app\DouglasNandi\oradata\orcl\pdbtst\');
ALTER PLUGGABLE DATABASE PDBTST OPEN READ WRITE;
ALTER SESSION SET CONTAINER = PDBTST;
GRANT ALL PRIVILEGES TO TSTADM;
ALTER SESSION SET CONTAINER = CDB$ROOT;
CREATE PLUGGABLE DATABASE PDBPRD
ADMIN USER PRDADM IDENTIFIED BY PRDADM ROLES = (dba)
DEFAULT TABLESPACE users
DATAFILE 'C:\app\DouglasNandi\oradata\orcl\pdbprd\pdbprd01.dbf' SIZE
10000M AUTOEXTEND ON
FILE_NAME_CONVERT = ('C:\app\DouglasNandi\oradata\orcl\pdbseed\',
'C:\app\DouglasNandi\oradata\orcl\pdbprd\');
ALTER PLUGGABLE DATABASE PDBPRD OPEN READ WRITE;
ALTER SESSION SET CONTAINER = PDBPRD;
GRANT ALL PRIVILEGES TO PRDADM;
Exemplo 1. Comando para criao do PDBPRD e PDBTST
sqlplus TSTADM/TSTADM@PDBTST
SET TERMOUT OFF
set embedded on
set pagesize 0
set colsep '|'
set echo off
set feedback off
set linesize 1000
set trimspool on
set headsep of
set feedback off
set heading off
set echo off
SPOOL 'C:\DIRPRD\ARQUIVO_10MB_1COL.CSV';
select COL1 from TABELA_10MB_1COL;
SPOOL OFF;
SET
set
set
set
set
set
set
TERMOUT OFF
embedded on
pagesize 0
colsep '|'
echo off
feedback off
linesize 1000
21
set trimspool on
set headsep of
set feedback off
set heading off
set echo off
SPOOL 'C:\DIRPRD\ARQUIVO_100MB_1COL.CSV';
select COL1 from TABELA_100MB_1COL;
SPOOL OFF;
SET TERMOUT OFF
set embedded on
set pagesize 0
set colsep '|'
set echo off
set feedback off
set linesize 1000
set trimspool on
set headsep of
set feedback off
set heading off
set echo off
SPOOL 'C:\DIRPRD\ARQUIVO_10MB_10COL.CSV';
select
COL1||','||COL2||','||COL3||','||COL4||','||COL5||','||COL6||','||COL7||','
||COL8||','||COL9||','||COL10 from TABELA_10MB_10COL;
SPOOL OFF;
SET TERMOUT OFF
set embedded on
set pagesize 0
set colsep '|'
set echo off
set feedback off
set linesize 1000
set trimspool on
set headsep of
set feedback off
set heading off
set echo off
SPOOL 'C:\DIRPRD\ARQUIVO_100MB_10COL.CSV';
select
COL1||','||COL2||','||COL3||','||COL4||','||COL5||','||COL6||','||COL7||','
||COL8||','||COL9||','||COL10 from TABELA_100MB_10COL;
SPOOL OFF;
22
begin
for j in 1..10 loop
for LINHAS in 1..65536 loop
for x in 1..10 loop
insert /*+ APPEND */ into TABELA_100MB_1COL(COL1)
values(DBMS_RANDOM.STRING('x',16));
end loop;
insert /*+ APPEND */ into
TABELA_100MB_10COL(COL1,COL2,COL3,COL4,COL5,COL6,COL7,COL8,COL9,COL10)
values(DBMS_RANDOM.STRING('x',16),DBMS_RANDOM.STRING('x',16),
DBMS_RANDOM.STRING('x',16),DBMS_RANDOM.STRING('x',16),
DBMS_RANDOM.STRING('x',16),DBMS_RANDOM.STRING('x',16),
DBMS_RANDOM.STRING('x',16),DBMS_RANDOM.STRING('x',16),
DBMS_RANDOM.STRING('x',16),DBMS_RANDOM.STRING('x',16));
end loop;
commit;
end loop;
insert /*+ APPEND */ into TABELA_10MB_1COL (COL1) select COL1 from
TABELA_100MB_1COL where ROWNUM <= 655360;
commit;
insert /*+ APPEND */ into TABELA_10MB_10COL
(COL1,COL2,COL3,COL4,COL5,COL6,COL7,COL8,COL9,COL10) select
COL1,COL2,COL3,COL4,COL5,COL6,COL7,COL8,COL9,COL10 from
TABELA_100MB_10COL where ROWNUM <= 65536;
23
commit;
end;
Exemplo 4. Gerao da massa de dados para os experimentos.
24
TERMINATED BY ',' ( COL1 char,COL2 char,COL3 char, COL4 char,COL5
char,COL6 char, COL7 char,COL8 char,COL9 char, COL10 char)) location
('ARQUIVO_100MB_10COL.CSV'));
Exemplo 6. Comando para Criao das Tabelas Externas.
25
CARREGA_EXT_100MB_1COL;
startTime := systimestamp;
for J in 1..50 loop CARREGA_EXT_100MB_1COL; end loop;
dbms_output.put_line((systimestamp-startTime)||'=ET_100MB_1COL');
CARREGA_EXT_100MB_10COL;
startTime := systimestamp;
for J in 1..50 loop CARREGA_EXT_100MB_10COL; end loop;
dbms_output.put_line((systimestamp-startTime)||'=ET_100MB_10COL');
end;
/
Exemplo 8. Bloco PL/SQL para controle das chamadas.
26
end;
/
create or replace procedure carrega_ext_dmp_10mb_10col is
begin
execute immediate 'truncate table tabela_10mb_10col';
insert /*+ APPEND */ into tabela_10mb_10col
(col1,col2,col3,col4,col5,col6,col7,col8,col9,col10) select
col1,col2,col3,col4,col5,col6,col7,col8,col9,col10 from
TABELA_DUMP_10MB_10COL;
commit;
end;
/
create or replace procedure carrega_ext_dmp_100mb_1col is
begin
execute immediate 'truncate table tabela_100mb_1col';
insert /*+ APPEND */ into tabela_100mb_1col (col1) select col1 from
TABELA_DUMP_100MB_1COL;
commit;
end;
/
create or replace procedure carrega_ext_dmp_100mb_10col is
begin
execute immediate 'truncate table tabela_100mb_10col';
insert /*+ APPEND */ into tabela_100mb_10col
(col1,col2,col3,col4,col5,col6,col7,col8,col9,col10) select
col1,col2,col3,col4,col5,col6,col7,col8,col9,col10 from
TABELA_DUMP_100MB_10COL;
commit;
end;
/
Exemplo 11. Procedimentos para carga das tabelas externas Data Pump.
27
startTime := systimestamp;
for j in 1..50 loop CARREGA_EXT_DMP_100MB_10COL; end loop;
dbms_output.put_line((systimestamp-startTime)||'=DPET_100MB_10COL');
end;
/
Exemplo 12. Procedimento para Gerar Estatsticas de Execuo.
28
29
LOAD DATA INFILE 'c:\DIRPRD\ARQUIVO_100MB_10COL.CSV'
TRUNCATE INTO TABLE TABELA_100MB_10COL FIELDS TERMINATED BY ','
TRAILING NULLCOLS (COL1 char,COL2 char,COL3 char, char,COL5 char,COL6
char, COL7 char,COL8 char,COL9 char, COL10 char)
Exemplo 18.Arquivo LOADER_100MB_10COL.CTL
@echo off
sqlldr PRDADM/PRDADM@PDBPRD CONTROL=LOADER_10MB_1COL.CTL SILENT=ALL
DIRECT=Y
set STARTTIME=%TIME%
for /l %%x in (1, 1, 500) do (
sqlldr PRDADM/PRDADM@PDBPRD CONTROL=LOADER_10MB_1COL.CTL SILENT=ALL
DIRECT=Y
)
set ENDTIME=%TIME%
set /A STARTTIME=(1%STARTTIME:~0,2%-100)*360000 + (1%STARTTIME:~3,2%100)*6000 + (1
%STARTTIME:~6,2%-100)*100 + (1%STARTTIME:~9,2%-100)
set /A ENDTIME=(1%ENDTIME:~0,2%-100)*360000 + (1%ENDTIME:~3,2%-100)*6000
+ (1%ENDTIME:~6,2%-100)
*100 + (1%ENDTIME:~9,2%-100)
set /A DURATION=%ENDTIME%-%STARTTIME%
echo %DURATION% milliseconds to run LOADER_10MB_1COL
sqlldr PRDADM/PRDADM@PDBPRD CONTROL=LOADER_10MB_10COL.CTL SILENT=ALL
DIRECT=Y
set STARTTIME=%TIME%
for /l %%x in (1, 1, 500) do (
sqlldr PRDADM/PRDADM@PDBPRD CONTROL=LOADER_10MB_10COL.CTL SILENT=ALL
DIRECT=Y
)
set ENDTIME=%TIME%
set /A STARTTIME=(1%STARTTIME:~0,2%-100)*360000 + (1%STARTTIME:~3,2%100)*6000 + (1
%STARTTIME:~6,2%-100)*100 + (1%STARTTIME:~9,2%-100)
set /A ENDTIME=(1%ENDTIME:~0,2%-100)*360000 + (1%ENDTIME:~3,2%-100)*6000
+ (1%ENDTIME:~6,2%-100)
*100 + (1%ENDTIME:~9,2%-100)
set /A DURATION=%ENDTIME%-%STARTTIME%
echo %DURATION% milliseconds to run LOADER_10MB_10COL
sqlldr PRDADM/PRDADM@PDBPRD CONTROL=LOADER_100MB_1COL.CTL SILENT=ALL
DIRECT=Y
set STARTTIME=%TIME%
for /l %%x in (1, 1, 50) do (
sqlldr PRDADM/PRDADM@PDBPRD CONTROL=LOADER_100MB_1COL.CTL SILENT=ALL
DIRECT=Y
)
set ENDTIME=%TIME%
set /A STARTTIME=(1%STARTTIME:~0,2%-100)*360000 + (1%STARTTIME:~3,2%100)*6000 + (1
%STARTTIME:~6,2%-100)*100 + (1%STARTTIME:~9,2%-100)
set /A ENDTIME=(1%ENDTIME:~0,2%-100)*360000 + (1%ENDTIME:~3,2%-100)*6000
+ (1%ENDTIME:~6,2%-100)
*100 + (1%ENDTIME:~9,2%-100)
set /A DURATION=%ENDTIME%-%STARTTIME%
echo %DURATION% milliseconds to run LOADER_100MB_1COL
sqlldr PRDADM/PRDADM@PDBPRD CONTROL=LOADER_100MB_10COL.CTL SILENT=ALL
DIRECT=Y
30
set STARTTIME=%TIME%
for /l %%x in (1, 1, 50) do (
sqlldr PRDADM/PRDADM@PDBPRD CONTROL=LOADER_100MB_10COL.CTL SILENT=ALL
DIRECT=Y
)
set ENDTIME=%TIME%
set /A STARTTIME=(1%STARTTIME:~0,2%-100)*360000 + (1%STARTTIME:~3,2%100)*6000 + (1
%STARTTIME:~6,2%-100)*100 + (1%STARTTIME:~9,2%-100)
set /A ENDTIME=(1%ENDTIME:~0,2%-100)*360000 + (1%ENDTIME:~3,2%-100)*6000
+ (1%ENDTIME:~6,2%-100)
*100 + (1%ENDTIME:~9,2%-100)
set /A DURATION=%ENDTIME%-%STARTTIME%
echo %DURATION% milliseconds to run LOADER_100MB_10COL
Exemplo 19. Executvel LOADER.BAT para controle de Chamadas ao SQL*Loader.