Mysql
 sql >> Base de données >  >> RDS >> Mysql

Les performances de MySQL Insert se dégradent sur une grande table

Vous n'avez pas précisé s'il s'agissait d'un système de test ou de production ; Je suppose que c'est de la production.

Il est probable que vous ayez la table à une taille telle que ses index (ou tout le lot) ne tiennent plus en mémoire.

Cela signifie qu'InnoDB doit lire les pages lors des insertions (en fonction de la distribution des valeurs d'index de vos nouvelles lignes). La lecture des pages (lectures aléatoires) est très lente et doit être évitée si possible.

Le partitionnement semble être la solution la plus évidente, mais le partitionnement de MySQL peut ne pas convenir à votre cas d'utilisation.

Vous devez certainement envisager toutes les options possibles :transférez la table sur un serveur de test de votre laboratoire pour voir comment elle se comporte.

Votre clé primaire m'apparaît comme si elle n'était peut-être pas nécessaire (vous avez un autre index unique), donc l'éliminer est une option.

Considérez également le plugin innodb et la compression, cela fera aller votre innodb_buffer_pool plus loin.

Vous devez vraiment analyser vos cas d'utilisation pour décider si vous devez réellement conserver toutes ces données et si le partitionnement est une solution judicieuse.

Toute modification apportée à cette application est susceptible d'introduire de nouveaux problèmes de performances pour vos utilisateurs, vous devez donc être très prudent ici. Si vous trouvez un moyen d'améliorer les performances d'insertion, il est possible que cela réduise les performances de recherche ou les performances d'autres opérations. Vous devrez effectuer un test de performances approfondi sur du matériel de production avant de publier une telle modification.