MariaDB 11 : un nouveau modèle de coût d'optimisation

Par:
fredericmazue

mer, 01/03/2023 - 16:16

MariaDB 11 est disponible. Cette nouvelle version se fait principalement remarquer par son nouveau modèle de coût d'optimisation. Cette amélioration vient répondre à des problèmes de performances liés à de mauvais plans de requête qui avaient été signalés par la communauté.

Ce nouveau modèle, doté d'une granularité plus fine, est conçu prédire plus précisément le coût de chaque plan d'exécution de requête. Par exemple Le coût du tri (filesort) est désormais plus précis, ce qui permet à l'optimiseur de mieux choisir entre parcours d'index et tri de fichiers pour les requêtes ORDER BY/GROUP BY.

Cependant rien ne garantit qu'il sera idéal dans tous les scénarios. C'est pourquoi l'administrateur système garde la possibilité d'ajuster les paramètres. Ceux-ci peuvent être trouvées comme ceci :

select * from information_schema.optimizer_costs where engine="default"\G
*************************** 1. row ***************************
ENGINE: default
OPTIMIZER_DISK_READ_COST: 10.240000
OPTIMIZER_INDEX_BLOCK_COPY_COST: 0.03560
OPTIMIZER_KEY_COMPARE_COST: 0.011361
OPTIMIZER_KEY_COPY_COST: 0.015685
OPTIMIZER_KEY_LOOKUP_COST: 0.435777
OPTIMIZER_KEY_NEXT_FIND_COST: 0.082347
OPTIMIZER_DISK_READ_RATIO: 0.020000
OPTIMIZER_ROW_COPY_COST: 0.060866
OPTIMIZER_ROW_LOOKUP_COST: 0.130839
OPTIMIZER_ROW_NEXT_FIND_COST: 0.045916
OPTIMIZER_ROWID_COMPARE_COST: 0.002653
OPTIMIZER_ROWID_COPY_COST: 0.002653

Un paramètre peut être ajusté au démarrage de MariaDB :

mariadbd --optimizer-disk-read-cost=20

ou bien au moyen d'une requête SQL :

set global optimizer_disk_read_cost=20

Ce nouveau modèle, ainsi que la signification précise de chacun des paramètres, sont documentés ici.