Logs e unidades de dados têm diferentes padrões de acesso a dados que estão em conflito entre si (pelo menos em teoria) quando compartilham uma unidade.
Gravações de log
O acesso ao log consiste em um número muito grande de pequenas gravações seqüenciais. De maneira um pouco simplista, os logs do banco de dados são buffers de anel que contêm uma lista de instruções para gravar itens de dados em locais específicos no disco. O padrão de acesso consiste em um grande número de pequenas gravações seqüenciais que devem ser garantidas para serem concluídas - para que sejam gravadas no disco.
Idealmente, os logs devem estar em um volume RAID-1 ou RAID-10 silencioso (ou seja, não compartilhado com mais nada). Logicamente, é possível visualizar o processo como o DBMS principal que grava entradas de log e um ou mais encadeamentos de leitores de log que consomem os logs e grava as alterações nos discos de dados (na prática, o processo é otimizado para que as gravações de dados sejam gravadas imediatamente quando possível). Se houver outro tráfego nos discos de log, as cabeças serão movidas por esses outros acessos e as gravações seqüenciais de log se tornarão gravações aleatórias. Como são muito mais lentos, os discos de log ocupados podem criar um ponto de acesso que atua como um gargalo em todo o sistema.
Gravações de dados
(atualizado) As gravações de log devem ser confirmadas no disco (conhecido como mídia estável) para que uma transação seja válida e qualificada para confirmação. É possível visualizar isso logicamente como entradas de log sendo gravadas e, em seguida, usadas como instruções para gravar páginas de dados no disco por um processo assíncrono. Na prática, as gravações da página do disco são realmente preparadas e armazenadas em buffer no momento em que a entrada do log é feita, mas elas não precisam ser gravadas imediatamente para que a transação seja confirmada. Os buffers de disco são gravados em mídia estável (disco) pelo processo Lazy Writer (Agradecimentos a Paul Randal por apontar isso), que este artigo da Technet discute com mais detalhes.
Esse é um padrão de acesso fortemente aleatório, portanto, o compartilhamento dos mesmos discos físicos com logs pode criar um gargalo artificial no desempenho do sistema. As entradas do log devem ser gravadas para que a transação seja confirmada; portanto, ter buscas aleatórias que atrasam esse processo (a E / S aleatória é muito mais lenta que a E / S de log seqüencial) transformará o log de um sequenital em um dispositivo de acesso aleatório. Isso cria um sério gargalo de desempenho em um sistema ocupado e deve ser evitado. O mesmo se aplica ao compartilhar áreas temporárias com volumes de log.
O papel do cache
Os controladores SAN tendem a ter grandes caches de RAM, que podem absorver o tráfego de acesso aleatório até certo ponto. No entanto, para integridade transacional, é desejável que as gravações em disco de um DBMS garantam a conclusão. Quando um controlador é configurado para usar o cache de write-back, os blocos sujos são armazenados em cache e a chamada de E / S é relatada como concluída para o host.
Isso pode atenuar muitos problemas de contenção, pois o cache pode absorver muitas E / S que seriam enviadas para o disco físico. Também pode otimizar a leitura e gravação de paridade para RAID-5, o que diminui o efeito no desempenho dos volumes RAID-5.
Essas são as características que orientam a escola de pensamento 'Deixe a SAN lidar com isso', embora essa visão tenha algumas limitações:
O cache de write-back ainda possui modos de falha que podem perder dados, e o controlador falsificou o DBMS, dizendo que os blocos foram gravados no disco onde, na verdade, não existem. Por esse motivo, talvez você não queira usar o cache de write-back para um aplicativo transacional, principalmente algo que contenha dados financeiros ou de missão crítica, onde os problemas de integridade de dados podem ter sérias conseqüências para os negócios.
O SQL Server (em particular) usa E / S em um modo em que um sinalizador (chamado FUA ou Forced Update Access) força gravações físicas no disco antes do retorno da chamada. A Microsoft possui um programa de certificação e muitos fornecedores de SAN produzem hardware que respeita essas semânticas (requisitos resumidos aqui ). Nesse caso, nenhuma quantidade de cache otimizará as gravações em disco, o que significa que o tráfego do log será afetado se estiver em um volume compartilhado ocupado.
Se o aplicativo gerar muito tráfego de disco, seu conjunto de trabalho poderá sobrecarregar o cache, o que também causará problemas de contenção de gravação.
Se a SAN for compartilhada com outros aplicativos (particularmente no mesmo volume de disco), o tráfego de outros aplicativos poderá gerar gargalos de log.
Alguns aplicativos (por exemplo, data warehouses) geram grandes picos de carga transitória que os tornam bastante anti-sociais nas SANs.
Mesmo em uma grande SAN, volumes de log separados ainda são uma prática recomendada. Você pode não se preocupar com o layout de um aplicativo pouco usado. Em aplicativos realmente grandes, você pode até se beneficiar de vários controladores SAN. A Oracle publica uma série de estudos de caso de layout de data warehouse em que algumas das configurações maiores envolvem vários controladores.
Coloque a responsabilidade pelo desempenho onde ele pertence
Em algo com grandes volumes ou onde o desempenho possa ser um problema, torne a equipe da SAN responsável pelo desempenho do aplicativo. Se eles vão ignorar suas recomendações de configuração, verifique se o gerenciamento está ciente disso e que a responsabilidade pelo desempenho do sistema está no local apropriado. Em particular, estabeleça diretrizes aceitáveis para as principais estatísticas de desempenho do banco de dados, como espera de E / S ou espera de trava de página ou SLAs de E / S de aplicativos aceitáveis.
Observe que a responsabilidade pelo desempenho dividido em várias equipes cria um incentivo para apontar o dedo e passar o dinheiro para a outra equipe. Esse é um anti-padrão de gerenciamento conhecido e uma fórmula para problemas que se prolongam por meses ou anos sem nunca serem resolvidos. Idealmente, deve haver um único arquiteto com autoridade para especificar alterações de aplicativo, banco de dados e configuração da SAN.
Além disso, avalie o sistema sob carga. Se você puder organizá-lo, os servidores de segunda mão e as matrizes de conexão direta podem ser adquiridos com muito mais barato no Ebay. Se você configurar uma caixa como esta com uma ou duas matrizes de disco, poderá executar a configuração do disco físico e medir o efeito no desempenho.
Como exemplo, fiz uma comparação entre um aplicativo em execução em uma grande SAN (um IBM Shark) e uma caixa de dois soquetes com uma matriz U320 de conexão direta. Nesse caso, £ 3.000 em hardware comprado no ebay superaram uma SAN high-end de £ 1 milhão por um fator de dois - em um host com CPU e configuração de memória aproximadamente equivalentes.
A partir desse incidente específico, pode-se argumentar que ter algo assim por aí é uma maneira muito boa de manter os administradores da SAN honestos.