SQL Query sobrecarregando servidor

1

Eu tenho um arquivo php que está sendo chamado com muita frequência para uma verificação de sessão de um aplicativo externo. Não sei quantas ligações existem a cada segundo, mas acho que pode ser de 20 a 100 chamadas por segundo.

No entanto, este arquivo .php inclui uma consulta SQL que atualiza uma única linha. Uma vez que eu não ultrapasse essas linhas, todo o banco de dados fica muito lento e, no final, meu fórum não está mais acessível. Eu acho que é algo como um problema de servidor (por exemplo, para muitos IOPS?). Infelizmente eu não sei como posso localizar o motivo exato da desaceleração, nem eu não sei como posso determinar quantas chamadas recebo a cada segundo para o arquivo php.

Esta é a consulta SQL muito simples (a cláusula where contém apenas a chave primária):

UPDATE bot_sessions SET ip_address = :ip_address, renewal_count = renewal_count + 1
       WHERE username = :username AND session_token = :session_token

Então, duas perguntas:

  1. Como posso descobrir com que frequência meu arquivo php específico está sendo chamado a cada segundo?
  2. Como posso localizar o motivo pelo qual todo o meu banco de dados fica mais lento depois que eu uso esta consulta de atualização?
por kentor 23.08.2015 / 23:35

1 resposta

2

Você deve ser capaz de descobrir com que frequência um arquivo PHP específico está sendo chamado, examinando os logs do servidor da web. Existem alguns outros hacks - por exemplo, o uso do Google Analytics (que será menos preciso) ou a atualização de um arquivo / contador (mais recursos intensivos).

Como disse @ ma.tome, monitorar sua utilização lhe dá um bom lugar para começar, e é geralmente útil. Um processo do Mysql rodando a 135% significa que ele usa mais de 1 CPU. (Se você tem 4 CPUs, o total é de 400%). A execução do vmstat fornecerá informações de IO.

Outra coisa a ser feita é começar a registrar tempos de consulta no seu banco de dados. Além disso, verifique seus índices - dependendo do seu aplicativo, se ele já não estiver indexado, você poderá obter grandes aumentos de desempenho criando um índice para nome de usuário em bot_sessions. (Não tenho certeza se nome de usuário ou session_token é a chave primária que você está especificando, pode querer criar um índice no que não é uma chave primária) - de qualquer forma, a cláusula where contém mais do que apenas a chave primária. p>

Além disso, o seu sistema pode estar simplesmente sem memória RAM. veja quanto swap você está usando - e, se necessário, jogue mais RAM no problema ou diminua vm.swappiness.

    
por 24.08.2015 / 01:42