When the problem occurs, there are
approximately 12-15 PostgreSQL
processes all showing SELECT on the
far right of the process information
and approximately 6-7% CPU usage each
and then the app slows down a lot.
12x6 = 72%, portanto, mesmo no ponto mais baixo, as CPUs estão bastante ocupadas. Jogue em tudo o mais, e é bem claro por que você está correndo. (Isto é supondo que você está olhando para as CPUs como um agregado; quando você olha para o tempo de processo em top
, você está pressionando a tecla 1
para ver todo o tempo de CPU individual ou apenas olhando para o número que apresenta quais são todas as CPUs combinadas?)
Currently, our thought is to throw
more hardware at it. If we do this,
would the best option be something
like Option A below or Option B?
Option A: 4 x AMD Opteron™ 6100 Series
Processors each with 12 Cores
Option B: 4 x Intel® Xeon® 7500 series
Processors each with 8 Cores
Mais núcleos. O PostgreSQL usará um modelo de processo por núcleo, então quanto mais, melhor. Eu olharia talvez 2x AMD CPU em 12 cada para 24 núcleos no total e, em seguida, comprar os 2 CPUs restantes ao longo do tempo, permitindo-lhe orçar-los.
Is it correct to assume that CentOS Linux 5.5 with PostgreSQL 8.0.9 will scale proportionately with the addition of this many processors and cores (Ex. 4 processors each with 12 cores)?
Sim. Posso estar enganado, mas acredito que as compilações mais antigas do kernel usaram um número fixo em um arquivo de cabeçalho C para determinar o número máximo de CPUs a serem procuradas, que geralmente tinham um limite superior de 32 no momento da compilação. Se você tivesse uma máquina "grande", apenas aumentaria o número para algo maior e recompilaria. Não totalmente certo, mas eu acho que eles removeram essa constante na série 2.6, então você deve ficar bem.
Is there something else I should consider in terms of throwing more hardware at it?
Você pode querer ajustar um pouco mais o software antes de lançar o hardware nele (ou ajustá-lo e ainda obter o novo hardware).
Se for uma instrução SELECT, você pode registrá-la e usar o EXPLAIN para descobrir onde ela está gastando seu tempo? Use o PgAdmin para executar e ajustar a consulta manualmente até que você possa reduzir um pouco o tempo de execução. Se a instrução SELECT for programática, você ainda poderá ver o impacto do uso de um novo índice.
Quanta memória você alocou para o PostgreSQL? Quanto em uma base por processo? Quanta memória compartilhada é alocada? Tudo isso pode ter um impacto adverso na execução do banco de dados.
Existem outros processos ou serviços que podem ser desativados (para liberar memória) ou redefinidos (para reduzir o consumo de CPU)?