Hola Rafael

 

Esta configuración reduce el trafico de lectura/escritura por la red (evitando 
generar los temporales en el disco del servidor), por ende tendrias mejor 
performance en el servidor para las actualizaciones de datos. (No es que evite 
la rotura de los indices, pero si disminuira las demoras en la red cuando 
guardes datos) .

 

Fijate en las propiedades del disco --> Hardware --> Propiedades --> Directivas 
--> Habilitar Cache de Escritura

 

Saludos

 

José Paez

 

 


 


Date: Thu, 22 Apr 2010 09:25:39 -0300
From: [email protected]
To: [email protected]
Subject: [GUFA] campos autoincrementales y tableupdate

Gracias José

Explicame un poco más. ¿qué tiene que ver eso de los tmpfiles con la corrupción 
del índice en el servidor?
¿Y cómo deshabilito el caché de escritura en los discos? ¿Vos te referís a cada 
una de las terminales o al servidor?

Rafael Copquin

El 21/04/2010 21:35, Jose Paez escribió: 


Hola Rafael
 
Algunas ideas:
 
- Deshabilita los cache de escritura de los discos
- Configura en el Panel de Control --> Opciones de Energia --> Siempre encendida
- En el config.fpw configura TMPFILES, PROGWORK a una carpeta que debe existir 
en todas las terminales ej: C:\Temp
 
Saludos
 
José Paez

 


Date: Wed, 21 Apr 2010 18:26:26 -0300
From: [email protected]
To: [email protected]
Subject: [GUFA] campos autoincrementales y tableupdate

Tengo una aplicación que maneja un laboratorio de cosmética.

Por requerimientos del ANMAT, es necesario que cada caja, frasco, etc. lleve 
una etiqueta con el número de lote y otros datos que permitan el rastreo de la 
fecha, hora, lote, orden de fabricación, etc.

Para eso, guardo todos los datos generados en una tabla, que tiene un campo 
autoincremental que es a la vez su clave primaria.

Los datos están en un Windows Server 2003 y las terminales son todas XP 
Profesional

En el load del formulario genero un cursor adapter vacio para la tabla 
mencionada, con el siguiente select:

select * from tabladelotes where 1=0

La manera de grabación, dentro de una transacción, es la siguiente:

for I = 1 to nNumeroDeCajas
    cNumeroDeLote = 'xxxxxx'+alltrim(str(I))  && no importa el verdadero código 
del lote, sino que es secuencial como se ve aqui
   insert into (cursoradapter) values( todos los campos + cNumeroDeLote)
endfor
tableupdate(.t.,.t.)   && hago el tableupdate al final del loop

Una alternativa sería

for I = 1 to nNumeroDeCajas
    cNumeroDeLote = 'xxxxxx'+alltrim(str(I))  
    insert into (cursoradapter) values( todos los campos + cNumeroDeLote)
    tableupdate(1,.t.) && un tableupdate por cada registro
endfor

Al final de la transaccion hago un flush para vaciar los buffers a disco

Uso la primera opción.

Mi problema es que casi todos los días se corrompe el índice de esta tabla. 
Revisé las conexiones, las tarjetas de red, excluí el directorio completo de 
las tablas, con sus índices, en el antivirus del server, en fin, todo lo que se 
me ocurrió.

Esta rutina es de grandes volúmenes, porque en una orden de fabricación se 
pueden generar por ejemplo 1000 frascos de esmalte de uñas y se hacen muchas 
órdenes por día.

Entonces, la duda que tengo es si, al mandar el tableupdate al final del loop, 
haciendo que se graben de un saque todos los registros, dado el gran número de 
ellos y a la vez el hecho de que se genera la clave autoincremental, eso no 
estará haciendo que se corrompa el índice?

¿alguien tiene alguna idea?

Gracias anticipadas

Rafael Copquin






                                          
_________________________________________________________________

Responder a