Accéder au contenu principal

Articles

Affichage des articles du 2023

Requêtes UPDATE trop lentes- comment optimiser MySQL

Sur un de mes projets utilisant une base de données MySQL avec plusieurs millions d'enregistrements, j'ai constaté avec stupeur d'énormes lenteurs sur mes requêtes UPDATE. En effet, mes requêtes s'effectuaient en boucle et le serveur MySQL explosait en consommation CPU. Ma requête était aussi simple comme ci-dessous : UPDATE  matable set cible='nouvelle_valeur'; Mais l'exécution de cette requête pouvait dépasser les 60 secondes sur ma table de plusieurs millions de lignes. J'avais un serveur suffisamment dimensionné pour le projet avec 16Go de RAM sur un VPS.  Après quelques analyses, il s'est avéré que le problème provenait de l'absence d'indexation du champs cible . Phase 1 : diagnostique Il est important de comprendre ce qui tourne ou qui consomment de la ressource pour comprendre pourquoi votre base de données devient lente. Pour cela utiliser au passage une simple commande top , si vous êtes sur Debian, permettra de comprendre qui vous c...

Erreur Mysql avec PDO : SQLSTATE[08004] [1040] Too many connections

  J'ai eu ce problème récemment sur un module de traitement automatique qui effectuaient des centaines d'opérations à la minute sur la base de données mysql. Cette erreur signifie, comme son libellé l'indique, que votre base de données Mysql reçois une trop connections en simultannés.  Et recevoir trop de connexion signifie justement que vous avez atteint une limite configurée sur votre serveur. La variable qui stock cette limite est max_connections . Pour le verifier sur votre base données, ouvrez l'editeur SQL de votre Bases de données et executez la requetes suivante : SHOW VARIABLES like 'max_connections' Une fois executée, cette requête va vous retourner le nombre maximum de connexion actuelement confuré pour votre base de donnée. Plusieurs solutions se présentent à vous pour resoudre ce probleme.   Augmenter en live la valeur de max_connections  Pour cela, il suffit d'executer la requete suivantes sur votre base de données : SET GLOBAL max_connections ...