A regra geral que eu uso para o disco IO é:
-
75 IOPs por fuso para SATA.
-
150 IOPs por fuso para FC / SAS
-
1500 IOPs por fuso para SSD.
Assim como os IOPs por array também consideram IOPs por terabyte. Não é incomum acabar com uma PIO muito ruim por taxa de TB se estiver fazendo SATA + RAID6. Isso pode não parecer muito, mas você geralmente acabará com alguém localizando 'espaço livre' em um array e deseja usá-lo. É comum as pessoas comprarem gigs e ignorarem iops, quando realmente o oposto é verdadeiro na maioria dos sistemas corporativos.
Em seguida, adicione o custo da penalidade de gravação para o RAID:
- 2 para RAID1, RAID1 + 0
- 4 para RAID5 (ou 4)
- 6 para RAID6.
A penalidade de gravação pode ser parcialmente atenuada em grandes caches de gravação e nas circunstâncias corretas. Se você tiver muitos IOs de gravação seqüencial (como logs de banco de dados), você poderá reduzir significativamente as penalidades de gravação no RAID 5 e 6. Se você conseguir escrever uma faixa completa (por exemplo, um bloco por fuso), não precisará ler para calcular a paridade.
Assuma um conjunto RAID 6 8 + 2. Em operação normal para um único IO de gravação, você precisa:
- Leia o bloco "atualizado".
- Leia o primeiro bloco de paridade
- Leia o segundo bloco de paridade
- Recompute a paridade.
- escreve todos os 3 (6 IOs).
Com uma gravação de faixa completa em cache - por exemplo, 8 'blocos' consecutivos do tamanho da faixa RAID, é possível calcular a paridade em todo o lote, sem precisar de leitura. Então, você só precisa de 10 gravações - uma para cada dado e duas paridades.
Isso faz com que a sua pena de escrita seja 1.2.
Você também precisa ter em mente que o IO de gravação é fácil de armazenar em cache - não é necessário colocá-lo no disco imediatamente. Ele opera sob uma restrição de tempo suave - desde que, em média, suas gravações recebidas não excedam a velocidade do fuso, todas poderão ser executadas na 'velocidade do cache'.
Read IO, por outro lado, sofre uma restrição de tempo - você não pode completar uma leitura até que os dados tenham sido buscados. Os algoritmos de cache de leitura e carregamento de cache se tornam importantes nesse ponto - padrões de leitura previsíveis (por exemplo, sequenciais, como se obteria a partir do backup) podem ser previstos e pré-buscados, mas padrões de leitura aleatórios não podem.
Para bancos de dados, geralmente sugiro que você assuma que:
-
a maior parte do seu IO 'banco de dados' é de leitura aleatória. (por exemplo, ruim para acesso aleatório). Se você puder pagar a sobrecarga, o RAID1 + 0 é bom - porque os discos espelhados fornecem duas fontes de leitura.
-
a maior parte da sua IO 'log' é de gravação sequencial. (por exemplo, bom para armazenamento em cache e, ao contrário do que muitos DBAs sugerem, você provavelmente deseja RAID50 em vez de RAID10).
A relação entre os dois é difícil é difícil de dizer. Depende do que o DB faz.
Como o IO de leitura aleatória é o pior caso para o armazenamento em cache, é onde o SSD realmente se encaixa - muitos fabricantes não se incomodam com o armazenamento em cache do SSD, porque é praticamente a mesma velocidade. Então, especialmente para coisas como bancos de dados temporários e índices, o SSD oferece um bom retorno sobre o investimento.