2 hours ago, Prestafan33 said:Entiendo por tus explicaciones que cada 10 minutos se insertan UNA PARTE de los productos, y no el total de los disponibles. No sé si esto es intencionado, o es porque el servidor interrumpe el script PHP antes de que haya terminado. En cualquier caso, por lo que dices, parece que en la siguiente sincronización se vuelve a empezar por el principio y se insertan los mismos productos que ya estaban de la vez anterior, interrumpiendose entonces más o menos en el mismo sitio. Es lo que entiendo del comportamiento que describes.
Supongo que sabes que los scripts PHP tienen un tiempo de vida, superado el cual son interrumpidos por el servidor, para evitar consumo excesivo de recursos y bloqueos (precisamente lo que te está ocurriendo). Ese tiempo depende de como este establecido en la configuración del servidor PHP, pero lo habitual es que oscile entre 30 y 120 segundos. Lo normal es que insertar cada producto pueda consumir menos de un segundo, pero aun así dudo que en 120 segundos se puedan insertar todos los productos que tú quieres.
De todos modos, como dice juanrojas, yo tampoco entiendo la finalidad de insertar 13.000 productos cada 10 minutos. Lo normal sería insertarlos una sola vez y, si es necesario mantenerlos sincronizados, utilizar hooks o el equivalente que tenga el programa del cual utilizas la API, para sincronizar la información de aquellos que hayan sido modificados en el momento que cambien. Tal como lo tienes planteado me parece un consumo innecesario de recursos, que es lo que está provocando que tu web se bloquee y no funcione como debería. Si tienes al servidor ocupado creando productos es normal que no responda a otras tareas, aparte de que si borras los productos y los creas de nuevo es normal que dé errores si se intenta acceder a ellos durante ese proceso.
Hola @Prestafan33 lo que me pide el cliente es que cada 10 minutos se sincronice la tienda con la api, es decir se ejecute la tarea cron y si hay nuevos productos se inserten, el problema se ha presentado en la primera carga de productos donde pretendía vaciar los 12000 que tiene la api, ya luego que se ejecute la tarea no tendrá que vaciar 12000 productos nuevamente, solo actualizar el catalogo si hay un nuevo producto en la api. Cuando la tarea se interrumpe NO comienza desde el principio, sino desde el punto donde quedo, porque el script tiene una validación para evitar que se inserten productos cuyas referencias ya existan en la tienda y todas las referencias son distintas.
Efectivamente como tu bien dices el servidor esta interrumpiendo el script antes de que haya terminado arrojando los siguientes logs:
PDOException(code: HY000): SQLSTATE[HY000]: General error: 2013 Lost connection to MySQL server during query
already has more than 'max_user_connections' active connections at line 127 in file classes/db/DbPDO.php
He considerado colocar en cero los siguientes parametros de mysql max_user_connections y mysql.connect_timeout esto según lo que he leido en la documentación. No se que piensas al respecto?
Pero hay otro problema, una vez se cargaron los primeros 6000 productos a la tienda el frontend esta lento y arroja también error 503. Crees que sea correcto colocar estos valores como ilimitados aunque sea para la primera carga de productos? Esto podria estar causando las fallas en el frontend tambien?