aslain.dev
0%
← Tüm makaleler

Optimisation MySQL pour un serveur de jeu à fort trafic

Sur un serveur de jeu, le problème de performance le plus sournois vient souvent non pas du code mais de la base de données. Quand des milliers de joueurs se connectent en même temps, une seule requête non indexée peut bloquer tout le serveur. L'optimisation MySQL est l'un des éléments les plus critiques pour maintenir un serveur Metin2 chargé comme Runa2. Voici les principes de base.

Mesurer d'abord : EXPLAIN et le slow query log

N'optimisez pas au hasard — mesurez. Activez le slow query log de MySQL pour repérer les requêtes lentes, puis inspectez chacune avec EXPLAIN. EXPLAIN montre comment MySQL exécute la requête et s'il utilise un index.

Les index : le plus grand gain

Un index, c'est comme l'index d'un livre : il permet à MySQL d'aller droit à la ligne au lieu de parcourir toute la table. Indexez les colonnes utilisées dans WHERE, JOIN et ORDER BY :

-- Yavas sorguyu incele
EXPLAIN SELECT * FROM player WHERE name = 'Aslain';

-- "name" sutununa index ekle
CREATE INDEX idx_player_name ON player (name);

Une requête affichant « ALL » (scan complet) dans EXPLAIN avant un index tourne bien plus vite ensuite en « ref » ou « range ».

Évitez SELECT * + utilisez des index composites

Récupérer des colonnes inutiles gaspille mémoire et réseau. Ne sélectionnez que les colonnes nécessaires et utilisez un index composite pour plusieurs conditions :

-- Sadece gerekli sutunlar + bilesik (composite) index
SELECT id, level FROM player
WHERE empire = 1 AND level >= 90
ORDER BY level DESC;

CREATE INDEX idx_empire_level ON player (empire, level);

Dans un index composite, l'ordre des colonnes compte : placez en premier la condition la plus sélective.

Schéma et types de données

  • Choisissez le bon type — des types inutilement grands (comme BIGINT partout) coûtent espace et vitesse.
  • Normalisez les tables souvent interrogées, sans excès ; parfois une petite répétition (dénormalisation) est plus rapide que des JOIN.
  • Archivez ou partitionnez périodiquement les tables de logs qui grossissent.

Maintenance et résilience

  • Faites des sauvegardes régulières (cron + mysqldump) ; sur un serveur de jeu, la perte de données est irréversible.
  • À mesure que les tables grossissent, tenez les statistiques à jour avec ANALYZE TABLE.
  • Gérez les pics avec un pool de connexions et un max_connections raisonnable.

Questions fréquentes

Ne puis-je pas indexer toutes les colonnes ?

Non. Chaque index ralentit les écritures (INSERT/UPDATE) et prend de la place. N'indexez que les colonnes réellement utilisées par les requêtes.

MyISAM ou InnoDB ?

Sur les serveurs modernes, InnoDB est recommandé : avec le verrouillage par ligne et le support des transactions, il est plus sûr en écriture intensive.

Comment savoir si la lenteur vient du code ou de la base ?

Commencez par le slow query log et les métriques serveur (CPU, I/O) ; le plus souvent, quelques requêtes non indexées sont coupables.

Votre serveur ralentit sous charge ? Je peux aider à l'optimisation de base de données et au réglage des requêtes — contactez-moi.

Devamı için