Colocando os logs refazer do Oracle no DRAM SSD para um banco de dados de gravação pesado?

9

Eu tenho um Sun M4000 conectado a uma matriz EMC CX4-120 com um banco de dados com muita gravação. Grava pico em torno de 1200 IO / se 12MB / s.

De acordo com a EMC, estou saturando o cache de gravação na matriz EMC.

Eu acho que a solução mais simples é mover os logs refazer para um SSD baseado em DRAM. Isso reduzirá a carga na matriz EMC pela metade e os aplicativos não verão o buffer de log aguardando. Sim, o DBWR pode se tornar um gargalo, mas os aplicativos não estarão esperando por ele (como fazem nos refazer confirmações!)

Atualmente, eu percorro cerca de 4 logs de refazer de 4 GB, então até 20 GB ou mais de SSD faria uma grande diferença. Como esse é um armazenamento de curto prazo e está sendo constantemente substituído, os SSDs baseados em Flash provavelmente não são uma boa idéia.

O M4000 não possui lotes de unidades extras; portanto, uma placa PCI-E seria perfeita; eu poderia externo ou mover os volumes de inicialização para a EMC e liberar as unidades locais.

A Sun vende uma placa PCIe do Flash Accelerator F20, mas isso parece ser um cache para alguns discos SATA, não uma solução de DRAM SSD. Os detalhes são incompletos, ele não lista o M4000 como suportado e estou cansado de lutar contra a árvore telefônica da Sun em busca de ajuda humana. :(

Outros concordam que um DRAM SSD é o caminho a seguir? Alguma recomendação de hardware?

ATUALIZAÇÃO Além das informações em um comentário abaixo, tentei várias configurações para "commit_write" e isso não fez diferença.

rmeden
fonte
Você está arquivando os logs em algum lugar? Se eles precisarem ser copiados do SSD para o disco, basta mover o gargalo para o arquivamento.
Gary
Sim ... os logs de refazer estão sendo arquivados e as E / S aumentam para cerca de 80 MB / s durante a cópia do refazer porque é uma gravação seqüencial. Eu sempre pensei que refazer logs eram seqüenciais, mas acho que não.
21810 rmeden

Respostas:

9

Primeiro - acho que você tem muito poucos discos na matriz. O 1200IOPS pode ser facilmente suportado por 12 discos giratórios (100 IOPS por disco é muito razoável). Se o cache não puder lidar com isso, significa que sua taxa de gravação sustentada de 1200 IOPS é muito mais do que seus discos podem suportar.

De qualquer forma, o SSD para refazer logs provavelmente não ajudará. Primeiro, sua sessão espera principalmente pela instrução COMMIT? Verifique os principais eventos de espera no statspack / AWR para verificar. Eu acho que ~ 95% da sua E / S não é para os logs de refazer. Por exemplo, uma inserção de linha única em uma tabela com 5 índices pode fazer 1 E / S para ler um bloco de tabela (que tem espaço para a linha), ler 5 blocos de índice (para atualizá-los), escrever 1 bloco de dados, 1 desfazer bloco e 5 blocos de índice (ou mais, se blocos não folha forem atualizados) e 1 bloco de refazer. Portanto, verifique o pacote de estatísticas e veja seus eventos de espera. Provavelmente, você está aguardando muitos READs e WRITEs por dados / índices. A espera de leituras diminui a velocidade do INSERT, e a atividade WRITE torna o READs ainda mais lento - são os mesmos discos (BTW - você realmente precisa de todos os índices? Largar aqueles que não são obrigatórios acelerará as inserções).

Outra coisa a verificar é a definição de RAID - é RAID1 (espelhamento - cada gravação é duas gravações) ou RAID 5 (cada gravação é 2 leituras e duas gravações para cálculo da soma de verificação). O RAID 5 é muito mais lento em carga intensiva de gravação.

BTW - se os discos não puderem conter a carga de gravação, o DBWR será um gargalo. Seu SGA estará cheio de blocos sujos e você não terá espaço para ler novos blocos (como blocos de índice que precisam ser processados ​​/ atualizados) até que o DBWR possa gravar alguns blocos sujos em discos. Mais uma vez, verifique o statspack / awr report / addm para diagnosticar qual é o gargalo, normalmente com base nos 5 principais eventos de espera.

Ofir Manor
fonte
1
+1 - e eu daria +10, se pudesse.
Helvick
2
+1 para obter conselhos para realmente ver onde está o gargalo.
DCookie
As esperas são "sincronização do arquivo de log" e "espaço no buffer do log". Posso obter cerca de 150 MB / s no volume usando DD. Suspeito que o LGWR esteja aguardando a conclusão de um pedido de veiculação antes de enviar o próximo. O tempo de serviço de IO é de cerca de 1 ms. A EMC possui 500MB de cache, que, de acordo com a EMC, não podem ser aumentados sem a atualização de toda a caixa. Temos 22 TB na matriz, por que eles ofereceriam algo com tão pouco cache está além de mim. Os redo logs estão atualmente em um 5-wide RAID 5, mas não houve diferença com RAID 10 (outra razão para o cache suspeito)
rmeden
BTW, se houvesse mais cache, o disco ainda pode não acompanhar. Ao mover o REDO da matriz EMC, isso libera capacidade para os discos de dados e reduz a E / S pela metade. Um pequeno SSD de DRAM pode ser o disco mais barato e de alto desempenho, pois pode ser pequeno.
21810 rmeden
meden - quanto refazer a Oracle grava por segundo? você disse que a E / S total é de 12 MB / se 1200 IOPS, isso significa muitas E / S pequenas (média de 10 KB). Se você mover os logs de refazer para o SSD, verá apenas diferentes eventos de espera, pois o DBWR se tornará o gargalo e o INSERT aguardará o buffer livre no SGA. Verifique - que tipo de RAID você possui, qual o tamanho da faixa e qual o tamanho do bloco Oracle (também, seus arquivos de dados estão distribuídos por todos os discos?). Além disso, o check-in statspack a fonte para a maior parte do I / O - é refazer ou alguma outra coisa - verificar E / S por tablespace
Ofir Manor
2

dd não é nada comparado ao bloco de E / S.

Para outras visões, confira: anandtech.com fez um teste exaustivo (concedido com o MS SQL Server) com rotação do SAS vs SSD, em várias combinações, e o mundo Solaris tem o ZFS com o SSD SSD compondo várias partes (logs, cache, etc. )

Mas sim, se RAID 5 vs RAID 10 for o mesmo (para gravações), você está fazendo algo errado. Com gravações lineares, o RAID 5 pode ser mais rápido (ou seja, ele pode fazer a paridade na memória e gravar as faixas e a paridade de uma só vez), mas com um bloco pequeno aleatório (4-8k), você é morto atualizando faixas (como observado por outros), o ataque 10 deve ser duas vezes mais rápido, se não, algo está errado.

Você precisa se aprofundar antes de gastar dinheiro em hardware.

Ronald Pottol
fonte
2

Vi um post sobre a montagem de partições UFS usando a opção "forceirectio" e definindo o parâmetro Oracle "filesystemio_options" para "setall".

Eu tentei e vi uma melhoria de 4-5x nas gravações do Oracle! Sim!

Os principais sintomas foram baixa taxa de transferência, mas bons tempos de resposta no disco. Isso parece ajudar algumas pessoas, mas não outras. Certamente fez o trabalho para mim.

Posso considerar os SSDs para novos servidores, mas este servidor está funcionando bem agora.

Robert

rmeden
fonte
Provavelmente, a aceleração que você experimentou não foi causada pela ativação de E / S direta, mas pela E / S assíncrona. No Oracle, setall significa direto + assíncrono.
Kubanczyk
1

Se essa caixa tivesse sido apenas uma caixa x86 / 64 executando linux, eu recomendaria alegremente uma das placas de unidade FusionIO PCIe - elas são surpreendentemente rápidas e não "morrem" com gravações pesadas, como os SSDs fazem. Infelizmente, eles não são suportados pelo Sparc ou Solaris. Você pode entrar em contato com eles para discutir isso.

Chopper3
fonte
1

A placa PCIe F20e é semelhante à função Fusion I / O in. É basicamente apenas um SSD Flash conectado ao PCIe. Com a carga de trabalho pesada de gravação, você precisa se preocupar em manter blocos livres suficientes (através de algum tipo de coleta de lixo baseada em unidade) para não acabar com o ciclo Apagar / Programa no SSD, tornando-se um gargalo, bem como os ciclos limitados de gravação disponíveis em um SSD baseado em Flash. É definitivamente rápido, mas pode não ser o melhor kit para este trabalho.

John
fonte
tks John. Não achei que funcionaria para mim. A Sun nem sequer o suporta no M4000. :(
rmeden 01/09/10