N style="mso-spacerun: yes">capaSQL17.JPG

Clique aqui para ler todos os artigos desta edição

Otimizando um servidor Linux para banco de dados - Parte II

por Carlos Eduardo Smanioto

 

 

Leitura obrigatória

Para uma melhor compreensão desse artigo, é aconselhada a leitura da primeira parte publicada na edição 12 da SQL Magazine com o título “Otimizando um servidor Linux para banco de dados”.

 

Nessa segunda parte do artigo sobre tuning de servidores Linux para banco de dados estaremos focando a otimização do Kernel do Linux. Veremos também a teoria relacionada com as configurações descritas a fim de dar ao leitor plena consciência do que estaremos fazendo. Abordaremos aqui conceitos que não se aplicam somente a banco de dados, mas também a outros softwares utilizados em servidores de rede, como o SAMBA, que permite montar no Linux um servidor de arquivos e domínio, substituindo Windows 2000 Server como servidor PDC (Primary Domain Controller).

Uma breve introdução

Diferente do Windows onde temos poucas opções de configuração e otimização do sistema operacional em relação a um servidor de BD, no Unix (e seus derivados) as configurações do sistema operacional estão diretamente relacionadas com a performance do SGBD. Nesse artigo, apresentarei as principais modificações no kernel para alcançar o alto desempenho. Antes, no entanto, falaremos de um assunto que foi citado superficialmente na primeira parte do artigo: RAID.

RAIDs

RAID é a sigla para Redundant Array of Inexpensive/Independent Disks - "Matriz Redundante de Discos de Baixo Custo/Independentes". O objetivo do RAID é criar um sistema contra falhas de HD através do armazenamento redundante dos dados em vários discos, aumentando também a performance de gravação e recuperação dos dados.

Podemos criar RAIDs via hardware ou software. É possível criar uma unidade RAID com apenas um HD, no entanto isso não faria sentido, visto que não haveria redundância, e portanto não traria qualquer tipo de vantagem. Consideramos então que para se criar um RAID precisamos de no mínimo dois HDs. Uma unidade RAID é composta por “n” HDs, sendo que o sistema operacional não diferencia os HDs que a compõe, enxergando-os como uma única unidade RAID. Lembram-se da primeira parte do artigo, quando citei o LVM? O RAID tem o mesmo conceito, aliás, o RAID 0 (Striping) foi explicado no LVM. Através do RAID, além de garantirmos a disponibilidade dos dados em caso de falha em algum dos discos, também equilibramos o acesso às informações, diminuindo os gargalos de I/O, aumentando assim o desempenho de acesso ao disco pelo SGBD.

Níveis de RAID

A tecnologia RAID possui diversos níveis. Cada nível representa uma combinação do uso dos discos no que se refere ao espelhamento dos dados, fracionamento (striping), detecção de falhas, etc. Estaremos comentando nesse artigo os 6 níveis básicos de RAID.

 

RAID 0

Conhecido como striping ou fracionamento. Nele os dados são divididos em pequenos segmentos e distribuídos entre os discos (ver Figura 1). Este nível não oferece tolerância a falhas, mas é o mais rápido de todos os níveis de RAID. O RAID 0 é usado apenas para ganhar performance, uma vez que a distribuição dos dados entre os discos proporciona grande velocidade na gravação e leitura de informações. Quanto mais discos houver, mais velocidade é obtida. Apesar da limitação do hardware controlador de disco, de maneira geral é possível formar um RAID 0 com até quatro discos. Segundo o site www.mcpdomain.com/artigos/raidsystem.asp, o aumento do desempenho é de 98% com dois HDs, 180% usando três HDs, e 250% usando quatro HDs. No entanto, não recomendo usar um RAID 0 sem técnicas de backup e medidas que permitam proteger a informação contra acidentes, pois ele não oferece tolerância contra falhas.

 

img1.jpeg

Figura 1. RAID 0.

 

RAID 1

Também conhecido como mirroring (espelhamento). Nele, cada bit gravado no primeiro HD é gravado no segundo HD, fazendo com que o segundo disco seja um espelho do primeiro. Assim, em caso de crash do primeiro HD, os dados estariam íntegros no segundo. Na Figura 2 vemos oito HDs espelhados em pares. A gravação dos dados no RAID 1 é mais lenta, mas a leitura é bastante rápida, pois o controlador RAID terá duas fontes de pesquisa para localizar o dado requisitado. Esse é um dos níveis de RAID mais caros, pois para cada gigabyte de informação armazenada, é necessário um outro gigabyte para espelhamento.

 

img2.jpeg

Figura 2. RAID 1.

 

RAID 2 (ECC)

Este tipo de RAID utiliza discos separados para armazenar os dados e as informações de redundância (paridade) (ver Figura 3). As informações de paridade são geradas a nível de bit, utilizando um processo conhecido por Hamming Error Correcting Codes (ECC), que permite tanto identificar como corrigir possíveis erros nas informações, surgidos depois que as mesmas foram gravadas. Vários fatores fazem com que esse nível de RAID não seja utilizado atualmente, entre eles está o alto custo devido ao grande número de HDs necessários, e o fato de que os HDs atuais já oferecem correções de erro baseadas em ECC no seu próprio hardware. A distribuição dos dados a nível de bits faz com que a performance das leituras randômicas de dados seja terrível.

 

img3.jpeg

Figura 3. RAID 2.

 

RAID 3

O RAID 3 utiliza a técnica de striping a nível de byte juntamente com um HD dedicado a armazenar as informações de paridade calculada através de um algoritmo de XOR (“OU exclusivo”) (ver Figura 4). Isto torna possível a reconstrução tanto dos dados armazenados como da própria informação de paridade, no caso de falha em qualquer um dos discos envolvidos. O disco de paridade acaba se tornando um gargalo de performance, principalmente durante escritas randômicas de dados, pois para qualquer informação enviada para o array, o disco de paridade tem que ser acessado. Além disso, a ótima performance depende da habilidade de acessar os dados nos HDs sincronizadamente (técnica chamada de “spindle synchronization”), um recurso não muito comum na maioria dos HDs. Logicamente, este modelo exige no mínimo 3 Hds.

 

img4.jpeg

Figura 4. RAID 3.

 

 RAID 4

O RAID 4 segue o mesmo conceito do RAID 3 (ver Figura 5), no entanto oferece uma performance um pouco melhor por fazer uso de block striping ao invés de byte striping. Mas ainda assim o disco dedicado a paridade continua sendo um gargalo de performance.

 

img5.jpeg

Figura 5. RAID 4.

 

RAID 5

O RAID 5 é semelhante ao RAID 4, mas ao invés de utilizar um HD dedicado para as informações de paridade, ele as distribui nos mesmos HDs envolvidos para a gravação/leitura dos dados (ver Figura 6). Isso faz com que a performance, mesmo em pequenas operações de I/O, não seja degradada. A tolerância a falhas é obtida certificando-se que as informações de paridade não sejam gravadas no mesmo HD contendo os dados a que elas se referem. Devido ao balanceamento de performance, custo e tolerância a falhas, o RAID 5 é o nível mais utilizado em servidores de bancos de dados e processamento de transações. Este nível é utilizado com três ou mais HDs.

 

img6.jpeg

Figura 6. RAID 5.

 

RAID 10(0+1)

O RAID 10 é uma mistura do RAID 1 com o RAID 0, por isso 10(1 e 0). Um par de HDs é utilizado para dados, usando striping (performance), e o outro par de HDs é utilizado para espelhar (mirroring) o primeiro par (ver Figura 7). Tais características fazem do RAID 0 + 1 o mais rápido e seguro, porém o mais caro de ser implantado, pois para cada par de striping é necessário um par de HDs para fazer mirror.

 

img7.jpeg

Figura 7. RAID 10(0+1).

 

Existem ainda outros níveis de RAID, entre eles:

·         RAID 6: igual ao RAID 5, porém com dupla paridade.

·         RAID 7 (altíssima performance): os dados não são gravados diretamente para o disco, sendo controlados e cacheados de forma independente, economizando I/O.

·         RAID 53 (alta performance): um RAID 3 com cinco HDs.

O sistema operacional System V e o Linux

O System V é um Unix desenvolvido pela AT&T's Bell Laboratories, que possui elementos que servem de base para muitos outros sistemas operacionais da série Unix e semelhantes. Várias tentativas foram feitas visando unificar as versões do Unix de Berkeley (BSD) e da AT&T (System V), além das inúmeras outras implementações oferecidas pelo mercado.

A AT&T publicou um conjunto de especificações, conhecidas como System V Interface Definition. Atualmente essas especificações estão disponíveis para consulta no site da SCO (www.caldera.com/developers/devspecs/). O Linux e alguns outros sistemas operacionais Unix adotaram algumas dessas definições como uma extensão do padrão POSIX do IEEE (explicado no artigo anterior), sendo que uma delas é o script de inicialização do INIT (responsável pela carga do Linux), e o IPC ( ...

Quer ler esse conteúdo completo? Tenha acesso completo