PHP, Java, JavaScript, XML, XHTML, HTML, CSS, ASP, Delphi, Assembly, LaTeX, C, UML, Flash, Perl, SQL, Python, Zope, Pascal, WML. Se conhece mais de 3 siglas referidas, este é o forum para si.
Moderadores: Administradores, Moderadores
por jsa » Quinta Mar 15, 2007 16:26
Óla a todos.
Estou a utilizar uma base de dados MySQL e estou com um problema.
Pretendo inserir dados numa tabela a uma velocidade mais elevada.
Existem algumas alterações que possa fazer na BD que permitam isso??
Abraço,
JSa
-
jsa
- Novato

-
- Mensagens: 4
- Registado: Quinta Mar 15, 2007 16:21
por alfatek » Quinta Mar 15, 2007 16:34
Vivas,
Há imensas optimizações que podes testar para permitir velocidades superiores de inserção. Mas todas as optimizações dependem muito do contexto concreto do problema: versões do mysql, caracteristicas do servidor, caracteristicas do tipo de dados, etc,etc,etc...
Mas normalmente o que se procura optimizar são as operações do tipo SELECT/UPDATE. Habitualmente nos INSERT não há muita optimização a ser feita, depende mais da velocidade da rede, do disco, do tipo de base de dados que escolhes.
A única coisa que estou a ver que podes optimizar é a questão dos indices. Se muitas das colunas tiverem indices a inserção vai ser mais lenta: é necessário "regenerar" muitos indices.
-
alfatek
- Administrador

-
- Mensagens: 3257
- Registado: Sábado Abr 06, 2002 18:28
- Localização: Coimbra
-
por jsa » Quinta Mar 15, 2007 17:19
Agardeço desde já a rápida resposta Alfatek,
O sistema operativo do servidor é XP ou XP Embedded.
Não há limitações da rede porque a BD está na mesma máquina (locolhost).
A versão do MySQL penso que é 4.1, mas se a versão for limitação posso instalar a ultima.
A tabela onde os dados vão ser guardados tem cerca de 80 colunas (1 do tipo timestamp e as restantes do tipo double).
Queria gravar dados em tempo real provenientes de medições.
Neste momento guardo os dados num ficheiro e só depois passo para a BD, mas não consigo mais de 20K/s.
Abraço
-
jsa
- Novato

-
- Mensagens: 4
- Registado: Quinta Mar 15, 2007 16:21
por jsa » Quinta Mar 15, 2007 17:36
Será que alterando a "Table Engine" para NDB tenho melhor desempenho?
Já o tentei fazer mas ocorre um erro "is not enabled" onde posso activar?
Também já li que alterando o valor das varáveis "key_buffer" e "sort_buffer_size" ficaria com mais memoria desponivel para os processos do MySQL.
Como posso fazer alteração?
Abraço
-
jsa
- Novato

-
- Mensagens: 4
- Registado: Quinta Mar 15, 2007 16:21
por alfatek » Quinta Mar 15, 2007 23:44
penso que o melhor engine para o caso ainda é o MyISAM, mas não tenho a certeza.
quanto às variáveis referidas, não me parece que tenham influência na velocidade de inserção. apenas na velocidade dos SELECTs.
para saber como fazer essa alteração basta procurar no google "key_buffer mysql optimization"
Uma tabela com 80 colunas também me costuma parecer uma má ideia que pode prejudicar a performance... Mas obviamente que há excepções e pode realmente ser a melhor solução.
A tabela tem algum indice ou primary key associada? [neste caso não deve ter, para ter melhor performance]
Experimente usar MySQL 5, teoricamente tem melhor performance ou então usar MySQL 3.23.
Mas como já referi, não estou a ver grandes optimizações que se possam fazer a inserir dados...as optimizações são mais ao nivel do hardware, de configurar bem o sistema operativo e do próprio desenho da(s) tabela.
Fica a referência:
http://www.oreilly.com/catalog/hpmysql/toc.html
-
alfatek
- Administrador

-
- Mensagens: 3257
- Registado: Sábado Abr 06, 2002 18:28
- Localização: Coimbra
-
por jsa » Sexta Mar 16, 2007 14:36
Estive a fazer uns testes e realmente tens razão.
Modifiquei o valor das variáveis no ficheiro "my.cnf" e não noto melhorias significativas.
A unica alteração que teve algum efeito nos tempos foi a instalação de uma diferente versão do MySQL.
Tinha instalado o MySQL versão 4.1 e agora instalei a versão 5.0.33 e notei que os inserts ficam mais lentos.
No ciclo de inserts em que estou a tenstar antes demorava 3,7 s agora demora 4,2 s.
Estou a utilizar o XAMPP 1.6.0a com o MySQL, mas penso que não é por aí o problema.
-
jsa
- Novato

-
- Mensagens: 4
- Registado: Quinta Mar 15, 2007 16:21
Voltar para Programação
Quem está ligado:
Utilizadores a ver este Fórum: Nenhum utilizador registado e 4 visitantes