MySQL : Meilleure facon de copier

10 réponses
AuteurMessage

Rano |
Modérateur

Photo de Rano

Inscrit le : 13/04/2005

# Le 05/05/2007 à 21:47

Bonsoir,

Voilà mon cas. J'ai plusieurs serveurs SQL, dont un principal. Ils ont tous les deux une table identique. Le but est de répliquer cette table du serveur P (principal) au serveur S (secondaire).

Sauf que le serveur S recoit plus de 1000 connexions par seconde utilisant cette table. Donc actuellement je fais ca :

- dump de la table depuis le serveur P
- insertion des données dans une table temporaire sur le serveur S. Comme il y a beaucoup de données, ca évite de pénaliser les requetes de lecture pendant que les données s'insèrent.
- un drop de l'ancienne table sur S et un rename de la table temporaire avec le nom souhaité.

Et le problème, c'est que tout de suite après le rename, la première requete effectuée sur cette table prend "bcp" de temps. (Quelques centièmes de seconde, mais vu l'utilisation c'est problématique). Ca lui prend du temps de construire les index et du coup, ca bloque les autres requetes, etc... etc...

J'ai essayé de faire un OPTIMIZE, CHECK ou encore ANALYZE de la table temporaire juste avant le RENAME, mais ca ne change rien, la première requete après le rename est toujours aussi longue. Meme si je fais un SELECT sur la table temporaire avant de la renommer, ca ne change rien, il reconstruit quand meme les index lors de la première requete après le RENAME...


Vous auriez une idée de méthode ?

Chambres d'hote tavelOuvrir dans une nouvelle fenetre
Séjours en provenceOuvrir dans une nouvelle fenetre
Forum mariageOuvrir dans une nouvelle fenetre

bhamp0 | Benjamin
Membre

Photo de bhamp0

Inscrit le : 09/05/2005

# Le 05/05/2007 à 21:54

Hum ... appeler Bool ? Non, désolé, j'peux pas aider là.

Quand on voit c'qu'on voit, et qu'on entend c'qu'on entend, on a raison d'penser c'qu'on pense !

krucial | Jean Christophe
Administrateur

Photo de krucial

Inscrit le : 09/03/2005

# Le 05/05/2007 à 22:34

Pourquoi tu mets pas en place une replication ? Ca ne pourrait pas te convenir dans ton cas ? Ca marche super bien en tout cas.

JC - Mes sitesOuvrir dans une nouvelle fenetre | Affiliation devis travauxOuvrir dans une nouvelle fenetre | Cotes voitures anciennesOuvrir dans une nouvelle fenetre

Rano | Jean
Modérateur

Photo de Rano

Inscrit le : 13/04/2005

# Le 05/05/2007 à 22:40

Il faut activer les log (binaires) pour ca non ? On peut les activer juste pour une table ou quelques unes ?

Chambres d'hote tavelOuvrir dans une nouvelle fenetre
Séjours en provenceOuvrir dans une nouvelle fenetre
Forum mariageOuvrir dans une nouvelle fenetre

Rano | Jean
Modérateur

Photo de Rano

Inscrit le : 13/04/2005

# Le 05/05/2007 à 22:43

Apparemment on peut pour une base seulement en tout cas :
"Tell the server to restrict binary logging to updates for which the default database is db_name "

Je vais regarder ca en détail, ca me paraissait compliqué la première fois que j'ai regardé, mais ca doit pas etre très sorcier en fait. Merci

Chambres d'hote tavelOuvrir dans une nouvelle fenetre
Séjours en provenceOuvrir dans une nouvelle fenetre
Forum mariageOuvrir dans une nouvelle fenetre

krucial | Jean Christophe
Administrateur

Photo de krucial

Inscrit le : 09/03/2005

# Le 05/05/2007 à 23:09

Non non, tu peux aussi sur une table seulement. C'est pas compliqué : j'y arrive. Le seul truc, c'est de surveiller les logs binaires et de mettre en place un script qui les efface. Il y a une commande SQL pour ca. Sinon, tu finis vite en full disk

JC - Mes sitesOuvrir dans une nouvelle fenetre | Affiliation devis travauxOuvrir dans une nouvelle fenetre | Cotes voitures anciennesOuvrir dans une nouvelle fenetre

MathieuC | Mathieu
Modérateur

Photo de MathieuC

Inscrit le : 15/07/2005

# Le 05/05/2007 à 23:29

Sur S, tu as ta table principale qui est utilise en production, et ta prochaine table qui est en table temporaire.

Plutot que de switcher ta table temporaire en table principale, fais en sorte que ton script de production utilise la table temporaire (qui devient donc la table principale), ton ancienne table principale pouvant ainsi etre supprimee.

Comme ca, ca te permet de preparer ta prochaine table principale avant que ton script switch, et la 1ere requete ne devrait pas prendre de temps, vu qu'il n'y a aucun delai de changement de table, c'est ton script qui fait un select different

Tu peux meme pousser le vice en faisant quelques requetes bien choisies sur ta prochaine table principale pour que MySQL remplisse ses caches et ainsi que ta premiere requete sur la nouvelle table soit deja en cache

Rano | Jean
Modérateur

Photo de Rano

Inscrit le : 13/04/2005

# Le 05/05/2007 à 23:48

Oui, c'est une méthode que j'utilise pour certains trucs. Je l'utilise en fait pour enregistrer les affichages.
Genre print1 et print2 avec en alternance des insert dans l'un ou l'autre et pendant ce temps le script qui analyse les stats lit l'autre. Pour mon problème, c'est ce que j'avais commencé à faire, mais je voulais voir si y avait pas plus propre

(Message édité le 05-05-2007 à 23h53 par Rano)

Chambres d'hote tavelOuvrir dans une nouvelle fenetre
Séjours en provenceOuvrir dans une nouvelle fenetre
Forum mariageOuvrir dans une nouvelle fenetre

MathieuC | Mathieu
Modérateur

Photo de MathieuC

Inscrit le : 15/07/2005

# Le 05/05/2007 à 23:53

Je pense que ton temps tres long (tout reste relatif) de la 1ere requete sur ta nouvelle table est en grande partie du au fait que les caches mysql sont vides. En pre-remplissant les caches avec quelques requetes types, ca devrait t'eviter ca.

Apres, il existe surement d'autres solutions, mais renommer la table en speed entre 2 select (sachant que tu en fais 1000 par secondes), ca va forcement te creer un temps de flottement, et vu la frequence de tes requetes, c'est normal que ca te pose un probleme

Rano | Jean
Modérateur

Photo de Rano

Inscrit le : 13/04/2005

# Le 07/05/2007 à 09:48

ouais, mais en fait la réplication c'est nikel et simple à installer en fait, merci jc

Chambres d'hote tavelOuvrir dans une nouvelle fenetre
Séjours en provenceOuvrir dans une nouvelle fenetre
Forum mariageOuvrir dans une nouvelle fenetre

krucial | Jean Christophe
Administrateur

Photo de krucial

Inscrit le : 09/03/2005

# Le 07/05/2007 à 11:32

Je remonte a 3 aides contre 300. Un jour on sera quitte

JC - Mes sitesOuvrir dans une nouvelle fenetre | Affiliation devis travauxOuvrir dans une nouvelle fenetre | Cotes voitures anciennesOuvrir dans une nouvelle fenetre

Répondre

Vous ne pouvez pas participer au forum, car votre inscription n'a pas été validée. Pour vous faire valider en tant que Membre, cliquez ici.

© MHN - Tous droits réservés | CNIL N°844440 | 24/11/2024 16:36:29 | Généré en 4.99ms | Contacts | Mentions légales |