Como proteger um banco de dados com dados críticos contra abusos de consultas lentas?

Situação: há uma batalha servidor, вебсервер e MySQL. Com мусклем interagem, em primeiro lugar, scripts PHP são executados sob апачем neste servidor e, em segundo, os usuários remotos através de TCP. Eles funcionam com a mesma base. No entanto, a integridade do ligamento local apache mais мускль" crítica, e "excluídos usuários mais мускль" — não.


"Remoto" usuário inicia ásperas consulta — por exemplo, o REGEXP preferido de неиндексированному coluna de 20 milhões de linhas. Quando o fizer, durante 3 a 5 minutos para inibir a todas as outras consultas ao banco, que em condições normais de voar. No final crítica de parte da web pára de responder com uma velocidade aceitável. Como fazer para que usuários remotos possam enviar говнозапросы, sem prejudicar o funcionamento de locais de conexões ao banco de dados? "Локалка" e "удаленщики" коннектятся a bancos de dados de diferentes usuários. Espalhar a base em duas — uma opção não estiver satisfeito. A margem de desempenho de um servidor (de 8 núcleos, 24 giga de memória).


Answers 7:

Share:


Adrian Matampac
Answer 1

Suportar a leitura para a área de юзверей no servidor slave (pode residir na mesma железяке, só usar um disco rígido), e o registro no assistente. Dividir a leitura e a gravação usando o mysql proxy forge.mysql.com/wiki/MySQL_Proxy_RW_Splitting.


Roxy D
Answer 2

você pode configurar a replicação (задачнике não especifica se os clientes remotos para mudar de banco de dados): master-eu dar o trabalho com o servidor local e remoto aos clientes e o processo de remoção de arquivo de cópias — de escravo. Assim, por exemplo, a questão de бэкапом dados back-end, além de 1 milhão. registros é melhor decidir é através do recurso a um servidor slave.


Margie Myers
Answer 3

Escrever um demônio, que com certa frequência verifica atuais мускульные квери de ambiente de usuário, e киляет a eles, se estende por mais tempo do que...


Ayaanhazratali Shaikh
Answer 4

Espalhar a base em duas — uma opção não estiver satisfeito.? e por que, necessariamente, lançar a dois — como já foi dito organize um escravo ou a construção de um sistema assistente-слейвы não está em seus planos? afinal de contas, portanto, não só o desempenho melhorar, mas ainda e confiabilidade. Sim, claro, Você vai precisar de habilidade tudo é projetar e decidir tarefa de sincronização — mas o resultado pode exceder as suas expectativas.


Khadiza Dolan
Answer 5

usar o Sphinx


kevin watson
Answer 6

Acho que a partir de ferro podem ajudar высокооборотистые scsi/sas parafusos e софтовой de otimização — sort_cache ,random_cache e т. п.


john binion
Answer 7

Eu, como Ынтерпрайзнику, em geral, parece algo selvagem dar usuários, que não é de desenvolvedores / support engenheiros, e não sabem bem SQL e banco de dados em geral, direto do SQL-level acesso à grande carregada de banco de dados com dados críticos (aliás, o que significa o acesso de TCP? Você quis dizer — capaz de executar manualmente os pedidos dos clientes do mysql, o tipo de SQLYog?)

Você é tão necessário, para que Seus usuários possam executar pessoalmente o torto escrito pedidos? Eles não podem dispensar um conjunto de заголовленных report-consulta, ou algo assim? Eles não podem enviar solicitações que querem cumprir, especial de treinamento чуваку, o que seria o seu ревьювить e executar? E como você impedir que нечаянные a exclusão de dados e outras coisas? Usuários têm read-only privilégios em todos os objetos do BD?

Se Lhe tão importante dar usuários o acesso... Então, como disseram aqui, fazer slave-o servidor de replicação, ou configurar o user resource quotas sobre o uso de CPU, IO-largura de banda, memória de cada usuário (sob as quais os usuários коннектятся junto do banco de dados). O próprio mysql não é muito forte, porque não sei como ele com cotas de recursos.