Lentidão ao salvar

3 respostas
brizola727

Bom dia!
Estou com um problema ao salvar dados no banco.
Tenho um serviço e ao salvar demora demais se existirem muitos registros para serem salvos...
Tenho um for que percorre todos os registros de uma grid, e nesse caso existem 1000 (mil) itens e cada um deles
possui 6 atributos em media... ou seja seriam 6 mil registros ao salvar.
Se a grid possui até 100 registro o "save" é até aceitável, porem quando aumenta fica lento demais...
Vou colocar um trecho do código onde é feito o save...
Se alguem tiver alguma dica de como melhorar fico agradecido.

for (Object obj : array) {
				JSONObject o = (JSONObject) obj;
				System.out.println("idInvRepSeq: " + o.get("idInvRepSeq"));
				System.out.println("seqNumber: " + o.get("seqNumber"));
				System.out.println("seqStatus: " + o.get("seqStatus"));
				System.out.println("serial: " + o.get("serial"));
				System.out.println("causeId: " + o.get("causeId"));
				System.out.println("troubleTypeId: " + o.get("troubleTypeId")); 

				session.beginTransaction();

				update = session.update(tbSequencerQualityReport);
				invRepSeq = o.get("idInvRepSeq") != null ? o.get("idInvRepSeq").toString() : null;
				seqStatus = o.get("seqStatus") != null ? convert(o.get("seqStatus").toString()) : null;
				seqNumber = o.get("seqNumber") != null ? o.get("seqNumber").toString() : null;
				serial = (o.get("serial") != null && !StringUtils.isEmpty(o.get("serial").toString().trim()) )? o.get("serial").toString() : null;
				troubleType = o.get("troubleTypeId") != null ? convert(o.get("troubleTypeId").toString()) : null;
				troubleCause = o.get("causeId") != null ? convert(o.get("causeId").toString()) : null;

				update.addSet(tbSequencerQualityReport.invRepSeq, invRepSeq);
				update.addSet(tbSequencerQualityReport.seqStatus, seqStatus);
				update.addSet(tbSequencerQualityReport.seqNumber, seqNumber);
				update.addSet(tbSequencerQualityReport.serial, serial);
				update.addSet(tbSequencerQualityReport.troubleTypeId, troubleType);
				update.addSet(tbSequencerQualityReport.causeId, troubleCause);
				update.where(WhereConditions.and(WhereConditions.equal(tbSequencerQualityReport.seqNumber, seqNumber), WhereConditions.equal(
						tbSequencerQualityReport.qltRecRepId, beanRecQualityReport.getIdRecQltReport())));
				update.execute();
				session.commit();

			}

Só pra lembrar, se o save tiver mil linhas de registro, ele percorre este for mil vezes...

Obrigado...

3 Respostas

A

A única forma que vejo em otimizar isso é criar uma Stored Procedure no banco;

Outra coisa que gostaria de comentar, verifique realmente a necessidade de realizar um update nos objetos pois fazer um insert é bem mais rápido do que um update.

brizola727

Obrigado pela resposta…
Vou pesquisar sobre o tópico que você citou…

Obrigado

brizola727

Só pra esclarecer a solução encontrada foi criar um Index
no ponto onde estava sendo feito o where do update…
Pois ele nao estava sendo feito por pk e isso fazia com que o banco percorresse muitos
registros para salvar…

Enfim é isso!

Obrigado!

Criado 16 de julho de 2013
Ultima resposta 16 de jul. de 2013
Respostas 3
Participantes 2