creo que si no cambiaste nada como triggers e indices deberias pensar en que cambio algun plan de ejecucion de la consulta. De ser asi tendrias que hacer un explain plan y verificar si podes agregar algun indice o cambiar algo en la consulta que mejore su performance. saludos.
El mar, 12-06-2012 a las 14:42 -0500, [email protected] escribió: > Estimada Lista, > > Tengo un problema con PostgreSQL, desde el día de ayer. Tengo 4 bases > de datos que en principio estuvieron corriendo sobre la versión 8.3 en > windows 2003 server, sin problemas desde hace poco mas de 3 años. > > Sin embargo, luego de agregar una nueva base de datos, se presentaron > problemas al momento de actualizar saldos y grabar movimientos en 3 > tablas. > > Tengo una función que realiza esta tarea (actualzar saldos x articulo, > grabar movimientos y actualizar lotes disponibles x articulo). > > Por cada pedido realizado, llamo a esta función para que actualice3 > tablas. Antes de ayer, este proceso no demoraba ni dos segundos en > procesar. Ahora demora demasiado (6'500,000ms) y aun no termina de > procesar 2305 registros. > > He instalado la ultima versión de PostgreSQL y he levantado las BDs > sin problema, puedo consultar cualquier tabla de forma normal, pero no > puedo procesar ninguna actualización sobre éstas. > > Tengo un servidor HP ML150 con disco sata de 500GB memoria de 4GB y > porcesador Xeon de 4 nucleos. Todo corriendo sobre Windows 2003 server. > > El código que ejecuto es: > ------------------------- > FOR reg_pedidos IN SELECT > a.cod_producto > , a.cantidad > , b.fecha_emision > FROM > detalle_pedidos a > , pedidos b > WHERE a.empresa = v_empresa > AND a.sucursal = v_sucursal > AND a.pedido = v_interno > AND a.procesado > AND NOT a.anulado > AND b.empresa = a.empresa > AND b.sucursal = a.sucursal > AND b.pedido = a.pedido > LOOP > RAISE NOTICE 'Producto > %',reg_pedidos.cod_producto; > RAISE NOTICE 'Actualizando saldos_online'; > UPDATE saldos_online > SET saldo_apto = saldo_apto - reg_pedidos.cantidad, > ultima_salida = reg_pedidos.cantidad > WHERE empresa = v_empresa > AND sucursal = v_sucursal > AND cod_producto = reg_pedidos.cod_producto; > RAISE NOTICE 'Actualizando detalle_pedidos'; > UPDATE detalle_pedidos > SET procesado = false > WHERE empresa = v_empresa > AND sucursal = v_sucursal > AND pedido = v_interno > AND cod_producto = reg_pedidos.cod_producto; > RAISE NOTICE 'Actualizando pedidos'; > UPDATE pedidos > SET procesado = false > WHERE empresa = v_empresa > AND sucursal = v_sucursal > AND pedido = v_interno; > RAISE NOTICE 'Anulando movi_prod'; > UPDATE movi_prod > SET anulado = true > WHERE empresa = v_empresa > AND sucursal = v_sucursal > AND tipo_doc = 90 > AND serie_doc = 1 > AND numero_doc = v_interno; > RAISE NOTICE 'Actualizar vencimientos'; > FOR reg_lotes IN SELECT > a.lote > , a.vencimiento > , a.cantidad > FROM > mov_vencimientos a > WHERE a.empresa = v_empresa > AND a.sucursal = v_sucursal > AND a.cod_movimiento = v_movimiento > AND a.pedido = v_interno > AND a.cod_producto = reg_pedidos.cod_producto > LOOP > UPDATE vencimientos > SET saldo_final_apto = saldo_final_apto - reg_lotes.cantidad > WHERE empresa = v_empresa > AND sucursal = v_sucursal > AND cod_producto = reg_pedidos.cod_producto > AND vencimiento = reg_lotes.vencimiento > AND lote = reg_lotes.lote; > END LOOP; > DELETE FROM mov_vencimientos > WHERE empresa = v_empresa > AND sucursal = v_sucursal > AND cod_movimiento = v_movimiento > AND pedido = v_interno; > END LOOP; > ----------------------- > > Por favor, que información debo proporcionarles para que me puedan > orientar y corregir este problema. > > Desde ya les agradezco por su atención a la presente. > > Saludos, > > Marcos Ríos Rodríguez > Arequipa-Perú. > > - > Enviado a la lista de correo pgsql-es-ayuda ([email protected]) > Para cambiar tu suscripción: > http://www.postgresql.org/mailpref/pgsql-es-ayuda
