Le comportement de ces fonctions est affecté par la configuration dans le fichier php.ini.
Nom | Défaut | Changeable | Changelog |
---|---|---|---|
mysqlnd.collect_statistics | "1" | PHP_INI_SYSTEM | Disponible depuis PHP 5.3.0. |
mysqlnd.collect_memory_statistics | "0" | PHP_INI_SYSTEM | Disponible depuis PHP 5.3.0. |
mysqlnd.debug | "0" | PHP_INI_SYSTEM | Disponible depuis PHP 5.3.0. |
mysqlnd.net_read_timeout | "31536000" | PHP_INI_SYSTEM | Disponible depuis PHP 5.3.0. |
mysqlnd.net_cmd_buffer_size | 5.3.0 - "2048", 5.3.1 - "4096" | PHP_INI_SYSTEM | Disponible depuis PHP 5.3.0. |
mysqlnd.net_read_buffer_size | "32768" | PHP_INI_SYSTEM | Disponible depuis PHP 5.3.0. |
Voici un éclaircissement sur l'utilisation des directives de configuration.
Active la collecte de différentes statistiques du client auxquelles vous pouvez accéder via mysqli_get_client_stats(), mysqli_get_connection_stats(), mysqli_get_cache_stats() et qui sont aussi décrites dans la section mysqlnd de la sortie de la fonction phpinfo().
Ce paramètre active toutes les statistiques de MySQL Native Driver sauf celles relatives à la gestion de la mémoire.
Active la collecte de différentes statistiques concernant la mémoire qui peuvent être consultées via mysqli_get_client_stats(), mysqli_get_connection_stats(), mysqli_get_cache_stats() et qui sont aussi montrées dans la section mysqlnd de la sortie de la fonction phpinfo().
Ce paramètre active les statistiques de gestion de la mémoire parmis les statistiques fournies par MySQL Native Driver.
Journalise tout en provenance de toute extension utilisant mysqlnd. Seulement disponible avec une version debug de PHP.
mysqlnd et la MySQL Client Library, libmysql utilise des API réseau différentes. mysqlnd utilise les flux PHP, alors que libmysql utilise sa propre implémentation basée sur le système. PHP, par défaut, utilise un timeout en lecture de 60s. Ceci en utilisant le paramètre de php.ini, default_socket_timeout. Ceci s'applique à tous les flux qui ne précisent pas de timeout par défaut. mysqlnd n'affecte aucune autre valeur et donc des requêtes longues peuvent se voir déconnectées après default_socket_timeout secondes avec comme résultat un message d'erreur "2006 - MySQL Server has gone away". La MySQL Client Library affecte un timeout par défaut de 365 * 24 * 3600 secondes (1 an) et attend les autres timeout, comme ceux de TCP/IP. mysqlnd utilise maintenant le même timeout très long. La valeur est configurable via le paramètre php.ini mysqlnd.net_read_timeout. mysqlnd.net_read_timeout est donc utilisé par toute extension (ext/mysql, ext/mysqli, PDO_MySQL) qui se repose sur mysqlnd. mysqlnd indique aux flux PHP d'utiliser mysqlnd.net_read_timeout. Notez qu'il peut y avoir des différences subtiles entre MYSQL_OPT_READ_TIMEOUT de la MySQL Client Library et les flux PHP, par exemple MYSQL_OPT_READ_TIMEOUT est dite fonctionnelle uniquement avec des connexions TCP/IP et, avant MySQL 5.1.2, seulement sous Windows. Les flux PHP, eux, n'ont pas cette limite. Voyez la documentation des flux en cas de doute.
mysqlnd alloue un buffer interne pour le réseau d'une taille de mysqlnd.net_cmd_buffer_size (dans php.ini) octets pour chaque connexion. Si une commande du protocole MySQL Client Server, par exemple, COM_QUERY (requête "normale"), ne rentre pas dans le buffer, mysqlnd va agrandir celui-ci à la taille requise. A chaque fois que le buffer est agrandi pour une connexion, command_buffer_too_small va être incrémenté de un.
Simysqlnd doit agrandir le buffer au-delà de sa taille initiale de mysqlnd.net_cmd_buffer_size octets pour presque toutes les connexions, vous devriez alors augmenter cette taille par défaut afin d'éviter les ré-allocations.
La taille par défaut du buffer est de 2048 octets dans PHP 5.3.0. Dans les versions suivantes, 4096 octets. Cette valeur par défaut peut être modifiée soit par le paramètre de php.ini mysqlnd.net_cmd_buffer_size ou en utilisant mysqli_options(MYSQLI_OPT_NET_CMD_BUFFER_SIZE, int size).
Il est recommandé d'avoir une taille de buffer au moins égale à 4096 octets car mysqlnd l'utilise aussi lors de la lecture de certains paquets de communication avec MySQL. Dans PHP 5.3.0, mysqlnd n'augmentera pas le buffer si MySQL envoie un paquet plus grand que la taille du buffer. Ainsi, mysqlnd ne peut pas décoder le paquet et l'application cliente recevra une erreur. Il n'y a que deux situations dans lesquelles le paquet peut être plus grand que les 2048 octets par défaut de mysqlnd.net_cmd_buffer_size sous PHP 5.3.0: le paquet véhicule un message d'erreur très long, ou le paquet contient des méta données de colonnes provenant de COM_LIST_FIELD (mysql_list_fields(), méta données d'une colonne de type string avec une valeur par défaut très grande (>1900 octets).
Depuis PHP 5.3.2, mysqlnd n'autorise plus l'affectation de buffers inférieurs à 4096 octets.
La valeur peut aussi être changée au moyen de mysqli_option(link, MYSQLI_OPT_NET_CMD_BUFFER_SIZE, size).
Taille maximale du segment en lecture lors de la lecture du corps d'un paquet de commande MySQL. Le protocole serveur de MySQL encapsule toutes ses commandes dans des paquets. Les paquets consistent en un en-tête court suivi d'un corps contenant les infos. La taille du corps est encodée dans l'en-tête. mysqlnd lit le corps sous forme de segments de MIN(header.size, mysqlnd.net_read_buffer_size) octets. Si le corps d'un paquet est plus grand que mysqlnd.net_read_buffer_size octets, mysqlnd doit alors appeler read() plusieurs fois.
La valeur peut aussi être changée au moyen de mysqli_optionS(link, MYSQLI_OPT_NET_READ_BUFFER_SIZE, size).