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.
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 unidade diferente que os datafiles Primary);
- Altere o nome físico dos dois arquivos.
Print 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 | ||||
---|---|---|---|---|
| ||||
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
É 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. Nomeie este Filegroup para Secondary, e clique em OK:
Ou 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. Atribua o nome lógico para esses Datafiles;
- Altere o Filegroup dos três arquivos para SECONDARY;
- Altere o tamanho inicial dos Filegroups para 1024MB (valor variável, dependo do tamanho do banco de dados);
- Nos três pontinhos (...), altere o tamanho de Autogrowth para 128MB (valor variável, dependo do tamanho do banco de dados). Clique em Ok;
- Especifique o path (caminho físico dos datafiles; alinhando-se à boas práticas de mercado, utilize uma unidade diferente dos datafiles Primary);
- Altere o nome físico dos três arquivos.
Ou 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, prossiga para realizar a distribuição dos índices para o datafile "SECONDARY".
Movendo índices não cluster para filegroup secondary
Após criar o filegroup e datafiles de índices, os índices não cluster serão movidos para o novo filegroup criado.
O script a seguir, ao ser executado, gera os comandos para a operação de move dos índices:
Expandir | |||||||
---|---|---|---|---|---|---|---|
| |||||||
Print de exemplo de resultado da geração do DML: |
Copie os DMLs gerados como resultado do script anterior e execute em uma nova janela do SSMS. Esta operação moverá os índices para o novo filegroup Secondary.
Até aqui, apenas as informações (dados e índices) que já existiam no banco de dados foram distribuídas entre filegroups.
salve o arquivo.
Após istoApós copiar os DMLs, realize a deleção dos índices que foram copiadosserão criados novamente.
Expandir | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
|
Copie os DMLs gerados como resultado do script de criação e execute em uma nova janela do SSMS. Esta operação criará os índices no novo filegroup Secondary.
Até aqui, apenas as informações (dados e í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.