Question

Dans Firebird 2.0, l’utilisation d’une transaction explicite sur une commande SELECT est-elle plus rapide que l’exécution de la commande avec une transaction implicite?

Était-ce utile?

La solution

Toutes les commandes SQL (SELECT, INSERT, UPDATE, etc.) peuvent être exécutées UNIQUEMENT dans certaines transactions. Vous ne pouvez pas exécuter de commande sans que la transaction out ait été démarrée avant.

Autres conseils

Les transactions explicites et implicites sont une fonctionnalité du jeu de composants que vous utilisez pour accéder à la base de données, pas une fonctionnalité de Firebird elle-même. Comme indiqué précédemment, Firebird always exécute toutes les opérations dans une transaction. Cela a quelques conséquences pour vous:

  • Utilisation d'un " Implicite " la transaction ne peut pas être plus rapide que l’utilisation d’un " Explicit " Du point de vue de Firebird, une transaction est une transaction, peu importe qui l'a démarrée.
  • Obtenir les meilleures performances nécessite parfois un contrôle précis de "Commits". Bien que le " Implicite " la transaction ne peut pas être plus rapide que le message "Explicit". Explicit peut être plus rapide car vous pouvez contrôler vos StartTransactions et Commits. Bien que vous souhaitiez généralement effectuer toutes les mises à jour d'une base de données au sein d'une transaction (afin qu'elles réussissent ou échouent comme un ensemble), vous souhaitez parfois scinder les opérations en plusieurs groupes: Si vous devez insérer en bloc plusieurs enregistrements, vous souhaiterez probablement en commettre un tous les 1 000 enregistrements environ.

Firebird ne peut pas exécuter de commande SQL sans transaction.

PS: Vous obtenez les meilleurs résultats en termes de performances si vous validez des transactions plutôt que de les restaurer. Même si vous n’avez appelé que SELECT sans rien changer.

Outre ce qui a déjà été dit, tenez compte du fait que la transaction peut être:

  • Lecture-écriture
  • Lecture seule

Pour un SELECT, il serait préférable d'utiliser une transaction en lecture seule

PS: Il existe d'autres types de transactions, mais il s'agit des deux plus importantes pour ce sujet.

Habituellement, la transaction ajoute des frais généraux. Cependant, soyez prudent si aucune transaction par défaut n'a été démarrée lorsque vous vous connectez à Firebird.

D'après mon expérience, les transactions implicites ont tendance à passer par défaut à la validation automatique, ce qui les ralentit. Vous pouvez toujours changer le comportement par défaut.

Mais je vous recommanderais d’utiliser des transactions explicites, car le maintien de l’engagement peut vous causer plus de problèmes plus tard s’il bloque trop de transactions. Si tel est le cas, l'accès à Firebird peut être considérablement ralenti car il parcourt toutes les transactions bloquées / bloquées pour déterminer la valeur correcte des données.

Voici quelques discussions à ce sujet

http: //forums.devshed. com / firebird-sql-development-61 / difference-active-transaction-863103.html

http://www.slideshare.net/ibsurgeon/3-how-transactionsworkwork

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top