|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre régulier
![]() Inscription : mars 2006 Messages : 72 ![]() |
Je viens d'installer une BD Mysql 5 en moteur innodb
après avoir lu différentes documentations en ligne, je ne suis pas sûr d'avoir tout compris sur le systéme de transactions : d'après ce que j'ai compris une transaction qui commence par un begin et se termine soit par un commit soit par un rollback je sais que le moteur utilise des fichiers de log ib_logfile Question : pendant le déroulement de la transaction, ou quand et comment les informations passent-elles par le cache, les fichiers de log et quand sont elles vraiment écrites sur le disque.....? Merci par avance........ [Titre édité par Maximilian] |
|
|
00
|
|
|
#2 |
|
Membre expérimenté
![]() ![]() Inscription : mai 2005 Messages : 414 ![]() |
je connais pas bien Mysql mais je connais bien DB2 et Oracle, je vais donc répondre avec mes connaissaces.
Lors de la transaction, les données sont ramenées dans le cache, les informations dans les logs sont écrites de manière synchrone. Les données sont écrites sur disque de manière asynchrone après le commit. |
|
|
00
|
|
|
#3 |
|
Provisoirement toléré
Inscription : juin 2003 Messages : 2 622 ![]() |
Pour être plus précis, il faut qu'en cas de panne on puisse tout retrouver sur le disque. Donc :
- Les journaux de transactions sont flushés sur le disque à chaque COMMIT (comportement modifiable avec la variable innodb_flush_log_at_trx_commit mais au risque de perdre des données en cas de crash). - Le buffer principal InnoDB est quant à lui partiellement flushé vers les fichiers de données sur le disque lorsqu'il devient plein. Rassemblés, ces deux éléments forment l'état de la base à un instant T et permettent une reprise sur panne.
__________________
Pensez au bouton
|
|
|
00
|
|
|
#4 |
|
Membre régulier
![]() Inscription : mars 2006 Messages : 72 ![]() |
Merci beaucoup pour les réponses : cela m'aide à mieux optimiser le back office que je suis entrain d'installer.
Si j'ai bien compris et en reformulant : A chaque transaction, les données sont remontées du disque dans le cache innodb(( celui dont on peut modifier la valeur avec innodb_buffer_pool_size) puis les données sont modifiées en cache pendant le déroulement de la transaction). En parallèle, à chaque instruction, le cache du journal innodb est également rempli. Quand le commit est fait, le cache du journal innodb est écrit sur disque (dans les fichier ib_logfile0 et 1) sauf si on a modifié la valeur par défaut de innodb_flush_log_at_trx. Enfin quand le cache principal innodb est plein, il est écrit sur disque. Question 1 : ce cache du journal innodb est-il paramètrable ? Question 2 : En cas de crah du serveur, à la relance de celui-ci il va automatiquement lire les fichiers journaux et mettre à jour la base ? Question 3 : En cas de rollback de la part de l'utilisateur, les données sont-elles simplement effacées du cache du journal innodb ? Question 4 : il y a t'il quelque part, une doc précise expliquant les résultats de la commande show engine innodb (j'ai déjà lu celle proposée par le site officel de mysql) ? par exemple en savoir plus sur les deadlocks les sémaphores..... |
|
|
00
|
|
|
#5 | |||||
|
Provisoirement toléré
Inscription : juin 2003 Messages : 2 622 ![]() |
Citation:
Citation:
Citation:
Citation:
Citation:
Sinon pour les sémaphores, deadlocks, etc. tu dois pouvoir trouver des cours de programmation système sur le net...
__________________
Pensez au bouton
|
|||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com