Question

Nous exécutons une base de données de taille modérée (350 Go) avec des tables assez grandes (quelques centaines de millions de lignes, 50 Go) sur un serveur raisonnablement grand (2 x quadricœurs, 24 Go de RAM, 2,5 "10k disques en RAID10), et obtiennent des inserts assez lents (par exemple, un simple insert d'une seule ligne prenant 90 secondes!).

Notre innodb_buffer_pool_size est défini sur 400 Mo, ce qui serait normalement trop bas pour ce type de configuration. Cependant, notre fournisseur d'hébergement conseille que cela ne soit pas pertinent lors de l'exécution sur ZFS. A-t-il raison?

(Excuses pour le double post sur https://dba.stackexchange.com/questions/1975/is-tuning-the-innodb-buffer-pool-size-important-on-solaris-zfs, mais je ne suis pas sûr de la taille du public là-bas!)

Était-ce utile?

La solution

Je définirais toujours l'innodb_buffer_pool_size beaucoup plus haut que 400m. La raison? Le pool de tampons InnoDB mettra en cache les pages de données et d'indexation dont vous avez besoin pour les tables accessibles fréquemment.

Exécutez cette requête pour obtenir l'innodb_buffer_pool_pool recommandé dans MB:

Sélectionnez Concat (Round (KBS / Power (1024, if (pw <0,0, if (pw> 3,0, pw))) + 0.49999), substr ('kmg', if (pw <0,0, if (pw> 3,0, pw)) + 1,1)) recommandée_innodb_buffer_pool_size à partir de (sélectionnez sum (data_length + index_length) kbs from information_schema.tables où moteur = 'innodb') a, (sélectionnez 2 pw) b;

Utilisez simplement le résultat de cette requête ou 80% de la RAM installée (dans votre cas 19660m), la plus petite.

Je définirais également l'innodb_log_file_size sur 25% de la taille du pool de tampon InNODB. Malheureusement, la valeur maximale de l'innodb_log_file_size est de 2047m. (1m de moins que 2G) Ainsi, définissez InnoDB_LOG_FILE_SIZE à 2047m, car 25% d'innodb_buffer_pool_size de mon paramètre recommandé est de 4915m.

Une autre recommandation est de Désactiver la conformité aux acides. Utilisez 0 ou 2 pour innodb_flush_log_at_trx_commit (la valeur par défaut est 1 qui prend en charge la conformité acide) Cela produira des écritures innodb plus rapides À la risque de perdre jusqu'à 1 seconde de transactions en cas de crash.

Autres conseils

Peut-être la peine d'être lu inserts lents-mysql Si vous ne l'avez pas déjà fait. Aussi ce lien aux documents MySQL sur la question - en particulier en ce qui concerne la considération d'une transaction si vous effectuez plusieurs inserts à une grande table.

Le plus pertinent est Cet article MySQL sur les performances d'InNODB et ZFS qui considère spécifiquement la taille du pool de tampon.

La conclusion du titre est;

Avec INNODB, la courbe de performance ZFS suggère une nouvelle stratégie de «régler la taille du pool de tampon bas et permettre à ZFS de gérer la mise en mémoire tampon des données».

Vous souhaiterez peut-être ajouter plus de détails tels que le nombre / complexité des index sur la table - cela peut évidemment faire une grande différence.

Toutes mes excuses pour que ce soit des conseils plutôt génériques plutôt que par expérience personnelle, je n'ai pas exécuté ZFS en colère, mais j'espère que certains de ces liens pourraient être utiles.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top