Requêtes mises ou non en mémoire tampon
Les requêtes utilisent par défaut le mode Mémoire tampon. Cela signifie que le résultat des requêtes est immédiatement transféré du serveur MySQL à PHP et sont ensuite conservé dans la mémoire du processus PHP. Cela permet des opérations complémentaires comme compter le nombre de résultat, et déplacer le pointeur de résultat actuel. Il permet également d'exécuter des requêtes supplémentaires sur la même connexion tout en travaillant sur le jeu de résultats. L'inconvénient de la mise en mémoire tampon est que des jeux de résultats importants peuvent demander beaucoup plus de mémoire. La mémoire restera occupée jusqu'à ce que toutes les références sur les jeux de résultats soient désactivées ou que les jeux de résultats soient explicitement libérés, ce qui arrive de manière automatique à la fin du processus. La terminologie "store result" est également utilisée avec le mode mémoire tampon, vu que la totalité des résultats est stocké à la fois.
Note:
Lorsque vous utilisez libmysqlclient comme bibliothèque, la limite mémoire de PHP ne comptera pas la mémoire utilisée pour les jeux de résultats à moins que les données sont lues dans les variables PHP. Avec mysqlnd, la mémoire utilisée comprendra le jeu de résultats complet.
Les requêtes n'utilisant pas la mémoire tampon, les requêtes MySQL exécutent leur requête et retournent une ressource tandis que les données sont toujours en attente sur le serveur MySQL pour être récupérées. Cela utilise moins de mémoire côté PHP, mais peut augmenter la charge sur le serveur. À moins que le jeu de résultats complet ait été récupéré depuis le serveur, aucune autre requête peut être envoyée sur la même connexion. Les requêtes n'utilisant pas la mémoire tampon peuvent également faire référence à un "use result".
Suivant ces caractéristiques, les requêtes utilisant la mémoire tampon devraient être utilisées dans les cas où vous attendez seulement un jeu de résultats limité ou avez besoin de savoir la quantité de lignes retournées avant de lire toutes les lignes. Le mode sans mémoire tampon doit être utilisé lorsque vous attendez plus de résultats.
En raison du fait que les requêtes sont mises en mémoire tampon par défaut, les exemples ci-dessous vont vous montrer comment exécuter des requêtes, avec chaque API, sans mise en mémoire tampon.
Exemple #1 Exemple de requêtes n'utilisant pas la mémoire tampon : mysqli
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
$uresult = $mysqli->query("SELECT Name FROM City", MYSQLI_USE_RESULT);
if ($uresult) {
while ($row = $uresult->fetch_assoc()) {
echo $row['Name'] . PHP_EOL;
}
}
$uresult->close();
?>
Exemple #2 Exemple de requêtes n'utilisant pas la mémoire tampon : pdo_mysql
<?php
$pdo = new PDO("mysql:host=localhost;dbname=world", 'my_user', 'my_pass');
$pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);
$uresult = $pdo->query("SELECT Name FROM City");
if ($uresult) {
while ($row = $uresult->fetch(PDO::FETCH_ASSOC)) {
echo $row['Name'] . PHP_EOL;
}
}
?>
Exemple #3 Exemple de requêtes n'utilisant pas la mémoire tampon: mysql
<?php
$conn = mysql_connect("localhost", "my_user", "my_pass");
$db = mysql_select_db("world");
$uresult = mysql_unbuffered_query("SELECT Name FROM City");
if ($uresult) {
while ($row = mysql_fetch_assoc($uresult)) {
echo $row['Name'] . PHP_EOL;
}
}
?>
Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-mysqlinfo.concepts.buffering.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.
Références
Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.