descripción de la aplicación:
Tengo una aplicación de Delphi que permite a un usuario definir una serie de consultas, y ejecutarlos simultáneamente a través de múltiples bases de datos MySQL. Existe un límite en el número de subprocesos que se pueden ejecutar a la vez (que el usuario puede establecer). El usuario selecciona las consultas que se ejecutarán y los sistemas en los que se ejecutarán las consultas. Cada subproceso ejecuta la consulta especificada en el sistema especificado utilizando un componente TADOQuery.aplicación de base de multiproceso Delphi no con grandes cantidades de datos
Descripción del problema:
Cuando las consultas recuperan un bajo número de registros, la aplicación funciona muy bien, incluso cuando se presentan gran cantidad de hilos (hasta aproximadamente 100). La aplicación también puede manejar un mayor número de registros (más de 150,000) siempre que solo se ejecuten unos pocos hilos (hasta aproximadamente 8) a la vez. Sin embargo, cuando el usuario ejecuta más de 10 consultas al mismo tiempo (es decir, más de 10 hilos) y cada hilo recupera más de 150,000 registros, comenzamos a recibir errores. Estos son los mensajes de error específicos que hemos encontrado hasta ahora:
a: Not enough storage is available to complete this operation
b: OLE error 80040E05
c: Unspecified error
d: Error de creación del hilo: Not enough storage is available to process this command
e: Object was open
f: ODBC Driver does not support the requested properties
Evidentemente, los errores se deben a una combinación de factores: número de subprocesos, cantidad de datos recuperados por subproceso y posiblemente la configuración del servidor MySQL.
La pregunta principal realmente es ¿por qué ocurren los errores? Aprecio que parece estar de alguna manera relacionado con los recursos, pero dados los diferentes errores que se están devolviendo, me gustaría saber exactamente por qué están apareciendo los errores. Se trata de recursos en la PC, o algo relacionado con la configuración del servidor, por ejemplo.
La siguiente pregunta es ¿qué podemos hacer para evitar problemas? Actualmente estamos reduciendo la aplicación al disminuir el número de subprocesos que se pueden ejecutar al mismo tiempo. No podemos obligar al usuario a recuperar menos registros ya que las consultas están totalmente definidas por el usuario y si quieren recuperar 200,000 registros, entonces eso depende de ellos, por lo que no hay mucho que podamos hacer sobre ese lado de las cosas. De manera realista, no queremos reducir la velocidad de la aplicación porque la mayoría de los usuarios recuperarán pequeñas cantidades de datos, y no queremos que la aplicación se ralentice para que ellos la usen, y aunque el número de subprocesos puede ser cambiado por el usuario, preferimos llegar a la raíz del problema y tratar de solucionarlo sin tener que depender de ajustar la configuración todo el tiempo.
Cualquier posibilidad de que pueda establecer 'TADOQuery.CursorType: = ctOpenForwardOnly'? Podría ayudar con la asignación de recursos. –
¿Puede mostrarnos el código utilizado para configurar los hilos, las conexiones y las consultas? –