Ir para conteúdo
Fórum Script Brasil

Denis Courcy

Moderadores
  • Total de itens

    3.089
  • Registro em

  • Última visita

Tudo que Denis Courcy postou

  1. Oi, Valdilei! Simplesmente acrescente a cláusula ORDER BY após a linha do JOIN. Deste jeito: SELECT t1.id, t2.id FROM tabela1 t1 INNER JOIN tabela2 t2 ON t1.a1=t2.a1 and t1.a2=t2.a2 and t1.a3=t2.a3 and t1.a4=t2.a4 ORDER BY t2.id
  2. Pedro, Não fiz teste ainda. Voce já ordenou assim? SELECT TotalScore, TotalGrade, COUNT(TotalGrade) AS count FROM game WHERE TotalGrade <= -2 GROUP BY TotalGrade ORDER BY TotalGrade ASC, TotalScore DESC
  3. Oi, Pedro! Por restrições de acesso, não consigo ver a foto que você enviou. Pode remetê-la para processos4@capemi.com.br, por favor?
  4. Olá todos que leem este post Este alerta é para informar que as modificações aqui citadas valem para este usuário Modificar o arquivo my.cnf sem o devido conhecimento do que estão fazendo pode provocar danos não intencionais. Oi, Pedro! Para realizar as otimizações você deverá seguir estes passos: 1. parar o servidor mysql o comando para isso é: (através de linha de comando) shell> mysql.server stop 2. fazer cópia do my.cnf 3. editar arquivo my.cnf para que o conteúdo fique como o abaixo: [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock # Default to using old password format for compatibility with mysql 3.x # clients (those using the mysqlclient10 compatibility package). old_passwords=1 # Nossas modificações inicializam aqui query_cache_type=1 # Ativa o query cache no MySQL 4.x. # Armazena todos os resultados, exceto SELECT no cache. query_cache_limit=1M query_cache_size=32M max_connections=100 # É o valor default. Vamos permanecer com este valor, por enquanto, porque você não tem memória suficiente para mais conexões. # memory = key_buffer + (sort_buffer_size + read_buffer_size)* max_connections # Que é agora: 8 + (20 + 0,25) * 100 = 233 MB # max_connections = aprox. MaxClients setting in httpd.conf file interactive_timeout=100 #wait_timeout=28800 # Valor de wait_timeout reduzido para prevenir que idle de clientes segurem conexões. wait_timeout=15 connect_timeout=10 # table_cache=64 # Verifique sempre a variavel opened_tables e ajuste table_cache após executar por algum tempo. table_cache=1024 #tmp_table_size=32M by default #thread_cache=128 # Valor de thread_cache reduzido para prevenir consumo indevido de memória (memory hogging). thread_cache=32 # key_buffer=258M # Reduzido key_buffer para verificar o tamanho dos arquivos de índice *.MYI files. key_buffer=8M # Comentados os buffers para manter o default. # sort_buffer_size=2M by default. # read_buf fer_size=128K by default. # read_rnd_buffer_size=256K by default. # myisam_sort_buffer_size=8M by default. # thread_concurrency O valor deve ser 2 * (no. de CPUs) thread_concurrency=2 # Habitei o log de slow queries. Para verificar quais queries estão tomando mais de 2 segundos. # As tabelas que aparecerem no arquivo mysqld.slow.log necessitarão de melhorias. log_slow_queries=/var/log/mysqld.slow.log long_query_time=2 [mysql.server] user=mysql basedir=/var/lib [client] socket=/path/to/mysql.sock 4. reinicializar o server mysql o comando para isso é: (através de linha de comando) shell> mysql.server stop 5. Coloque em uso para teste e informe qualquer variação positiva ou negativa, pois só tenho .
  5. Oi, Mauro, Sua resposta é simples. A cláusula ORDER BY deve ser depois da cláusula WHERE. Assim, sua consulta deveria ser parecida com esta abaixo. SELECT * FROM cliente WHERE nome_cliente LIKE "%suapesquisa%" ORDER BY nome_cliente ATENÇÂO: Esta é uma pesquisa que firará mais lenta a medida que a tabela crescer em volume (quantidade de registros), pois sempre será feita por TABLE SCAN, ou seja, (nunca utilizará índices) sempre fará varredura em toda a tabela para encontrar o nome desejado. Mesmo que você tenha criado íncice pelo atributo nome_cliente. Para evitar isto faça a pesquisa por WHERE nome_cliente LIKE "%suapesquisa". Sem o % na última posição.
  6. Oi, Valdilei! Não. Veja resposta completa abaixo Neste caso o select é um pouco diferente. Ele usará um INNER JOIN e será assim: Supondo que a estrutura da tabela1 seja igual a tabela2 mas os registros estejam em ordem diferente. tal como abaixo Nota a tabela2 já foi mencionada no post anterior. Tabela1 id a1 a2 a3 1 bb dd dd 2 aa be ch 3 aa aa aa 4 bb da dd 5 xx be aa SELECT t1.id, t2.id FROM tabela1 t1 INNER JOIN tabela2 t2 ON t1.a1=t2.a1 and t1.a2=t2.a2 and t1.a3=t2.a3 and t1.a4=t2.a4 O retorno seria assim: t1.id t2.id 1 2 1 5 2 1 3 3 5 4
  7. Nill, 1. Que tipo de engine você está usando? InnoDB ou MyISAM? O motivo desta pergunta é que no engine MyISAM não há controle de integridade referencial por parte do banco de dados. Você pode, por exemplo excluir o pedido de vendas, por exemplo sem excluir os ítens do pedido de vendas. Deixando-os órfãos, isto é sem nenhuma referência para poder achá-los novamente. No caso de MyISAM, ainda, o controle de integridade referencial deverá ser feito por você através da linguagem de programação que você usa. O engine InnoDB, por outro lado, e, se montado corretamente, impedirá que situações como as que mencionei acima ou que a que você está passando, ocorra. Á vantagem do engine MyISAM sobre o engine InnoDB é a velocidade de acesso. 2. Resposta: SIM. É através deste id_cliente gravado na tabela tbl_pesqsat que você encontrará a referência ao registro contido na tabela tbl_clientes.
  8. Oi, Nill! Já que você está em fase de aprendizado, vamos melhorar um pouco a sua metodologia. adote como regra que os nomes de atributos(campos) são únicos e devem se referenciar sempre a uma única idéia. Por exemplo, nas tabelas tbl_clientes e tbl_pesqsat os atributosid que você criou possuem o mesmo nome porém com idéias (semânticas) diferentes já que um guarda o id do cliente e o outro guarda o id do pesqsat. O ideal, neste caso é atribuir um nome que seja único e represente a semântica correta. Troque os nomes do atributosid na tabela tbl_clientes para id_cliente. Troque, também, o nome do atributo id na tabela tbl_pesqsat para id_pesqsat. Parece besteira ma isto o ajudará muito quando você trabalhar com bancos que contenham muitas tabelas. Seguindo a idéia acima, troque o nome do atributo tbl_clientes_id na tabela tbl_pesqsat para id_cliente. Observe que a semantica e o nome do atributo foram preservados. Quando se vê o nome do atributo sabe-se imediatamente do que se trata. Agora, respondendo sua pergunta. Não há nada errado com seu cadastro. Você provavelmente não criou a integridade referencial que o impediria de cadastrar um id_cliente (já assumi que você trocou o nome dos atributos) na tabela tbl_pesqsat antes de você cadastrá-lo na tabela tbl_clientes. Então o banco aceitou, sem questionar, o que você mandou fazer. Outro ponto que podemos citar aqui é que quando você informou tbl_clientes_id INTEGER UNSIGNED NOT NULL na criação da tabela tbl_pesqsat você não informou o valor default para este atributo, então o MySQL assumiu que o valor dele será ZERO. Todas as vezes que você cadastrar algo em tbl_pesqsat e não informar o valor de id_cliente, e não existir a integridade referencial, então id_cliente será preenchido com ZERO.
  9. Oi Valdinei! A idéia é esta: Tabela2 id a1 a2 a3 1 aa be ch 2 bb dd dd 3 aa aa aa 4 xx be aa 5 bb dd dd SELECT * FROM Tabela2 WHERE a1 = (SELECT a1 FROM tabela2 GROUP BY a1, a2, a3 HAVING COUNT(id) > 1 ) Linhas retornadas Tabela2 id a1 a2 a3 2 bb dd dd 5 bb dd dd Acrescente os campos conicidentes na cláusula GROUP BY
  10. Oi, Pedro! Esta sua pergunta foge do meu escopo. Você pode abrir um tópico sobre este questionamento, na área de linux aqui do fórum e eles poderão te auxiliar melhor.
  11. Oi, Micheus! Valeu pela dica. Oi, Maicon! O que você precisa é estudar sobre indices full-text. Clique no link e leia o artigo Getting-Started-With-MySQLs-Full-Text-Search-Capabilities. Depois, se ainda houver dúvidas, post novamente. Um abraço
  12. Oi, Pedro! Continuando a avaliação do post #7 3. As variaveis Handler_read_rnd (com 54213) e Handler_read_rnd_next (com 19424448) confirmam o que perguntei sobre índices no post #2 item 4. Valores altos nestas váriáveis indicam que as consultas estão sendo executadas com table scan (sem uso de índices, ou seja está fazendo varredura em toda a tabela para encontrar o desejado) Você precisa indexar várias de suas tabelas para melhorar as queries executadas. Se você desejar, pode passar as queries que eu te informo onde criar os índices. 4. O mais importante o cálculo abaixo mostra a quantidade de memória disponível necessária para operar o mysql com sua configuração atual: MySQL_MEMORIA_USADA = key_buffer_size + max_connections * (join_buffer_size + read_buffer_size + sort_buffer_size + thread_stack + tmp_table_size) 8388600 + 100 * (131072 + 131072 + 2097144 + 196608 + 33554432) = 8388700 * 36110328 = 280MB aproximadamente. No post #5 item 1 falei que seu problema é falta de memória RAM. Aqui está a explicação. Você necessita ter, no mínimo, 280MB e possui apenas 18MB. Mesmo se contasse com o cache atual 220MB + o buffer 3,4 MB daria 241MB. Mas este buffer e este cache serão usados também pelo SO Linux. O que mostra que você precisa, com urgência, aumentar a memória desta máquina. 5. Não adianta fazer mais otimizações que estas já descritas se você não aumentar a quantidade de memória RAM.
  13. Oi, Maicon! Poderia melhorar sua pergunta, por favor. Ainda não entendi o que você quer.
  14. Pedro, O comando show variables que você passou não contempla as variáveis abaixo porque seu BD não está em "movimento", ou seja ninguém está acessando. Voce poderia, por favor enviar-me o valor de SHOW STATUS Tal como SHOW VARIABLES este comando me auxiliará a te ajudar. CREATED_TMP_DISK_TABLES CREATED_TMP_TABLES CREATED_TMP_FILES HANDLER_READ_RND HANDLER_READ_RND_NEXT KEY_READS KEY_RADREQUEST OPEN_TABLES OPENED_TABLES
  15. Oi, Pedro! 1. Variáveis faltando impossibilitaram uma melhor análise da performance. Quando você me informou o valor das variáveis você o fez completo, ou seja, não esqueceu de nenhuma? O servidor estava sendo acessado por outras pessoas no momento em que você comandou o show variables? A pergunta se dá em razão de algumas variáveis importantes não terem aparecido. Tais como: CREATED_TMP_DISK_TABLES CREATED_TMP_TABLES CREATED_TMP_FILES HANDLER_READ_RND HANDLER_READ_RND_NEXT KEY_READS KEY_RADREQUEST OPEN_TABLES OPENED_TABLES 2. A variável WAIT_TIMEOUT está com um valor muito alto. 28800 (segundos) no seu caso. Esta variável é a responsável por informar o tempo que os processos podem ficar em sleeping. Um tempo grande nesta variável mantém clientes segurando conexões e bloqueando o acesso de outros que queiram conectar para realizar realmente seus trabalhos. Um tempo bom para esta variável é de 15 (segundos). Ao reduzir o valor de WAIT_TIMEOUT você deverá aumentar o valor da variável MAX_CONNECTIONS de 100 (seu caso) para 300. Deve aumentar, também, o valor de THREAD_CACHE_SIZE (no seu caso está 0) para 5 (porque você tem pouca memória). O ideal é THREAD_CACHE_SIZE = MAX_CONNECTIONS + 1. THREAD_CACHE_SIZE é responsável por manter em memória as trheads para reutilização. Por favor me envie os valores das variáveis acima citadas para que eu possa completar a análise.
  16. Este pode ser o seu grande problema. Pois a velocidade de acesso está diretamente ligado a processador e disponibilidade de memória RAM As tabelas do Mysql trabalham normalmente em dois tipos de engine. Um rápido, porém não permite o controle de constraints (integridade referencial) MyISAM. Outro, um pouco mais lento, e dependendo fica muito lento, que permite o controle de integridade InnoDB. Há outros menos usados e que também influenciam na velocidade de acesso dos dados no servidor. Não foi isso que perguntei. Tabelas sem indices operam por table scan e demoram muito a retornar os valores desejados. Principalmente se a concorrencia de memória for grande e houver muitos GROUP BY, ORDER BY e JOINS. O que eu preciso são as variáveis que te passei. use o utilitário de linha de comando do mysql chamado mysql. digite shell> mysql -r root -p o mysql vai pedir para você colocar a senha de acesso. se tudo ocorreu dentro do esperado um prompt como abaixo vai aparecer: mysql > digite mysql >show variables; uma lista com as variaveis e seu conteudo vais aparecer no monitor. não lembro se você pode redirecionar a saida para um arquivo. tente. para encerrar o mysql digite mysql >quit; Envie-me o arquivo dcourcy@gmail.com 1 não pare o servidor. você pode copiar o arquivo. ele é usado somente na carga do servidor. Ou seja, quando este inicializa o serviço. 2 não vou ensiná-lo agora a desativar o servidor. mais tarde, se houver necessidade, sim. 3 Isto é o que eu quero medir. as variáveis que passei funcionam como parâmetros e nos auxiliarão na configuração do servidor MySQL. Estou encerrando às 17:00 (GMT -3) amanhã continuamos.
  17. Oi, Pedro! Elenquei alguns fatores para iniciarmos nossa pesquisa. 1 - Sua RAM está com 512Mb e compartilhando?. Experimente aumentar. Para o MySQL quanto mais memória melhor. 2 - Quantos acessos você tem por dia? 3 - Que tipo de engine você está usando? MyISAM, InnoDB, ...? 4 - Você indexou corretamente suas consultas? Há indices nas ligações de JOIN e nos campos de cláusula WHERE? 5 - Você poderia me passar o arquivo my.cnf para que eu possa estudá-lo? Gostaria de ver os valores dos seguintes parâmetros: max_connections wait_timeout thread_cache_size table_cache key_buffer_size query_cache_size tmp_table_size Open_tables Opened_tables Key_read_requests Key_reads Threads_created Handler_read_rnd Handler_read_rnd_next //Estes aqui abaixo são somente se você usa muitas tabelas em memória tmp_table_size Created_tmp_disk_tables Created_tmp_tables Created_tmp_files Você pode usar o comando show variables para me informar o valor destes parâmetros.
  18. Denis Courcy

    banco progress

    Verifique se este manual pode te ajudar. Consegui com um amigo que trabalha com este banco. dpspr.pdf
  19. Não tem jeito de aprender a programar se você não tiver as duas visões. Código e Visual. Você pode associar o útil ao agradável no que diz respeito a WEB para você. Aconsehlo que você dê uma chegada no fórum de PHP, aqui no Script Brasil e se intere um pouco mais. Quando suas dúvidas vierem ao encontro do Banco de dados, especialmente o MySQL, retorne a este fórum e estaremos prontos a auxiliá-lo.
  20. A diferença entre uma data e outra é em dias e funciona assim: data_final - Data_atual = dias_de_diferença. Especifique melhor sua pergunta se isto não te atender.
  21. Explicando um modelo fácil Além de sua tabela de login crie uma tabela de perfil de acesso. Nesta nova tabela coloque os campos: idperfil numerico nomeperfil caracter ... os demais campos serão tipo booleanos e cada campo será o nome de um item do seu menu. Crie um cadastro para perfil de acesso. No cadastro de login coloque um campo para receber que tipo de perfil de acesso o usuário terá e, No login, propriamente dito, pesquise o perfil de acesso habilitando e desabilitando os menus daquele perfil daquele usuário. É só.
  22. Que tipo de linguagem de programação voce usa?
  23. Oi, LuizCarlos A linha 005, PLACA MAE, 002 de seu exemplo deveria estar como 005, PLACA MAE, 001 para a rotina funcionar, conforme seu relato em Este tipo de pesquisa é conhecido como explosão de materiais e é feito da seguinte maneira, conforme a tabela que você apresentou. SELECT * FROM Tabela1 WHERE pr_pai IN (SELECT Tabela1.pr_codigo FROM Tabela1 WHERE Tabela1.pr_pai = 1); Neste caso a constante 1 em "WHERE Tabela1.pr_pai = 1" pode ser uma variável e representa o atributo pr_codigo onde este é igual ao atributo pr_pai. Ou seja, aquele que dá origem a pesquisa. "No seu caso (computador)".
  24. Denis Courcy

    Backup

    Oi, Amauri! Utilize o utilitario do mysql chamado mysqldump. É, em minha opinião, a ferramenta mais confiável para fazer backup. Em SO Windows utilize assim: mysqldump --opt --flush-logs --triggers --port=3306 --user=root --result-file=backup.sql --databases nomedomeubancodedados Em SO Linux utilize assim mysqldump --opt --flush-logs --triggers --port=3306 --user=root --databases nomedomeubancodedados > backup.sql A explicação do que faz cada um dos parâmetros está no manual do mysql. Que aconselho ter como livro de cabeceira. A restauração do backup, se faz, usando o comando de linha mysql, da seguinte maneira: Em ambos SO Windows e Linux mysql -u root -p O utilitario vai pedir senha para entrada no banco. se não pedir é porque você não cadastrou. Uma vez aceito será exibido um prompt como abaixo: mysql > Digite: mysql > source backup.sql É só.
  25. Estou transferindo este post para a área de delphi. O pessoal de lá poderá te auxiliar melhor.
×
×
  • Criar Novo...