1 000 FAQ, 500 tutoriels et vidéos explicatives. Ici, il n'y a que des solutions !
Comprendre les durées de connexions à MySQL / MariaDB
Ce guide technique détaille les limites de ressources sur les hébergements Web Infomaniak ; il est essentiel de distinguer le temps réel (horloge) du temps de calcul (processeur) pour comprendre l'origine des interruptions de scripts.
1. Temps de connexion MySQL (I/O)
Limite : 30 secondes réelles
Cette limite correspond au temps absolu écoulé "montre en main". Elle concerne la communication entre PHP et le serveur de base de données (MySQL/MariaDB).
Dès qu'une connexion est ouverte, le serveur de base de données alloue 30 secondes maximum pour recevoir la requête, l'exécuter et renvoyer les résultats. Si ce délai est dépassé (souvent à cause d'une requête SQL mal optimisée), le serveur MySQL coupe brutalement la connexion. Cela génère généralement l'erreur MySQL server has gone away.
2. Temps de traitement PHP (CPU)
Limite : 10 secondes CPU
Cette limite concerne exclusivement la puissance de calcul consommée par le serveur Web pour exécuter le code PHP.
Il est crucial de noter que le temps d'attente ne compte pas. Lorsque PHP attend une réponse de la base de données, il est en pause et ne consomme quasiment pas de temps CPU. Par conséquent, un script sera interrompu par le serveur Web uniquement s'il effectue des calculs intensifs (boucles complexes, cryptographie, traitement de fichiers) pendant plus de 10 secondes cumulées.
Interaction des deux limites
Pour garantir la stabilité de l'application, chaque opération doit respecter simultanément ces deux contraintes distinctes :
- L'application dispose de 30 secondes de temps total pour interagir avec la base de données (latence réseau + exécution SQL).
- L'application dispose de 10 secondes de temps de calcul pur pour traiter les données reçues.
Exemple de fonctionnement valide : Un script qui attend 25 secondes une réponse complexe de MySQL (I/O) puis traite le résultat pendant 2 secondes (CPU) fonctionnera parfaitement, car il n'a dépassé aucun des deux quotas individuels, même si le temps total est de 27 secondes.