English version
German version
Spanish version
French version
Italian version
Portuguese / Brazilian version
Dutch version
Greek version
Russian version
Japanese version
Korean version
Simplified Chinese version
Traditional Chinese version
Hindi version
Czech version
Slovak version
Bulgarian version
 

40/sec a 500/sec

Software RSS Feed





Introdução

Surpreendido, pelo título? bem, esta é uma excursão de como nós rachamos o jinx da escalabilidade de segurar uns 40 por segundo pobre dos registros a 500 por segundo dos registros. Beware, a maioria dos problemas que nós enfrentamos eram diretos, assim que os povos experimentados puderam encontrar este supérfluo.
Índices

* 1.0 onde estávamos nós?

1.1 A memória bate o céu
1.2 baixa taxa de processamento
1.3 Perda dos dados:- (
1.4 Mysql puxa-nos para baixo
1.5 Web client lento

* estrada 2.0 ao nirvana

2.1 Memória de controlo!
2.2 Aerodinamizando a taxa de processamento
2.3 Que uh-uh da perda dos dados?
2.4 Perguntas de ajustamento do SQL
2.5 Esquema de ajustamento da base de dados
2.5 Mysql ajuda-nos a forjar adiante!
2.6 Mais rapidamente… mais rapidamente web client

* linha 3.0 inferior

Onde estávamos nós?

Inicialmente nós tivemos um sistema que poderia escalar somente upto 40 registros /sec. Eu poderia mesmo recordar a discussão, sobre “o que devo ser a taxa ideal de registros? ”. Finalmente nós decidimos que 40/sec era a taxa ideal para um único guarda-fogo. Assim quando nós tivermos que sair, nós atleast necessário para suportar 3 guarda-fogos. Daqui nós decidimos que 120/sec seria a taxa ideal. Baseado nos dados de nossos concorrentes nós viemos à conclusão que, eles poderia suportar em torno de 240/sec. Nós pensamos que era aprovada! porque era nossa primeira liberação. Porque todos os concorrentes falaram sobre o número de guarda-fogos suportou mas não na taxa.

A memória bate o céu

Nossa memória batia sempre o céu mesmo em 512MB! (Exceção de OutOfMemory) nós responsabilizamosMas nós não poderíamos escapar para por muito tempo! Nenhuma matéria se nós conectamos o cliente ou não nós usamo-nos para bater o céu em um par dias máximos dos dias 3-4 lisos! Interessante, isto era reprodutível quando nós emitimos dados em taxas muito elevadas (então), em torno de 50/sec. Você sup-lo direita, um amortecedor ilimitado que crescesse até que bata o telhado.

Baixa taxa de processamento

Nós processávamos registros na taxa de 40/sec. Nós usávamos a actualização maioria de Mas não deu a velocidade prevista! Por causa disto nós começamos acumular dados na memória tendo por resultado a memória da açambarcamento!

Perda dos dados:- (

Muito em altas velocidades nós usamo-nos para faltar muito um pacote. Nós parecemos ter pouca perda dos dados, mas aquela conduziu a um porco da memória. Em algum que tweaking para limitar o tamanho de amortecedor nós começamos ter uma perda constante dos dados de aproximadamente 20% em taxas muito elevadas.

Mysql puxa-nos para baixo

Nós enfrentávamos uma época resistente em que nós importássemos uma lima de registro aproximadamente de 140MB. Mysql começou hog, o rastejamento começado máquina e às vezes parou de mesmo responder. Sobretudo, nós começamos começ intervalos de parada das paralizações completas e da transação. Qual reduziu eventualmente a compreensibilidade do sistema.

Web client lento

Aqui outra vez nós responsabilizamos o número de gráficos que nós mostramos em uma página como o gargalo, ignorando o fato de que havia muitos outros fatores que puxavam o sistema para baixo. As páginas usadas para tomar 30 segundos à carga para uma página com 6-8 gráficos e tabelas após 4 dias no centro de dados do Internet.

Estrada ao nirvana

Memória de controlo!

Nós tentamos põr um limite sobre o tamanho de amortecedor de 10.000, mas não fêz dura para por muito tempo. A falha principal no projeto era que nós supor que o amortecedor de ao redor 10000 bastaria, isto é nós estaríamos registros do processo antes que o amortecedor de 10.1000 alcances. Inline com o princípio “que algo pode ir erradamente ele irá mal!” foi mal. Nós começamos afrouxar dados. Subsesquently que nós decidimos ir com pôr em esconderijo baseado da lima lisa, onde os dados foram despejados na lima lisa e carregados na base de dados usando da “os dados carga infile”. Esta era muitas vezes mais rapidamente do que uma inserção maioria através do excitador da base de dados. você pôde igualmente querer à verificação geral algumas optimizações possíveis com os dados da carga infile. Isto reparou nosso problema de aumentar o tamanho de amortecedor dos registros crus.

O segundo problema que nós enfrentamos era o aumento de À revelia usou “TransientSessionStorage” que pôr em esconderijo os objetos da imagem na memória, parecido lá ser algum problema em limpar os objetos, mesmo depois que os rerferences foram perdidos! Assim nós escrevemos uma execução pequena de “FileStorage” que armazenam os objetos da imagem na lima local. E seja serido à medida que o pedido entra. Além disso, nós igualmente implmentated um mecanismo da limpeza às imagens velhas da limpeza (imagens mais velhas do que 10mins).

Um outro aspecto que interessante nós encontramos era aqui que o coletor de lixo teve a mais baixa prioridade assim que os objetos criados para o cada registros, foi limpado mal. Está aqui pouca matemática para explicar o valor do problema. Sempre que nós recebemos um registro que do registro nós criamos ~20 objetos (hashmap, cordas tokenized etc.) assim na taxa de 500/sec para 1 segundo, o número de objetos era 10.000 (20*500*1). Devido ao coletor de lixo de processamento pesado nunca teve uma possibilidade à limpeza os objetos. Tão tudo que nós tivemos que fazer era uma emenda menor, nós apenas atribuiu o “zero” às referências do objeto. Voila! o coletor de lixo era nunca torturado mim supor; -)

Aerodinamizando a taxa de processamento

A taxa de processamento estava em um 40/sec pobre que significasse que nós poderíamos mal suportar mesmo uma irrupção pequena de registros do registro! O controle da memória deu-nos alguma consolação, mas o problema real era com a aplicação dos filtros alertas sobre os registros. Nós tivemos ao redor 20 propriedades para cada registro, nós usamo-nos para procurarar por todas as propriedades. Nós mudamos a execução ao fósforo para aquelas propriedades que nós tivemos critérios para! Além disso, nós igualmente tivemos um escape de memória no processamento alerta do filtro. Nós mantivemos uma fila que crescesse para sempre. Assim nós tivemos que manter um objeto da lima lisa que despeja para evitar a re-análise gramatical dos registros para dar forma a objetos! Além disso, nós usamo-nos para fazer o ato da pesquisa por um fósforo para cada um da propriedade mesmo quando nós não tivemos nenhum critério alerta configurado.

Que uh-uh da perda dos dados?

Uma vez que nós reparamos a memória emite em receber os dados isto é que despejam na lima lisa, nós nunca perdeu dados! Além do que isso nós tivemos que remover um par índices não desejados na tabela crua para evitar as despesas gerais ao despejar dados. Nós índices do hadd para as colunas que poderiam ter um máximo de 3 valores possíveis. Qual realmente fêz a inserção mais lenta e não foi útil.

Perguntas de ajustamento do SQL

Suas perguntas são suas chaves ao desempenho. Uma vez que você começa pregar as edições, você verá que você pôde mesmo ter que de-normalizar as tabelas. Nós fizemo-lo! Estão aqui alguns dos learnings chaves:

* O uso “analisa a tabela” para identificar como a pergunta do mysql trabalha. Isto dar-lhe-á a introspecção sobre porque a pergunta é lenta, isto é se está usando os índices corretos, se está usando uma varredura etc. do nível da tabela.

* Nunca suprima de fileiras quando você trata os dados enormes na ordem de 50.000 registros em uma única tabela. Sempre a tentativa para fazer uma “gota tabela” tanto quanto possível. Se não é possível, remodele seu esquema, que está sua somente maneira para fora!

* Evite não desejado Uma vantagem escondida é o fato de que impor a simplicidade em suas perguntas.

* Se você está tratando os dados maiorias, sempre o uso da “dados carga infile” lá é duas opções aqui, local e telecontrole. Use o local se o mysql e a aplicação estão no mesmo telecontrole do uso da máquina de outra maneira.

* Tente rachar suas perguntas complexas em duas ou três perguntas mais simples. As vantagens nesta aproximação são que o recurso do mysql não hogged acima para o todo o processo. Tenda a usar tabelas provisórias. Em vez da utilização uma única pergunta que meça através de 5-6 tabela.

* Quando você trata a enorme quantidade de dados, isto é você quer aos proces diz 50.000 registros ou mais em uma única tentativa da pergunta usando o limite ao processo de grupo os registros. Isto ajudá-lo-á a escalar o sistema às alturas novas

* Use sempre transações menores em vez das grandes isto é que medem através das tabelas de “n”. Isto trava acima os recursos do mysql, que puderam causar a lentidão do sistema mesmo para perguntas simples

* Usam-se

* Assegure-se de que o as perguntas da interface de utilizador tenham critérios ou limite-se.

* Igualmente assegure-se de que a coluna dos critérios esteja posicionada

* Não tenha o valor numérico em critérios do sql dentro das citações, porque o mysql faz um tipo molde

* use tabelas provisórias tanto quanto possível, e deixe-as cair…

* A inserção de seleto/supressão é um fechamento dobro da tabela… esteja ciente…

* Ciao que você não causa dor à base de dados do mysql com a freqüência de suas actualizações à base de dados. Nós tivemos um caso que típico nós nos usamos para despejar à base de dados depois que cada 300 registros. Assim quando nós começamos testar para 500/sec nós começamos ver que o mysql nos arrastava literalmente para baixo. Isso é quando nós realizamos que o typicall na taxa de 500/sec lá é da “um pedido infile dos dados carga” cada segundo à base de dados do mysql. Assim nós tivemos que mudar para despejar os registros após 3 minutos um pouco do que 300 registros.

Esquema de ajustamento da base de dados

Quando você trata a enorme quantidade de dados, assegure-se de sempre que você divida seus dados. Aquela é sua estrada à escalabilidade. Uma única tabela com diz que 10 lakhs podem nunca escalar. Quando você pretender executar perguntas para relatórios. Tenha sempre dois níveis de tabelas, das tabelas cruas uma para os dados reais e de um outro jogo para as tabelas do relatório (as tabelas que as interfaces de utilizador perguntam sobre!) Assegure-se de sempre que os dados em suas tabelas do relatório nunca cresçam além de um limite. Encerre-o estão planeando usar Oracle, você pode tentar a divisão baseada em critérios. Mas infelizmente o mysql não suporta aquele. Assim nós teremos que fazer aquele. Mantenha uma tabela do meta em que você tem a informação de encabeçamento isto é que tabelam para procurar, para um jogo do tempo dado dos critérios normalmente.

* Nós tivemos que andar através de nosso esquema da base de dados e nós adicionamos para adicionar alguns índices, suprimimos de algum e mesmo de colunas duplicadas para remover caro

* Ir para a frente nós realizamos aquele que tem as tabelas cruas como InnoDB era realmente umas despesas gerais ao sistema, assim que nos mudamo-lo a MyISAM

* Nós igualmente fomos à extensão de reduzir o número de fileiras nas tabelas de estática envolvidas em juntamo-nos

* O ZERO em tabelas de base de dados parece fazer com que algum desempenho bata, assim que evite-as

* Não tenha índices para colunas que permitiu valores de 2-3

* Verifique a necessidade para cada índice em sua tabela, eles é caro. Se as tabelas são de InnoDB então verific novamente sua necessidade. Porque as tabelas de InnoDB parecem tomar ao redor 10-15 cronometram o tamanho das tabelas de MyISAM.

* Use MyISAM sempre que há uma maioria de, qualquer um uma (selecione ou inserção) de perguntas. Se a inserção e o seletos estão indo ser mais então é melhor tê-la como um InnoDB

Mysql ajuda-nos a forjar adiante!

Ajuste seu usuário do mysql somente depois que você multa - ajuste seus perguntas/esquemas e seu código. Somente então você pode ver uma melhoria perceivable no desempenho. Estão aqui alguns dos parâmetros que vêm em acessível:

* Use o tamanho de associação do amortecedor que permitirá suas perguntas de executar mais rapidamente --innodb_buffer_pool_size=64M para InnoDB e uso --key-bufer-size=32M para MyISAM

* Mesmo perguntas simples começadas tomar mais tempo do que esperado. Nós fomos confundidos realmente! Nós realizamos que o mysql parece carregar o índice de toda a tabela que começar introduzir sobre. Assim o que aconteceu tipicamente era, toda a pergunta simples a uma tabela com 5-10 fileiras tomou ao redor 1-2 segundos. Em uma análise mais adicional nós encontramos que imediatamente antes da pergunta simples, da “infile dos dados carga” acontecido. Isto desapareceu quando nós mudamos as tabelas cruas ao tipo de MyISAM, porque o tamanho de amortecedor para o innodb e MyISAM são duas configurações diferentes.

para uns parâmetros mais configuráveis veja aqui.

Ponta: comece seu mysql começar com a seguinte opção --o registro-erro isto permitirá o registo de erro

Mais rapidamente… mais rapidamente web client

A interface de utilizador é a chave a todo o produto, especial a velocidade percebida da página é mais importante! Está aqui uma lista de soluções e de learnings que puderam vir em acessível:

* Se seus dados não estão indo mudar para diga 3-5 minutos, ele é melhor pôr em esconderijo suas páginas do lado de cliente

* Tenda a usar Iframe para os gráficos internos etc. que dão um fastness percebido a suas páginas. Melhore ainda o uso o mecanismo satisfeito baseado Javascript do carregamento. Este é algo que você pôde querer fazer quando você tem dizer os gráficos 3+ na mesma página.

* O Internet Explorer indica a página inteira somente quando todos os índices são recebidos do usuário. Assim é aconselhável usar iframes ou Javascript para o carregamento satisfeito.

* Nunca use entradas múltiplas/duplicadas da lima do CSS no HTML page. O Internet Explorer tende a carregar cada lima do CSS como uma entrada separada e aplica-se na página completa!

A linha de fundo seus perguntas e esquema faz o sistema mais lento! Repare-os primeiramente e responsabilize-o então a base de dados!

Veja igualmente

* Elevado desempenho Mysql

* Desempenho da pergunta

* Explique a pergunta

* Perguntas de aperfeiçoamento

* Ajustamento de InnoDB

* Mysql de ajustamento

Categorias: Analisador do guarda-fogo | O desempenho derruba esta página era 18:00 do Last modified, 31 agosto 2005.

- Ramesh-

Artigo Fonte: Messaggiamo.Com

Translation by Google Translator





Related:

» Seo Elite: New Seo Software!
» AntiSpywareBOT
» Reverse Mobile
» Error Nuker


Webmaster começa O Código do HTML
Adicionar este artigo para o seu site agora!

Webmaster enviar seus artigos
Nenhum registro necessário! Preencha o formulário e seu artigo está no Messaggiamo.Com Diretório!

Add to Google RSS Feed See our mobile site See our desktop site Follow us on Twitter!

Envie os seus artigos para Messaggiamo.Com Directory

Categorias


Copyright 2006-2011 Messaggiamo.Com - Mapa do Site - Privacy - Webmaster enviar seus artigos para Messaggiamo.Com Directory [0.01]
Hosting by webhosting24.com
Dedicated servers sponsored by server24.eu