Pergunta

Hey stackoverflow comunidade!

Eu estou tendo um problema onde um programa algorítmico altamente envolvido está usando a utilização da CPU muito pouco: em algum lugar entre 3 e 4%. Ele está levando muito tempo para retornar resultados, e eu acredito que ele simplesmente não está trabalhando duro o suficiente.

Algum de vocês gênios tem alguma idéia por que isso iria ocorrer - se algo que eu esperaria utilização de 100%. Um detalhe adicional é que o programa faz uma inserção na base de dados sqlite3, e, portanto, sim, há um monte de JNI chamadas através da biblioteca sqlite3jdbc eu acredito. (Note que eu queria adiar essas inserções com um lote PreparedQuery mais cedo, mas isso causou problemas de memória principais - há uma grande quantidade de dados).

Agradecemos antecipadamente

UPDATE: Corrigido. Sim, eu estava apenas sendo um idiota, mas eu não esperava que sqlite iria começar uma nova transação e fazer muito em cima.

Agora eu usar um PreparedStatement e fila 32768 entradas antes insert -. Parecia um bom número suficiente para me

Foi útil?

Solução

Obviamente, as chamadas de banco de dados estão causando atrasos. não é uma opção para criar lotes menores e teste se isso ajuda ?? Talvez você poderia paralelizar o algoritmo bem para ter um em algum lugar da fila tomar resultados e outro segmento limpar essa fila?

edit:

Existem também algumas outras áreas problemáticas:

  • optimalization banco de dados (modelo)
  • configuração do servidor de banco de dados
  • velocidade de disco

Todos estes fatores devem ser levados em conta

Outras dicas

Eu nunca recomendaria que alguém o uso de um driver JDBC com JNI se um tipo IV, 100% versão Java está disponível. Google encontrou esta .

Com isso de lado, não posso dizer nada sem mais informações. São o aplicativo e o banco de dados em execução no mesmo hardware?

O que é tão "intensivo" sobre INSERTs?

eu recomendo profiling e obter alguns dados reais em vez de adivinhar. -fé baseada computação nunca funciona para mim.

Se você estiver escrevendo um monte de dados, então parece que você pode ser obrigado disco. Dê uma olhada em seu disco io estatísticas sobre a máquina, e se isso é realmente o gargalo, quer encontrar hardware com melhor io, ou descobrir como fazer menos gravações.

O disco está a abrandar seu aplicativo. INSERTS usar o disco, o disco é lento, e o OS precisa esperar para as operações de gravação ao fim.

Você não pode usar 2 fios, um para o algoritmo, e outro para as inserções? Se você só fazer inserções, você também pode escrever, em seguida, para um arquivo de texto, e executá-los em um momento posterior

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top