web-dev-qa-db-fra.com

Pourquoi Innodb_Flush_Method = O_DSync offre-t-il un tel boost de performance avec le stockage soutenu?

J'ai vu certains personnes suggérer que O_DSYNC devrait être utilisé avec un SAN.

Les Documents MySQL ont - this à dire sur O_DSYNC en général:

Dans certaines versions de GNU/Linux et UNIX, des fichiers de rinçage sur disque avec l'appel UNIX FSYNC () (quels Innodb utilise par défaut) et d'autres méthodes similaires sont étonnamment lentes. Si vous n'êtes pas satisfait des performances de la base de données, vous pouvez essayer de définir le paramètre Innodb_Flush_Method sur O_DSYNC. La méthode de flush O_DSYNC semble fonctionner plus lentement sur la plupart des systèmes, mais le vôtre pourrait ne pas être l'un d'entre eux.

Et spécifiquement en ce qui concerne l'utilisation avec un SAN:

Sur certains systèmes où des fichiers de données et de journaux InnoDB sont situés sur un SAN, la valeur par défaut ou O_DSYNC peut être plus rapide pour une charge de travail en lecture-lourd avec principalement des instructions. Testez toujours ce paramètre avec le même type de matériel et de la charge de travail qui reflète votre environnement de production.

Bien qu'ils suggèrent que l'on dise que l'on puisse tester, le libellé est si désavoué de souhaits (c.-à-d. "Certains systèmes" pourrait être ") que l'on pouvait être pardonné s'ils ne se sont même pas dérangés testés et bloqués avec la valeur par défaut (fdataSync). Mais dans mon Tests (non scientifiques) J'ai trouvé O_DSync pour fournir une avantage de performance énorme - au moins avec certaines requêtes de sélection gênantes.

Je me demandais si quelqu'un pouvait expliquer plus en détail pourquoi cette option peut fournir un tel avantage lors de l'utilisation d'un SAN. Le bon livre Bien sûr discute de cette option mais pas dans le contexte d'un SAN.

J'utilise:

  • MySQL 5.1 avec le plugin InnoDB sur Rhel 6 (x86_64)
  • Environnement virtualisé (vSphere); SAN avec l'interconnexion FC est fourni par notre fournisseur IAAS
  • Système de fichier ext4 avec barrière = 0 Option de montage
  • Le planificateur d'E/S est la date limite
6
HTTP500
  • O_DSYNC est plus rapide que O_DIRECT Parce que cela effectue des écritures sans vérification.
  • O_DIRECT est paranoïaque mais plus de données cohérente

J'ai écrit à ce sujet avant: clarification sur MySQL Innodb_Flush_Method Variable

4
RolandoMySQLDBA

Ma compréhension est la suivante: Historiquement InnoDB n'a pas bien augmenté avec une grande piscine tampon. Donc, avec beaucoup ou RAM - Le cache de disque OS peut avoir une incidence sur les performances beaucoup -> C'est pourquoi O_Direct effectué de mauvais résultats pour ces environnements (car o_direct n'obtient aucune aide sur le cache de disque OS). MySQL 5.6 A ces problèmes abordés et dans des versions récentes, vous pouvez définir une piscine tampon aussi gros que ~ 75% de tout RAM. Lorsque la plupart de RAM est utilisé pour le pool tampon - aucune raison d'utiliser le cache de disque OS pour InnoDB, alors o_direct devrait fonctionner beaucoup mieux, par exemple innodb_flush_method = o_direct vs o_direct vs o_didect vs o_dsync impact sur l'ext3 avec la partition de disque LVM

TLDR: Si vous souhaitez les meilleures performances (avec ou sans SAN) - Obtenez beaucoup de RAM, mettez à niveau MySQL sur 5.6 ou 5.7, configurez Innodb_Buffer_pool aussi gros que possible possible, utilisez O_Direct

4
noonex