|
Verrouillage, concurrentialité et performance de MySQL |
|
|
|
Programmation -
Base de données
|
|
Ecrit par Kamal AOUDA
|
|
12-04-2006 |
|
Verrouillage, concurrentialité et performance de MySQL
Les mécanismes de verrouillage de
MySQL différent selon
le type de table utilisé.
Dans les tables de type MyISAM et HEAP, seul le verrouillage de niveau table est
supporté. Cela pourrait être pénalisant pour les traitements parallèles et la
concurrentialité des applications qui font majoritairement appel à des
opérations d’écriture. Or cela n’est pas le cas de la plupart des applications
de commerce électronique qui comme nous l’avons vu dans la partie 3 font de
nombreuses sélections, peu d'effacements, des modifications et des insertions
basées sur des clés. Les tables MyISAM sont donc bien optimisées pour ce genre
d’application.
Les tables de type InnoDB supportent le verrouillage de niveau ligne. Elles
offrent un meilleur degré de concurrentialité mais elles consomment plus de
mémoire que les verrous de table. Notons par ailleurs que les verrous de niveau
ligne:
* Sont plus lents que les verrous de table surtout lorsqu’ils sont appliqués à
une grande portion de la table.
* Donnent de piètres résultats avec les requêtes Group By ou tout autre requête
qui scanne l’intégralité d’une table.
* Ont un coût d’administration qui est supérieur à celui des verrous de table.
Cela dit, les verrous de table sont plus performants que les verrous de ligne
dans les cas suivants :
* Les opérations de lecture.
* Les opérations de modification portant sur des clés précises (comme celles de
l’exemple ci-dessous).
UPDATE table_name SET column=value WHERE unique_key#
DELETE FROM table_name WHERE unique_key=#
* De nombreux scans / GROUP BY sur toute la table, sans aucune écriture .
Les autres niveaux de verrouillage possibles dans MySQL sont :
* Les verrous de niveau page : disponibles uniquement avec les tables de type
BDB leur performance est tributaire de la taille de la page (ensemble constitué
par deux ou plusieurs lignes). Avec ces verrous la concurentialité est d’autant
plus faible que la taille des pages est grande.
* Le versionage : un thread qui écrit et de nombreux autres qui lisent. Dans ce
cas Les verrous s’appliquent aux opérations d’écriture et non aux opérations de
lecture.
Le tableau 59 résume la relation entre la performance, les mécanismes de
verrouillage, les moteurs de stockage et la concurentialité.
|
Verrouillage |
Concurentialité |
Charge de travail |
Moteur de stockage |
| Table |
La plus faible |
Faible |
MyISAM, Heap, Merge |
| Ligne / page |
Moyenne |
Moyenne |
InnoDB /BDB |
| Versionage |
La plus élevée |
Elevée |
InnoDB |
|
|
Dernière mise à jour : ( 12-04-2006 )
|