TK 70-432 Capítulo 2: Configuração e Manutenção de Banco de Dados (Parte 1)

Olá!

Começaremos a semana com mais um capítulo do TK-70-432, o Capítulo 2: Configuração e Manutenção de Banco de Dados, que abrange os seguintes objetivos do exame e lições:

Objetivos:
– Backup databases
– Manage and configure databases
– Maintain database integrity
– Manage collations

Lições:
– Lesson 1: Configuring Files and Filegroups
– Lesson 2: Configuring Database Options
– Lesson 3: Maintaining Database Integrity

É importante para esse capítulo já ter instalado o SQL Server 2008 e o banco de dados de exemplo AdventureWorks.

– Lesson 1: Configuring Files and Filegroups

O SQL Server utiliza basicamente dois tipos de arquivos, o arquivos de dados e o arquivo de log (Datafile e Transaction Log). Precisamos entender o funcionamento do SQL Server para entender a necessidade de cada arquivo.

Quando o SQL necessita manipular um dado de uma tabela, ele lê seu conteúdo no disco e grava em memória onde a sua manipulação é feita, no final da transação ela é gravada no Transacion Log, e só é gravada no Datafile quando um processo que roda em background chamado de CheckPoint é executado. Mesmo que uma transação seja feita toda em um buffer da memória do servidor, ela só é liberada quando é gravada no transaction log, diminuindo a chance de problema de integridade se o servidor falhar.

Falando um pouco sobre DataFiles, que são os arquivos onde os dados já persistidos ficam armazenados, podemos ter mais de um datafile por banco de dados de modo a distribuir os arquivos em vários discos, aumentando a velocidade devido ao menor I/O por disco. Para evitar que um disco seja gravado de forma desproporcional, o SQL utiliza um algoritmo de preenchimento de discos que ocupa os dados de um disco de maneira proporcional, ou seja, se temos um banco de dados com dois datafiles, um de 1Gb e outro de 10Gb o SQL vai gravar 10 linhas no disco de 10Gb para cada linha no disco de 1Gb.

Esses DataFiles são criados dentro de um Filegroup, o filegroup padrão é chamado de PRIMARY, um filegroup é uma estrutura onde os objetos de um banco de dados (tabelas, indices, etc.) estão armazenados. 

Podemos aumentar o desempenho e organização de um banco de dados criando outros filegroups, dividindo o banco de dados em arquivos dispostos em discos diferentes, diminuindo a concorrência no mesmo disco. Também podemos definir que uma tabela do banco de dados fique dentro de um filegroup readonly, não permitindo a gravação nessa tabela. O filegroup é definido no momento da criação os objetos usando a cláusula “ON”, caso não seja citada essa cláusula o objeto será criado no filegroup PRIMARY. Ex:

CREATE TABLE Cliente
(ClienteID int IDENTITY PRIMARY KEY,
Nome nvarchar(100),
Cidade nvarchar(20))ON nomedofilegroup

Nesse caso a tabela será criada no filegroup nomedofilegroup. Também podemos definir um DEFAULT FILEGROUP que especifica o filegroup das tabelas que são criadas sem a cláusula ON serão criadas.
Quando o SQL Server confirma uma transação, ela é gravada no Transaction Log do banco de dados para só depois ser gravada no disco, o desempenho do banco de dados depende muito do Transaction Log, que preferencialmente deve ser criado em um disco diferente que o disco de dados e que seja criado no disco mais rápido disponível.

Por padrão os arquivos de dados criados no PRIMARY filegroup tem a extensão .MDF, os criados em outros filegroups possuem a extensão .NDF e os transaction logs com a extensão .LDF.

Outro sistema de arquivos presente no SQL Server 2008 é o FILESTREAM, que consiste em dados não estruturados sendo gravados numa pasta específica do disco, quando definimos um caminho filestream no SQL ele grava um arquivo .HDR nessa pasta e ele faz o gerenciamento dos arquivos lá contidos.

Em resumo, algumas dicas são importantes para diminuir problemas de performance no SQL 2008:

– Dividir arquivos de um banco de dados muito grande de filegroups, se possível em discos diferentes.
– Manter os arquivos do Transaction Log em discos e controladoras de disco diferentes dos discos de datafiles.
– Não abusar dos filegroups, se por um lado dividimos o I/O em vários discos ao dividir um banco de dados, por outro lado aumentamos a necessidade de processamento do servidor para gerenciar todos essas divisões.

Exemplo: Criando um banco de dados

Podemos testar a criação de um banco de dados e filegroup utilizando os comandos abaixo:

Por enquanto era isso, seguimos na lição 2 a seguir! Até a próxima!

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s