Вы находитесь на странице: 1из 23

Arquivos temporários no

Banco de Dados

FRAMEWORK, MAIO 2015


HOJE
FALAREMOS
SOBRE
1. MOTIVO/ OBJETIVO
2. INFORMAÇÕES
1. PRÉ-REQUISITOS
2. CTREE BOUND SERVER
3. PREIMAGE NO SISTEMA COMO PADRÃO
4. ARQUIVO TEMPORÁRIO NO BANCO DE DADOS
3. ALTERAÇÕES
4. CONCLUSÃO

2
MOTIVOS / OBJETIVO
Motivos / Objetivos

• Cloudificação: Facilita o processo de


provisão de máquinas;

• File System: Ao retirar arquivos do file


system são solucionados problemas
de tamanho de arquivo, assim como Facilitar projeto de cloudificação Diminuir quantidade de arquivos locais
tempo de I/O;

• SGBD: É possível utilizar comandos


SQL diretamente nos arquivos
temporários;

• Performance: Ao utilizar queries o


tempo de instruções para manipulação
do arquivo diminui;
Utilizar recursos do SGBD Melhorar performance

4
INFORMAÇÕES
Pré-requisitos
INFORMAÇÕES
Pré-requisitos

• Versão 12.1.5 do Protheus;

• DbAccess com build igual ou superior à 20141119;

7
Ctree Bound Server
CTREE BOUND SERVER
O que é? Como habilitar?

• É um Ctree Server dentro do appserver, eliminando a necessidade de ter um Ctree Server


separado;

• Para habilitar basta configurar no arquivo appserver.ini a chave ctreemode com o valor
“boundserver”;

• Em ambientes que utilizam arquivos Ctree, será ligado um comportamento para arquivos
temporários criados pela função CriaTrab, diminuindo o tempo de I/O e portanto
conseguindo um ganho de performance.

ATENÇÃO: Aconselhamos a troca de arquivos temporários


locais para arquivos temporários no Banco de Dados.

9
CTREE BOUND SERVER
Conexão client

• A configuração do ctree bound server será feita através do arquivo ctsrvr.cfg que fica na
mesma pasta do appserver.exe

• Para habilitar a conexão de clientes, deverá ser configurada as seguintes chaves no


arquivo de configuração:

• Para efetuar a conexão de outros servers como cliente, basta utilizar a configuração
padrão:
Esta topologia ainda está sob testes
para verificação de concorrência de [CtreeServer]
gravação e de requisições no
CTUserId=ADMIN
appserver ctree bound server.
CTUserPass=ADMIN
CTServerName=FAIRCOMS@localhost
10
PREIMAGE
PREIMAGE

• Não se utiliza arquivo de log de transação, é feito em memória;

• Menor tempo de gravação em arquivos Ctree;

• Ligado comportamento para criação de arquivos na versão 12;

• Exceto dicionários e arquivos do sistema:


• FWTableDDL;
• __FileByTxt;
• dbCreate (ChkFile).

12
Arquivos temporários no Banco de
Dados
INFORMAÇÕES
Informações sobre arquivos
temporários no Banco de
Dados
• Os arquivos são criados em uma table space específica para arquivos temporários dentro
do Banco de Dados;

• Apenas a thread que cria consegue visualizar e alterar;

• Quando a thread sai, o arquivo é apagado. Porém, é uma boa prática apagar o arquivo
assim que termina de utilizá-lo.

• É possível utilizar comandos SQL diretamente na tabela, além de fazer JOIN com tabelas
existentes no Banco de Dados.

14
ALTERAÇÕES
ALTERAÇÕES
Criação de Arquivos
Temporários
A manipulação do arquivo temporário será feita através da classe FWTemporaryTable.

FWTemporaryTable():New( [cAlias] )

Para criar o arquivo, basta definir os campos, índices e utilizar o método Create.

Ao terminar a utilização do arquivo deve-se chamar o método Delete para fechar o alias, e excluir a o
arquivo.

oTempTable:Delete()
16
ALTERAÇÕES
Utilização em query.

É possível utilizar queries para manipulação, para isto é necessário saber o nome com que foi criado no
Banco. Para isso basta utilizar o método GetRealName:
cTableName := oTempTable:GetRealName()

Depois basta construir a query e executá-la:

17
ALTERAÇÕES
Facilitadores

Para efetuar a query utilizando o arquivo criado, é possível utilizar a função MPSysOpenQuery:
MPSysOpenQuery( cQuery , [cAlias] , [aSetField] ) -> cAlias

Com está função é possível já passar os campos para efetuar o TcSetField, facilitando o uso de queries.

18
ALTERAÇÕES
Facilitadores

Será possível efetuar a carga de uma tabela baseada em um SELECT de outra tabela, utilizando o conceito de
INSERT INTO SELECT. Com isto será facilitado a carga da tabela.

Caso o select preencha todos os campos, poderá ser utilizado o seguinte método:

oTempTable:InsertSelect( RetSqlName("CT0") , { "CT0_DESC", "CT0_CONTR", "CT0_ALIAS" } )

Caso não sejam todos os campos a serem preenchidos, deverá ser chamado o seguinte método:

oTempTable:InsertIntoSelect( {"DESCR", "CONTR" } , RetSqlName("CT0") , { "CT0_DESC", "CT0_CONTR" } )

19
CONCLUSÃO
CONCLUSÃO
Testes de comparação

Foram efetuados testes de inclusão de 250mil registros, o resultado é apresentado abaixo:

Tipo de Gravação Tempo em segundos


Ctree Bound Server – 10.024
preimage
Ctree Bound Server 11483.171
Temp_db SQL local TcSqlExec de 1000 em 1000 linhas 1.845
TcSqlExec linha por linha 77.348
DbAppend() + DbRUnlock() 91.256

21
CONCLUSÃO
O que revisar?

• Rotinas que criam arquivos temporários através da função CriaTrab,


começarem a ser migradas para FWTemporaryTable.

• Como não é criado arquivo físico, não será possível utilizer funções
específicas para este tipo de arquivo, como por exemplo Frename().

• Utilização de queries sempre que possível, para melhorar o desempenho.

22
ARTHUR FÜCHER
Framework-SP

Obrigado ;)

Вам также может понравиться