IOPS: O que é esta medida e como ela influencia na performance
O que são IOPS e por que são importantes
IOPS é a sigla em inglês para Input/Output Operations Per Second, ou seja, operações de entrada e saída por segundo. Esse é um dos principais indicadores de desempenho de um disco rígido, SSD ou armazenamento em nuvem, pois mede quantas leituras e escritas ele pode realizar em um determinado intervalo de tempo.
IOPS é especialmente relevante para o desempenho dos bancos de dados, pois ele depende da velocidade com que os dados podem ser acessados e modificados no disco. Quanto maior o número de IOPS, mais rápido o banco de dados pode responder às consultas e transações dos usuários.
Como são calculados os IOPS
Os IOPS são calculados dividindo o número de bytes transferidos pelo tamanho do bloco e pelo tempo. Por exemplo, se um disco transfere 1 GB de dados em 10 segundos, usando blocos de 4 KB, os IOPS são:
No entanto, esse cálculo é apenas teórico, pois na prática existem outros fatores que afetam os IOPS, como a latência, o tipo de operação (leitura ou escrita), o tipo de interface (SATA, SAS, NVMe, etc.), o tipo de armazenamento (HDD, SSD, etc.) e o tipo de RAID, se houver.
Além disso, os IOPS podem variar de acordo com a carga de trabalho, o tipo de consulta, o tamanho dos dados, o nível de fragmentação, o cache, etc.
Por isso, para medir os IOPS reais de um disco ou de um banco de dados, é preciso usar ferramentas específicas, como o iostat, o hdparm, o fio, o sysbench, o pgbench, etc.
Quais são os fatores que influenciam os IOPS
Como vimos, os IOPS dependem de vários fatores, que podem ser divididos em duas categorias: os fatores relacionados ao hardware e os fatores relacionados ao software.
Fatores relacionados ao hardware
Os fatores relacionados ao hardware são aqueles que dizem respeito às características físicas do disco ou do armazenamento em nuvem, como:
- O tipo de armazenamento: HDD, SSD ou armazenamento em nuvem. Os SSDs têm um desempenho muito superior aos HDDs, pois não possuem partes mecânicas e podem acessar os dados de forma aleatória. O armazenamento em nuvem também pode oferecer um alto desempenho, dependendo do provedor e do plano contratado. Saiba mais sobre SSDs neste artigo.
- O tipo de interface: SATA, SAS, NVMe, etc. A interface é o canal de comunicação entre o disco e o sistema operacional. Quanto mais rápida a interface, maior a taxa de transferência de dados e, consequentemente, maior o número de IOPS.
- O tipo de RAID: RAID 0, RAID 1, RAID 5, RAID 10, etc. O RAID é uma técnica que combina vários discos em um único volume lógico, visando aumentar a capacidade, a segurança ou o desempenho. Dependendo do tipo de RAID, os IOPS podem ser aumentados ou diminuídos, pois há um custo de processamento para distribuir os dados entre os discos. Saiba mais sobre RAID neste artigo.
- A capacidade e a velocidade do disco: quanto maior a capacidade e a velocidade do disco, maior o número de IOPS que ele pode suportar. No entanto, isso também depende do tipo de armazenamento e da interface utilizados.
Fatores relacionados ao software
Os fatores relacionados ao software são aqueles que dizem respeito à configuração e à otimização do banco de dados, como:
- O tamanho do bloco: o tamanho do bloco é a unidade mínima de dados que pode ser lida ou escrita em um disco. Quanto menor o tamanho do bloco, maior o número de IOPS, pois há menos dados a serem transferidos. No entanto, isso também pode aumentar a fragmentação e a sobrecarga do sistema de arquivos.
- O tipo de operação: leitura ou escrita. As operações de leitura geralmente são mais rápidas do que as de escrita, pois não envolvem a modificação dos dados no disco. Além disso, as operações de leitura podem ser beneficiadas pelo cache, que armazena os dados mais acessados na memória RAM, reduzindo a necessidade de acessar o disco.
- O tipo de acesso: sequencial ou aleatório. As operações de acesso sequencial são aquelas que acessam os dados em uma ordem contínua, enquanto as operações de acesso aleatório são aquelas que acessam os dados em uma ordem arbitrária. As operações de acesso sequencial geralmente são mais rápidas do que as de acesso aleatório, pois aproveitam a localidade dos dados no disco. No entanto, isso depende do tipo de armazenamento utilizado, pois os SSDs não sofrem com a latência de busca dos HDDs.
- O nível de fragmentação: a fragmentação é o fenômeno que ocorre quando os dados são armazenados em blocos não contíguos no disco, dificultando o acesso sequencial. A fragmentação pode ser causada por operações de inserção, atualização e exclusão de dados, que alteram o tamanho e a posição dos registros no disco. A fragmentação pode ser reduzida por meio de técnicas de compactação, reorganização ou particionamento dos dados.
- O nível de cache: o cache é uma área de memória RAM que armazena os dados mais acessados pelo banco de dados, reduzindo a necessidade de acessar o disco. O cache pode ser configurado de acordo com o tamanho disponível de memória RAM e a carga de trabalho do banco de dados. Quanto maior o nível de cache, maior o número de IOPS, pois há menos operações de entrada e saída.
Como otimizar o desempenho do seu banco de dados com base nos IOPS
Para otimizar o desempenho do seu armazenamento com base nos IOPS, é preciso analisar os fatores que influenciam esse parâmetro e tomar as medidas adequadas para melhorá-los. Algumas dessas medidas são:
- Escolher o tipo de armazenamento adequado para sua carga de trabalho, levando em conta a capacidade, a velocidade, o custo e a disponibilidade. Se possível, opte por SSDs ou armazenamento em nuvem de alta performance.
- Escolher o tipo de interface adequado para o seu disco, preferindo as interfaces mais rápidas, como NVMe, SAS ou SATA III. Evite as interfaces mais lentas, como SATA II ou IDE.
- Configurar o tipo de RAID adequado para o seu disco, considerando o nível de segurança e desempenho desejados. Se o seu objetivo é aumentar os IOPS, opte por RAID 10 ou RAID 50. Evite RAID 1, RAID 5 ou RAID 6, que reduzem os IOPS de escrita.
- Configurar o tamanho do bloco de acordo com o tipo de operação predominante na sua carga de trabalho. Se é um banco de dados, use um tamanho de bloco menor, como 4 KB ou 8 KB. Se for um servidor de arquivos ou virtualização utilize o tamanho de bloco indicado para cada carga de trabalho.
- Otimizar o tipo de acesso aos dados, preferindo operações de acesso sequencial às operações de acesso aleatório. Para isso, use índices, catálogos, ordenações, filtros e agrupamentos adequados nas suas consultas, evitando varreduras completas nos arquivos. Além disso, use técnicas de compactação, reorganização ou particionamento dos dados para reduzir a fragmentação.
- Aumentar o nível de cache para as consultas que se repetem frequentemente, aproveitando o máximo de memória RAM disponível.
- Use ferramentas de monitoramento e análise de desempenho, como o iostat, o hdparm, o fio, o sysbench, o pgbench, etc. Essas ferramentas permitem medir os IOPS reais do seu disco ou da sua carga de trabalho, identificar gargalos, testar diferentes cenários e comparar diferentes soluções.