Usando o Amazon RDS, estamos executando scripts ETL para migrar nossos dados. No entanto, a cada poucas horas, há um grande pico de CPU.
Aqui estão as especificações ETL (por ETL):
50 records inserted / second
pool of 1000 connections
Aqui estão as especificações do servidor:
Amazon R3.8XL
244 GB RAM
32 vCPU
3TB SSD
10 GiB Network Performance
No Multi-AZ (yet)
Aqui estão as configurações principais e modificadas do grupo de parâmetros PG:
checkpoint_completion_target = 0.9
checkpoint_segments = 16
effective_cache_size = {DBInstanceClassMemory/10923} (8kb)
maintenance_work_mem = {DBInstanceClassMemory/16384} (kb)
max_connections = {DBInstanceClassMemory/12582880}
max_locks_per_transaction = 64
shared_buffers = {DBInstanceClassMemory/32768} (8kb)
work_mem = {DBInstanceClassMemory/20480000} (kb)
Neste caso, DBInstanceClassMemory
é aproximadamente 244,000,000,000 bytes
. O (8kb)
significa que o valor é tomado como blocos de 8kb, então shared_buffers = 244000000000/32768*8000 = 60 gb
. Todas as alterações feitas foram baseadas neste artigo , e defini effective_cache_size
75% porque (como você verá abaixo) a memória não parece estar sendo totalmente utilizada.
Aqui está uma captura de tela das estatísticas do nosso servidor de banco de dados em um período de 6 horas:
O gráfico no canto superior esquerdo mostra os picos de CPU e você pode ver a queda correlacionada em Write IOPS (o gráfico abaixo).
Qual pode ser o motivo desses picos de CPU? Eles congelam quase completamente as consultas pelo ETL (levando mais de 3 minutos para consultas que normalmente levariam menos de um segundo).
Foi uma combinação de fazer muitas transações e muitas funções. Depois de combinar instruções nas mesmas transações e remover as funções, a CPU não passou de uma média de 5%.
Eu acho que você está enfrentando contenção de spinlock. você pode verificar isso usando "perf" (no caso de s_lock aparecer no topo, meu palpite está certo).
em geral tente o seguinte:
também tivemos a impressão aqui na cybertec de que as versões mais recentes do kernel linux (posteriormente na série 3.x) são menos propensas a mostrar esses sintomas.