Histórico da Página
Ambientes Protheus e o banco de dados MSSQL Server
Ao criar um banco de dados para uso do Protheus, muitos ambientes foram montados com apenas um datafile (arquivo de dados) e um filegroup (grupo de arquivos) no banco de dados MSSQL Server. Com o decorrer do uso do produto, este cenário pode decorrer em perda de performance, já que o arquivo crescerá conforme novos dados são inseridos; consequentemente, o banco levará mais tempo para inserir registros em tabelas, ou para retornar informações necessárias.
Esta página foi elaborada com o intuito de garantir a melhor experiência de uso do ERP Protheus e a adoção de boas práticas de mercado ao se configurar um banco de dados. Aqui, será demonstrado como mover índices não cluster do filegroup (grupo de arquivos) “Primary” para o filegroup “Secondary”, e como mover tabelas de um datafile (arquivo físico) para outros dois arquivos.
A fabricante (Microsoft) indica que ao criar o índice não-cluster em um filegroup diferente, você pode obter ganhos de desempenho se os filegroups estiverem usando unidades físicas diferentes com seus próprios controladores.
title | Tabelas informativas: arquivos e grupos de arquivos |
---|
Segundo a documentação oficial do MSSQL Server, o SGBD possui três tipos de arquivos:
E também possui diferentes grupos de arquivos:
Ambientes Protheus e o banco de dados MSSQL Server
Ao criar um banco de dados para uso do Protheus, muitos ambientes foram montados com apenas um datafile (arquivo de dados) e um filegroup (grupo de arquivos) no banco de dados MSSQL Server. Com o decorrer do uso do produto, este cenário pode decorrer em perda de performance, já que o arquivo crescerá conforme novos dados são inseridos; consequentemente, o banco levará mais tempo para inserir registros em tabelas, ou para retornar informações necessárias.
Esta página foi elaborada com o intuito de garantir a melhor experiência de uso do ERP Protheus e a adoção de boas práticas de mercado ao se configurar um banco de dados. Aqui, será demonstrado como mover índices não cluster do filegroup (grupo de arquivos) “Primary” para o filegroup “Secondary”, e como mover tabelas de um datafile (arquivo físico) para outros dois arquivos.
A fabricante (Microsoft) indica que ao criar o índice não-cluster em um filegroup diferente, você pode obter ganhos de desempenho se os filegroups estiverem usando unidades físicas diferentes com seus próprios controladores.
Expandir | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||
Segundo a documentação oficial do MSSQL Server, o SGBD possui três tipos de arquivos:
E também possui diferentes grupos de arquivos:
|
Informações | ||
---|---|---|
| ||
Os datafiles (arquivos de dados) e logfiles (arquivos de log) são arquivos do banco de dados; datafiles armazenam dados e objetos, e logfiles armazenam informações sobre as transações no banco de dados. Os filegroups (grupos de arquivos) são separadores dos datafiles, e podem ser utilizados para facilitar a administração e alocação de recursos. Mais informações podem ser encontradas no site da fabricante. |
A indicação da TOTVS, assim como da Microsoft, é manter um filegroup específico para índices não cluster.
Para exemplificar a separação dos índices e dos dados, criamos uma demonstração com o Database “TPPRD”, exibindo a mudança de índices para outro filegroup e distribuição das tabelas em mais de um datafile.
Preparo do ambiente de exemplo
- Banco de dados criado: TPPRD
- Datafile: “TPPRD_Data01”
- Filegroup: “PRIMARY”
Print de exemplo do banco de dados criado:
No DBAccess, o ambiente está configurado informando apenas os dados de conexão com o banco de dados, conforme print:
Antes de começar...
- Realize e garanta que o backup da base seja realizado com sucesso antes de iniciar o processo;
- Realize e garanta que o backup seja extraído após o término do processo;
- Aplique todas as recomendações em ambientes de desenvolvimento e de homologação antes de aplicar em ambiente de produção;
- Faça a validação e marcação de tempo para comparativo das principais rotinas do ambiente, antes e depois de realizar o procedimento de mudança de índices;
- Garanta que o Protheus e serviços do DBAccess estejam parados durante a atividade;
- A atividade deve ser acompanhada por um profissional especializado em Banco de Dados.
Alterando o modo de recuperação do banco de dados
Coloque o banco de dados em modo Simple para evitar o crescimento excessivo do arquivo de log do SQL Server durante esta manutenção. O print a seguir mostra como selecionar a opção por meio do SQL Server Management Studio:
Alternativamente, execute o seguinte comando:
Bloco de código | ||||
---|---|---|---|---|
| ||||
USE master
GO
ALTER DATABASE [TPPRD]
SET RECOVERY SIMPLE
GO |
Adicionando arquivos ao filegroup Primary
Utilizando a área gráfica do SQL Server Management Studio (SSMS):
- Clique com o botão direito no banco de dados, abra propriedades;
- Selecione Files;
- Adicione dois datafiles, clicando em Add;
- Duas linhas serão adicionadas logo abaixo do arquivo de Log. Atribua o nome lógico destes datafiles;
- Altere o tamanho inicial dos Filegroups para 1024MB (variável dependo do tamanho do banco de dados);
- Nos três pontinhos (...), altere o tamanho de Autogrowth para 128MB (variável dependo do tamanho do banco de dados). Clique em Ok;
- Especifique o path (caminho físico dos datafiles; recomenda-se utilizar uma
Informações | ||
---|---|---|
| ||
Os datafiles (arquivos de dados) e logfiles (arquivos de log) são arquivos do banco de dados; datafiles armazenam dados e objetos, e logfiles armazenam informações sobre as transações no banco de dados. Os filegroups (grupos de arquivos) são separadores dos datafiles, e podem ser utilizados para facilitar a administração e alocação de recursos. Mais informações podem ser encontradas no site da fabricante. |
A indicação da TOTVS e da Microsoft é manter um filegroup específico para índices não cluster.
Para exemplificar a separação dos índices e dos dados, criamos uma demonstração com o Database “TPPRD”, exibindo a mudança de índices para outro filegroup e distribuição das tabelas em mais de um datafile.
Preparo do ambiente de exemplo
- Banco de dados criado: TPPRD
- Datafile: “TPPRD_Data01”
- Filegroup: “PRIMARY”
Print de exemplo do banco de dados criado:
No DBAccess, o ambiente está configurado informando apenas os dados de conexão com o banco de dados, conforme print:
Premissas:
- Realizar e garantir que o backup da base seja realizada com sucesso antes de iniciar o processo;
- Realizar e garantir que o backup seja extraído após o término do processo;
- Aplicar todas as recomendações em ambientes de desenvolvimento e de homologação antes de aplicar em ambiente de produção;
- Indicamos a validação e marcação de tempo para efeito comparativo das principais rotinas do ambiente, antes e depois de realizar o procedimento de mudança de índices;
- Garantir que o Protheus e serviços do DBAccess estejam parados durante a atividade;
- A atividade deve ser acompanhada por um profissional especializado em Banco de Dados.
Os passos desta demonstração serão:
- Colocar o Banco de Dados em modo Simple;
- Adicionar arquivos de dados ao Grupo de Arquivos Primary;
- Criar um Filegroup: “SECONDARY”;
- Adicionar arquivos de dados ao Grupo de Arquivos Secondary;
- Mover os índices não cluster do Grupo de Arquivos Primary para Secondary;
- Colocar o Banco de Dados em Modo Full.
Alterando o modo de backup do banco de dados
Vamos colocar o banco de dados em modo Simple para evitar o aumento excessivo do tamanho do arquivo de log no SQL Server.
Ou rode o seguinte comando:
Bloco de código | ||
---|---|---|
| ||
USE master
GO
ALTER DATABASE [TPPRD]
SET RECOVERY SIMPLE
GO |
Adicionando arquivos ao filegroup Primary
Crie usando T-SQL (linha de comando) ou na área gráfica do SQL Server Management Studio (SSMS).
- Clique com o botão direito no banco de dados, abra propriedades;
- Selecione Files;
- Adicione dois datafiles, clicando em Add;
- Duas linhas serão adicionadas logo abaixo do arquivo de Log, criar o nome “Lógico” para esses Datafiles;
- Alterar o tamanho inicial dos Filegroups para 1024MB (pode ser maior ou menor dependo do tamanho do banco de dados);
- Nos três pontinhos (), alterar o tamanho de Autogrowth para 128MB (pode ser maior ou menor dependo do tamanho do banco de dados) clique em Ok;
- Especificar o path (caminho físico dos datafiles, é indicado unidade diferente que os datafiles Primary);
- Alterar Altere o nome "Físico" físico dos dois arquivos.
Ou rode o seguinte comandoPrint de exemplo:
Caso queira utilizar T-SQL, execute o seguinte comando, alterando o nome da database para o nome de sua database:
Bloco de código | ||||
---|---|---|---|---|
| ||||
Bloco de código | ||||
| ||||
USE [master] GO ALTER DATABASE [TPPRD] ADD FILE ( NAME = N'TPPRD_Data02', FILENAME = N'H:\MSSQLSERVER\TPPRD\TPPRD_Data02.ndf' , SIZE = 1048576KB , FILEGROWTH = 131072KB ), ( NAME = N'TPPRD_Data03', FILENAME = N'H:\MSSQLSERVER\TPPRD\TPPRD_Data03.ndf' , SIZE = 1048576KB , FILEGROWTH = 131072KB ) TO FILEGROUP [PRIMARY] GO |
Criando filegroup SECONDARY
Podemos É possível criar o filegroup usando T-SQL (linha de comando) ou na área gráfica do SQL Server Management Studio (SSMS).
Clique com o botão direito no banco de dados, abra propriedades e selecione Filegroups, logo após adicione um Filegroup, uma linha será adicionada logo abaixo de Primary, nomear esse . Nomeie este Filegroup para Secondary, e clique em OK:
Ou rode execute o seguinte comando:
Bloco de código | ||||
---|---|---|---|---|
| ||||
USE [master] GO ALTER DATABASE [TPPRD] ADD FILEGROUP [SECONDARY] GO |
Adicionando arquivos ao filegroup secondary
Crie usando T-SQL (linha de comando) ou na área gráfica do SQL Server Management Studio (SSMS).
- Clique com o botão direito no banco de dados, abra propriedades;
- Selecione Files;
- Adicione três datafiles, clicando em Add;
- Três linhas serão adicionadas logo abaixo do arquivo de Log, criar . Atribua o nome “Lógico” lógico para esses Datafiles;
- Alterar Altere o Filegroup dos três arquivos para SECONDARY;
- Alterar Altere o tamanho inicial dos Filegroups para 1024MB (pode ser maior ou menor valor variável, dependo do tamanho do banco de dados);
- Nos três pontinhos (...), alterar altere o tamanho de Autogrowth para 128MB (pode ser maior ou menor valor variável, dependo do tamanho do banco de dados) clique . Clique em Ok;
- Especificar Especifique o path (caminho físico dos datafiles, é indicado unidade diferente que os ; alinhando-se à boas práticas de mercado, utilize uma unidade diferente dos datafiles Primary);
- Alterar Altere o nome "Físico" físico dos três arquivos.
Ou rode execute o seguinte comando:
Bloco de código | ||||
---|---|---|---|---|
| ||||
USE [master] GO ALTER DATABASE [TPPRD] ADD FILE ( NAME = N'TPPRD_Index01', FILENAME =N'F:\MSSQLSERVER\TPPRD\TPPRD_Index01.ndf' , SIZE = 1048576KB , FILEGROWTH = 131072KB ), ( NAME = N'TPPRD_Index02', FILENAME =N'F:\MSSQLSERVER\TPPRD\TPPRD_Index02.ndf' , SIZE = 1048576KB , FILEGROWTH = 131072KB ), ( NAME = N'TPPRD_Index03', FILENAME =N'F:\MSSQLSERVER\TPPRD\TPPRD_Index03.ndf' , SIZE = 1048576KB , FILEGROWTH = 131072KB ) TO FILEGROUP [SECONDARY] GO |
Após criar três arquivos para índices, vamos prossiga para realizar a distribuição dos índices para o datafile "SECONDARY".
MOVER ÍNDICES NÃO CLUSTER PARA FILEGROUP SECONDARYMovendo índices não cluster para filegroup secondary
Após criar o filegroup e datafiles de índices, vamos realizar o move dos os índices não cluster serão movidos para o novo filegroup criado.
Com o O script a seguir, ele irá gerar ao ser executado, gera os comandos para movimentar os a operação de move dos índices:
Expandir | |||||||
---|---|---|---|---|---|---|---|
| |||||||
|
O script acima irá gerar o DML do move dos índices:
Copiar os DMLs e rodar em uma nova janela do SSMS, movendo assim os índices para o novo filegroup Secondary.
ALTERAR BANCO DE DADOS PARA MODO FULL
Vamos voltar o banco de dados em modo Full do qual foi alterado no começo deste artigo.
Ou rode o seguinte comando:
Bloco de código | ||
---|---|---|
| ||
USE master
GO
ALTER DATABASE [TPPRD]
SET RECOVERY FULL
GO |
CONFIGURAÇÃO DBACCESS
Após a criação do filegroup Secondary e move dos índices, abrir o Monitor do DBAccess, na aba Configurações, Microsoft SQL, Tablespace Índices e incluir a chave Secondary, logo após clique em salvar:
DATABASE
Antes da Manutenção:
Antes da manutenção podemos verificar um único arquivo com 85GB reservado e 74GB efetivamente utilizado:
SHRINK DATAFILE:
Após a manutenção realizamos a criação de dois novos arquivos de dados, e a distribuição dos índices nos datafiles do filegroup Secondary, realizamos o shrink do datafile Primário da seguinte forma:
Após liberar o espaço do datafile Primário, realizamos a manutenção de Compress de dados e índices conforme indicação para boa performance do Ambiente ERP.
Print de exemplo de resultado da geração do DML: |
Copie os DMLs gerados como resultado do script anterior e salve em um arquivo.
Após isto, realize a deleção dos índices que serão criados novamente.
Expandir | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
|
Copie os DMLs gerados para o drop dos índices e execute em uma nova janela do SSMS. Esta operação deletará os índices do filegroup primary.
Após isto, execute os DMLs salvos como resultado do script de criação em uma nova janela do SSMS. Esta operação criará os índices no novo filegroup Secondary.
Até aqui, apenas as informações de índices que já existiam no banco de dados foram distribuídas entre filegroups.
Alterar banco de dados para modo full
Reconfigure o banco de dados para modo Full, revertendo a alteração sugerida do início.
Ou execute o comando:
Bloco de código | ||||
---|---|---|---|---|
| ||||
USE master
GO
ALTER DATABASE [TPPRD]
SET RECOVERY FULL
GO |
Configuração do DBAccess
Após a criação do filegroup Secondary e a operação de move dos índices, abra o Monitor do DBAccess. Na aba Configurações, em Microsoft SQL, há a seção de Tablespaces. Em índices, inclua a chave Secondary (referente ao filegroup criado para índices), conforme print. Clique em salvar:
A partir deste momento, o DBAccess irá gerenciar os novos dados que forem inseridos, ou dados que sejam alterados, de maneira separada das informações relativas a índices.
Manutenção na base de dados
Aviso |
---|
Não é necessário executar o Shrink com alta frequência. Este procedimento de manutenção foi realizado, neste caso, para liberar mais de 70% de espaço na base de dados, conforme evidências apresentadas. |
Após a manutenção dos índices, datafiles e filegroups, foi executado o shrink do datafile Primário da seguinte forma:
Foi executada a compactação de dados e índices, conforme indicação para boa performance do Ambiente ERP.
O print a seguir mostra o consumo da database após o procedimento.
Links de Referência:
Database Files e Filegroups
Recovery Model
Compress de Dados e Índices:
https://tdn.totvs.com/pages/releaseview.action?pageId=564330500