Otimizando operações de Entrada e Saída (I/O)

Este artigo vai descrever como funcionam as operações de Entrada e Saída (I/O) em um Banco de Dados, e como isso interfere diretamente na performance das aplicações

O ajuste das operações de I/O é um passo fundamental segundo a metodologia recomendada para ‘Tunning’. Vou iniciar explicando o que é uma operação lógica de I/O. Quando uma consulta é processada, o processo servidor consulta os blocos necessários no Cache de Buffer do Banco de Dados (buffer cache). Todo acesso a esses blocos são operações lógicas de I/O. Isto inclui a leitura de cada bloco de uma tabela durante um full table scans, a escrita de cada linha no bloco através do comando insert, a remoção de linhas de um bloco de índice, e assim por diante.

Se o bloco acessado estiver no buffer cache, a operação lógica de I/O só consome CPU para manipular o bloco. Se este não for o caso, uma operação física de I/O é requerida para buscar os dados e trazê-los ao buffer cache. É importante salientar que uma operação física requer tanto acesso de I/O quanto CPU. Em muitos Sistemas Operacionais, os arquivos do sistema e os volumes lógicos podem significar cerca de 40% do tempo total de I/O.

E qual a importância de se observar essas operações de I/O?

I/O lógico consome muito CPU. Quanto mais operações de I/O o Banco de Dados executa, mais CPU é necessário. Além disso, toda operação requer um bloqueio para evitar o acesso ao bloco entre as sessões concorrentes. Levando em consideração que o tipo e o número de I/O lógicos são definidos no plano de execução de acordo com o comando SQL executado, e esse mesmo SQL é responsável pelo acesso aos dados através das aplicações, logo, ele passa a ter um papel importantíssimo para evitar um excesso de I/O.

Segue abaixo algumas alternativas para tentar reduzir o I/O:

De nada adianta essas dicas se não forem bem utilizadas. Para aumentar a performance das aplicações é necessário que modifiquemos nossa maneira de pensar e agir. Devemos colocar as mãos na massa! Além das coisas que eu citei, vocês podem recriar alguns índices, apagar os que não estão sendo usados e/ou os não seletivos, reescrever os comandos SQL ineficientes, desabilitar as triggers quando essas não forem necessárias, reestruturar os dados (migração, particionamento, replicação) e muitas outras coisas. Basta correr atrás e entender o quão importante é e a diferença que isso faz em um sistema crítico.

Artigos relacionados