2010-05-04 5 views
6

dans le lien suivantMySQL InnoDB: innodb_flush_method

http://dev.mysql.com/doc/refman/5.1/en/innodb-parameters.html#sysvar_innodb_flush_method

il dit: Différentes valeurs de cette variable peuvent avoir un effet marqué sur les performances InnoDB. Par exemple, sur certains systèmes où les fichiers de données et de journaux InnoDB sont situés sur un SAN, il a été constaté que la définition de innodb_flush_method à O_DIRECT peut dégrader les performances des instructions SELECT simples par un facteur de trois (). Pourquoi O_DIRECT pourrait-il ralentir l'instruction select?

+0

La page de manuel a été mise à jour récemment. C'est un peu plus clair maintenant. –

Répondre

6

O_DIRECT contourne les systèmes de cache du système d'exploitation. Un SAN peut être un système de stockage très rapide, mais généralement il va se trouver ailleurs sur un lien réseau et être placé par proxy/caché derrière d'autres couches. En utilisant O_DIRECT, qui élimine le cache local, vous forcez InnoDB à frapper directement le système de stockage à chaque fois.

+2

Lorsque nous utilisons o_direct, nous allons utiliser presque toute la mémoire physique pour mysql pour mettre en cache les données. Donc, il semble que le document mysql suppose que nous gaspillons de la mémoire libre sans les allouer à mysql. Si nous ne réservons pas de mémoire physique libre, alors je pensais que o_direct ne serait pas plus lent pour select. Comme si le bloc pouvait être mis en cache dans le système de fichiers, il est très probable qu'il puisse également être mis en cache dans le tampon mysql si nous laissons mysql utiliser tout le mémoire libre. – Daniel

+1

MySQL peut mettre en cache les résultats de la requête, mais si l'une des requêtes nécessite un scan de table de toute façon, vous êtes sur le disque. Avec O_DIRECT, il n'y a pas de cache disque en mémoire à utiliser, vous êtes donc directement sur le support de stockage. –

+0

worthvote: Dans les versions récentes d'InnoDB, vous voudriez laisser autant de RAM que possible pour buffer_pool, ce qui ne laisse évidemment aucune chance au cache du système d'exploitation de servir à InnoDB. – noonex

2

Vous avez vraiment besoin d'expérimenter avec la méthode de vidage sur votre matériel pour voir ce qui fonctionne le mieux pour vous. Cadre:

innodb_flush_method = O_DIRECT

amélioré notre performance de 15% sur un serveur Dell 2950 avec 15K RPM disques SAS configurés dans une configuration RAID 1 avec PERC contrôleur de mise en cache de Dell. Nous exécutons le noyau d'Ubuntu 9.04 et la plupart du travail est mysql utilisant innodb. Votre kilométrage peut varier.