php.ini の設定により動作が変化します。
| 名前 | デフォルト | 変更可能 | 変更履歴 |
|---|---|---|---|
| mysqlnd.collect_statistics | "1" | INI_SYSTEM |
|
| mysqlnd.collect_memory_statistics | "0" | INI_SYSTEM |
|
| mysqlnd.debug | "" | INI_SYSTEM |
|
| mysqlnd.log_mask | 0 | INI_ALL |
|
| mysqlnd.mempool_default_size | 16000 | INI_ALL |
|
| mysqlnd.net_read_timeout | "86400" | INI_ALL |
PHP 7.2.0 より前のバージョンでは、
デフォルト値は "31536000" で、変更可能な範囲が INI_SYSTEM でした。
|
| mysqlnd.net_cmd_buffer_size | "4096" | INI_SYSTEM |
|
| mysqlnd.net_read_buffer_size | "32768" | INI_SYSTEM |
|
| mysqlnd.sha256_server_public_key | "" | INI_PERDIR |
|
| mysqlnd.trace_alloc | "" | INI_SYSTEM |
|
| mysqlnd.fetch_data_copy | 0 | INI_ALL |
PHP 8.1.0 で削除されました。 |
以下に設定ディレクティブに関する 簡単な説明を示します。
mysqlnd.collect_statistics
bool
mysqlnd セクションにも表示されます。
この設定項目は、メモリ管理に関するもの以外のすべての
MySQL Native Driver
統計情報 を有効にします。
mysqlnd.collect_memory_statistics
bool
mysqlnd セクションにも表示されます。
この設定項目は、MySQL Native Driver
統計情報 全体の中でメモリ管理に関する統計を有効にします。
mysqlnd.debug string
mysqlnd を使うすべての拡張モジュールからの通信を、指定したログファイルに記録します。
この項目の書式は mysqlnd.debug =
"option1[,parameter_option1][:option2[,parameter_option2]]"
となります。
書式文字列のオプションは、次のとおりです。
d:t:x:O,/tmp/mysqlnd.trace
注意: この機能は、デバッグビルド版の PHP でしか使えません。
mysqlnd.log_mask
int
mysqlnd.mempool_default_size
int
mysqlnd.net_read_timeout
int
mysqlnd は、MySQL Client Library すなわち
libmysqlclient とは異なるネットワーク API を使います。
mysqlnd は PHP ストリームを使いますが、
libmysqlclient は自前のラッパーを用意して操作レベルでのネットワークコールをしています。
PHP のデフォルト設定では、ストリームの読み込みタイムアウトは 60 秒です。これは
php.ini の
default_socket_timeout で設定します。
タイムアウト値を設定しなければ、すべてのストリームに対してデフォルト値が適用されます。
mysqlnd は何も値を設定しないので、長いクエリを実行して
default_socket_timeout 秒が経過すると、接続を切断して
2006 - MySQL Server has gone awayというエラーが発生します。 MySQL Client Library のデフォルトのタイムアウトは 24 * 3600 秒 (1 日) で、TCP/IP のタイムアウトなどのその他のタイムアウトが発生するのを待ちます。
mysqlnd も同様に、非常に長いタイムアウトを使うことができます。この値は、
php.ini の新しい項目
mysqlnd.net_read_timeout で設定します。
mysqlnd.net_read_timeout は、mysqlnd
を使うすべての拡張モジュール (ext/mysql や
ext/mysqli、PDO_MySQL) が利用します。
mysqlnd は、PHP ストリームに対して
mysqlnd.net_read_timeout を使うよう指示します。
MySQL Client Library および PHP ストリームの
MYSQL_OPT_READ_TIMEOUT とは微妙に違いがあることに注意しましょう。
MYSQL_OPT_READ_TIMEOUT は
TCP/IP 接続でしか動作しないとドキュメントに記載されており、
MySQL 5.1.2 より前のバージョンでは Windows でしか使えません。
PHP ストリームにはこの制限はありません。
信じられないならストリームのドキュメントを調べるとよいでしょう。
mysqlnd.net_cmd_buffer_size
int
mysqlnd は、内部のコマンド/ネットワークバッファとして
php.ini の mysqlnd.net_cmd_buffer_size
で指定しただけのバイト数をすべての接続に対して確保します。
MySQL Client Server プロトコルのコマンド、たとえば
COM_QUERY (通常のクエリ)
がこのバッファに収まらない場合、mysqlnd
はコマンドの送信に必要なだけバッファを拡張します。
ひとつの接続でバッファの拡張が発生するたびに
command_buffer_too_small をひとつ加算します。
ほとんどすべての接続で mysqlnd が
mysqlnd.net_cmd_buffer_size の初期値よりバッファを拡張せざるを得なくなったら、
デフォルトのサイズを大きくしてバッファの再割り当てを回避すべきでしょう。
デフォルトのバッファサイズは 4096 バイトです。これは、設定可能な最小値です。
この値は mysqli_options(link,
MYSQLI_OPT_NET_CMD_BUFFER_SIZE, size) でも変更できます。
mysqlnd.net_read_buffer_size
int
mysqlnd はこのボディを、
MIN(header.size, mysqlnd.net_read_buffer_size)
バイトごとに分割して読み込みます。パケットのボディが
mysqlnd.net_read_buffer_size バイトより長い場合は、
mysqlnd は read()
を複数回コールする必要があります。
この値は mysqli_options(link,
MYSQLI_OPT_NET_READ_BUFFER_SIZE, size)
でも設定できます。
mysqlnd.sha256_server_public_key
string
mysqlnd.trace_alloc
string
mysqlnd.fetch_data_copy
int
注意: この設定は、PHP 8.1.0 で削除されました。