Oh mon Dieu, je pense que je les ai tous vus. Le plus souvent, il s'agit d'un effort pour résoudre les problèmes de performances par quelqu'un qui est trop paresseux pour dépanner leur chemin jusqu'à la CAUSE de ces problèmes de performances ou même rechercher s'il existe réellement un problème de performances. Dans beaucoup de ces cas, je me demande si ce n'est pas seulement le cas de cette personne qui veut essayer une technologie particulière et cherche désespérément un clou qui correspond à son nouveau marteau brillant.
Voici un exemple récent:
L'architecte de données me propose une proposition élaborée de partitionner verticalement une table de clés dans une application assez grande et complexe. Il veut savoir quel type d'effort de développement serait nécessaire pour s'adapter au changement. La conversation s'est déroulée comme suit:
Moi: Pourquoi envisagez-vous cela? Quel est le problème que vous essayez de résoudre?
Lui: table X est trop large, nous la partitionnons pour des raisons de performances.
Moi: Qu'est - ce qui vous fait penser que c'est trop large?
Lui: Le consultant a dit que c'était beaucoup trop de colonnes pour avoir dans une table.
Moi: Et cela affecte les performances?
Lui: Oui, les utilisateurs ont signalé des ralentissements intermittents dans le module XYZ de l'application.
Moi: Comment savez-vous que la largeur du tableau est la source du problème?
Lui: C'est la table clé utilisée par le module XYZ, et c'est comme 200 colonnes. Ça doit être le problème.
Moi (expliquant): Mais le module XYZ en particulier utilise la plupart des colonnes de cette table, et les colonnes qu'il utilise sont imprévisibles car l'utilisateur configure l'application pour afficher les données qu'il souhaite afficher à partir de cette table. Il est probable que 95% du temps nous finirions par rejoindre toutes les tables de toute façon, ce qui nuirait à la performance.
Lui: Le consultant a dit que c'était trop large et que nous devions le changer.
Moi: Qui est ce consultant? Je ne savais pas que nous avions embauché un consultant, et ils n'avaient pas du tout parlé à l'équipe de développement.
Lui: Eh bien, nous ne les avons pas encore embauchés. Cela fait partie d'une proposition qu'ils ont proposée, mais ils ont insisté sur le fait que nous devions restructurer cette base de données.
Moi: Euh hein. Ainsi, le consultant qui vend des services de refonte de base de données pense que nous avons besoin d'une refonte de base de données ...
La conversation a continué comme ça. Ensuite, j'ai jeté un autre regard sur le tableau en question et j'ai déterminé qu'il pourrait probablement être réduit avec une simple normalisation sans avoir besoin de stratégies de partitionnement exotiques. Ceci, bien sûr, s'est avéré être un point discutable une fois que j'ai enquêté sur les problèmes de performance (auparavant non signalés) et les ai traqués jusqu'à deux facteurs:
- Index manquants sur quelques colonnes clés.
- Quelques analystes de données malhonnêtes qui verrouillaient périodiquement des tables clés (y compris celle «trop large») en interrogeant la base de données de production directement avec MSAccess.
Bien sûr, l'architecte pousse toujours pour un cloisonnement vertical de la table accroché au méta-problème «trop large». Il a même renforcé sa thèse en obtenant une proposition d'un autre consultant en base de données qui a pu déterminer que nous devions apporter des modifications de conception majeures à la base de données sans regarder l'application ni exécuter d'analyse de performances.