10bet网址
连接器和api手册
下载本手册
PDF(美国Ltr)- 5.2 mb
PDF (A4)- 5.2 mb
HTML下载(TGZ)- 2.7 mb
HTML下载(Zip)- 2.7 mb


7.6.6统计

PHP文档组版权所有。10bet官方网站

使用统计数据

MySQL Native Driver支持收集客户端和服务器之间通信的统计信息。收集的统计数据主要有两类:

  • 客户统计

  • 连接数据

如果您正在使用mysqli扩展,这些统计数据可以通过两个API调用获得:

请注意

统计数据在使用MySQL本地驱动程序的所有扩展之间聚合。例如,在编译两者时ext / mysql而且ext / mysqli的函数调用ext / mysql而且ext / mysqli将改变统计数据。没有办法找出某个API调用的任何扩展已经编译MySQL本地驱动程序对某个统计数据的影响有多大。你可以配置PDO MySQL驱动,ext / mysql而且ext / mysqli可以选择使用MySQL本地驱动程序。这样做时,所有三个扩展都将更改统计信息。

访问客户端统计信息

要访问客户端统计信息,您需要调用mysqli_get_client_stats.函数调用不需要任何参数。

函数返回一个关联数组,其中统计数据的名称作为键,统计数据的值作为值。

方法也可以访问客户机统计信息phpinfo函数。

访问连接统计信息

访问连接统计信息调用mysqli_get_connection_stats.这将数据库连接句柄作为参数。

函数返回一个关联数组,其中统计数据的名称作为键,统计数据的值作为值。

缓冲和非缓冲的结果集

可以对结果集进行缓冲或不进行缓冲。使用默认设置,ext / mysql而且ext / mysqli使用缓冲结果集用于普通(非准备语句)查询。缓冲的结果集缓存在客户机上。查询执行后,所有的结果都从MySQL Server中获取,并存储在客户端的缓存中。缓冲结果集的最大优点是,一旦客户端获取了结果,它们允许服务器释放分配给结果集的所有资源。

另一方面,未缓冲的结果集在服务器上保存的时间要长得多。如果您希望减少客户机上的内存消耗,但增加服务器上的负载,请使用无缓冲的结果。如果您的服务器负载很高,且未缓冲的结果集的数据也很高,那么您应该考虑将负载转移到客户机。客户端通常比服务器具有更好的扩展性。负载不仅仅是内存缓冲区——在释放一个结果集之前,服务器还需要保持其他资源的打开,例如文件句柄和线程。

预设语句默认使用无缓冲的结果集。但是,你可以使用mysqli_stmt_store_result启用缓冲的结果集。

MySQL本地驱动程序返回的统计数据

控件返回的统计信息列表mysqli_get_client_stats而且mysqli_get_connection_stats功能。

表7.26返回的mysqlnd统计信息:Network

统计 范围 描述 笔记
bytes_sent 连接 从PHP发送到MySQL服务器的字节数 可以用来检查压缩协议的效率吗
bytes_received 连接 从MySQL服务器接收到的字节数 可以用来检查压缩协议的效率吗
packets_sent 连接 发送的MySQL Client Server协议数据包数 用于调试客户端服务器协议实现
packets_received 连接 接收到的MySQL Client Server协议数据包的数量 用于调试客户端服务器协议实现
protocol_overhead_in 连接 MySQL Client Server协议开销(以字节为单位)。目前,只有包头(4字节)被认为是开销。Protocol_overhead_in = packets_received * 4 用于调试客户端服务器协议实现
protocol_overhead_out 连接 MySQL客户端服务器协议开销(以字节为单位)。目前,只有包头(4字节)被认为是开销。Protocol_overhead_out = packets_sent * 4 用于调试客户端服务器协议实现
bytes_received_ok_packet 连接 接收到的MySQL客户端服务器协议OK数据包的总字节大小。OK包可以包含状态消息。状态消息的长度可以变化,因此OK包的大小是不固定的。 用于调试CS协议实现。注意,以字节为单位的总大小包括头包的大小(4字节,参见协议开销)。
packets_received_ok 连接 收到的MySQL客户端服务器协议OK数据包的数量。 用于调试CS协议实现。注意,以字节为单位的总大小包括头包的大小(4字节,参见协议开销)。
bytes_received_eof_packet 连接 接收到的MySQL客户端服务器协议EOF包的总字节大小。EOF的大小取决于服务器版本。此外,EOF可以传输错误消息。 用于调试CS协议实现。注意,以字节为单位的总大小包括头包的大小(4字节,参见协议开销)。
packets_received_eof 连接 MySQL Client Server协议EOF报文数。与其他包统计一样,即使PHP没有收到预期的包,但(例如)收到错误消息,包的数量也会增加。 用于调试CS协议实现。注意,以字节为单位的总大小包括头包的大小(4字节,参见协议开销)。
bytes_received_rset_header_packet 连接 MySQL客户端服务器协议结果集头数据包的总大小(以字节为单位)。数据包的大小取决于有效载荷(加载本地文件插入更新选择,错误信息)。 用于调试CS协议实现。注意,以字节为单位的总大小包括头包的大小(4字节,参见协议开销)。
packets_received_rset_header 连接 MySQL Client Server协议结果集头数据包的数量。 用于调试CS协议实现。注意,以字节为单位的总大小包括头包的大小(4字节,参见协议开销)。
bytes_received_rset_field_meta_packet 连接 MySQL Client Server协议结果集元数据(字段信息)包的总字节大小。当然,大小随结果集中的字段而变化。在COM_LIST_FIELDS的情况下,包也可以传输一个错误或一个EOF包。 只对调试CS协议实现有用。注意,以字节为单位的总大小包括头包的大小(4字节,参见协议开销)。
packets_received_rset_field_meta 连接 MySQL Client Server协议结果集元数据(字段信息)包数。 只对调试CS协议实现有用。注意,以字节为单位的总大小包括头包的大小(4字节,参见协议开销)。
bytes_received_rset_row_packet 连接 MySQL Client Server协议结果集行数据包的总大小(以字节为单位)。该包也可以传输错误或EOF包。您可以反向工程的数量的错误和EOF包减法rows_fetched_from_server_normal而且rows_fetched_from_server_psbytes_received_rset_row_packet 只对调试CS协议实现有用。注意,以字节为单位的总大小包括头包的大小(4字节,参见协议开销)。
packets_received_rset_row 连接 MySQL Client Server协议结果集行数据包的数量及其总大小(以字节为单位)。 只对调试CS协议实现有用。注意,以字节为单位的总大小包括头包的大小(4字节,参见协议开销)。
bytes_received_prepare_response_packet 连接 MySQL Client Server协议OK的预备语句初始化包(预备语句初始化包)的总字节大小。数据包也可能传输错误。数据包大小取决于MySQL版本:MySQL 4.1时为9字节,MySQL 5.0以上为12字节。没有一种安全的方法可以知道发生了多少错误。例如,如果您总是连接到MySQL 5.0或更新版本,您可能能够猜出发生了错误,bytes_received_prepare_response_packet! =packets_received_prepare_response* 12。另请参阅ps_prepared_never_executedps_prepared_once_executed 只对调试CS协议实现有用。注意,以字节为单位的总大小包括头包的大小(4字节,参见协议开销)。
packets_received_prepare_response 连接 MySQL Client Server协议OK数用于预备语句初始化包(预备语句初始化包)。 只对调试CS协议实现有用。注意,以字节为单位的总大小包括头包的大小(4字节,参见协议开销)。
bytes_received_change_user_packet 连接 MySQL客户端服务器协议COM_CHANGE_USER包的总字节大小。数据包也可能传输错误或EOF。 只对调试CS协议实现有用。注意,以字节为单位的总大小包括头包的大小(4字节,参见协议开销)。
packets_received_change_user 连接 MySQL Client Server协议COM_CHANGE_USER包数 只对调试CS协议实现有用。注意,以字节为单位的总大小包括头包的大小(4字节,参见协议开销)。
packets_sent_command 连接 从PHP发送到MySQL的MySQL客户端服务器协议命令的数量。没有办法知道哪些特定的命令以及发送了多少命令。最好的情况是,您可以使用它来检查PHP是否向MySQL发送了任何命令,以了解您是否可以考虑在PHP二进制文件中禁用MySQL支持。也没有办法对向MySQL发送数据时可能发生的错误数量进行逆向工程。记录的唯一错误是command_buffer_too_small(见下文)。 只对调试CS协议实现有用。
bytes_received_real_data_normal 连接 PHP客户机从中获取的有效负载的字节数mysqlnd使用文本协议。 这是结果集中包含的实际数据的大小,这些数据不是来自准备好的语句,而是由PHP客户机获取的。注意,尽管一个完整的结果集可能已经从MySQLmysqlnd,这个统计数据只计算实际数据mysqlndPHP客户端。增加该值的代码序列示例如下:
$mysqli = new mysqli();$res = $mysqli->查询("SELECT 'abc'");res - > fetch_assoc ();res - > close ();

每次获取操作都会增加该值。

如果结果集只在客户端被缓冲,而没有被获取,统计数据将不会增加,例如下面的例子:

$mysqli = new mysqli();$res = $mysqli->查询("SELECT 'abc'");res - > close ();
bytes_received_real_data_ps 连接 PHP客户机从中获取的有效负载的字节数mysqlnd使用准备语句协议。 这是由准备好的语句生成的结果集中包含的实际数据的大小,由PHP客户机获取。如果PHP客户端随后不读取结果集,则该值将不会增加。注意,尽管一个完整的结果集可能已经从MySQLmysqlnd,这个统计数据只计算实际数据mysqlndPHP客户端。另请参阅bytes_received_real_data_normal

结果集

表7.27返回的mysqlnd统计:结果集

统计 范围 描述 笔记
result_set_queries 连接 已生成结果集的查询数。生成结果集的查询示例:选择显示.如果从该行读取结果集头包时发生错误,则统计数据将不会递增。 您可以使用它作为PHP发送到MySQL的查询数量的间接度量,例如,识别导致数据库高负载的客户机。
non_result_set_queries 连接 没有生成结果集的查询数。不生成结果集的查询示例:插入更新加载数据.如果从该行读取结果集头包时发生错误,则统计数据将不会递增。 您可以使用它作为PHP发送到MySQL的查询数量的间接度量,例如,识别导致数据库高负载的客户机。
no_index_used 连接 生成结果集但没有使用索引的查询数(参见mysqld start选项-log-queries-not-using-indexes)。如果你想报告这些查询,你可以使用mysqli_report(MYSQLI_REPORT_INDEX)让ext/mysqli抛出异常。如果你更喜欢一个警告而不是一个异常使用mysqli_report(MYSQLI_REPORT_INDEX ^ MYSQLI_REPORT_STRICT)。
bad_index_used 连接 生成结果集而没有使用好的索引的查询数量(参见mysqld start option -log-slow-queries)。 如果你想报告这些查询,你可以使用mysqli_report(MYSQLI_REPORT_INDEX)让ext/mysqli抛出异常。如果你更喜欢一个警告而不是一个异常使用mysqli_report(MYSQLI_REPORT_INDEX ^ MYSQLI_REPORT_STRICT)
slow_queries 连接 SQL语句占用了超过long_query_time至少需要几秒钟才能执行min_examined_row_limit要检查的行。 没有通过报告mysqli_report
buffered_sets 连接 返回的缓冲结果集的数目正常的查询。正常的意味着未准备语句在下面的注释中。 在客户端上缓冲结果集的API调用示例:mysql_querymysqli_querymysqli_store_resultmysqli_stmt_get_result.在客户机上缓冲结果集可以确保尽快释放服务器资源,并使结果集更容易滚动。缺点是客户端缓存数据需要额外的内存消耗。注意,mysqlnd(与MySQL客户端库不同)尊重PHP内存限制,因为它使用PHP内部内存管理函数来分配内存。这也是原因所在memory_get_usage当使用mysqlnd而不是MySQL客户端库时,报告内存消耗更高。memory_get_usage根本不测量MySQL客户端库的内存消耗,因为MySQL客户端库不使用PHP内部内存管理函数所监视的函数!
unbuffered_sets 连接 普通(非准备语句)查询返回的未缓冲结果集的数目。 不缓冲客户端结果集的API调用示例:mysqli_use_result
ps_buffered_sets 连接 预处理语句返回的缓冲结果集的数目。默认情况下,预处理语句是无缓冲的。 在客户端上缓冲结果集的API调用示例:mysqli_stmt_store_result
ps_unbuffered_sets 连接 预处理语句返回的未缓冲结果集的数目。 默认情况下,预处理语句是无缓冲的。
flushed_normal_sets 连接 来自具有未读数据的正常(非准备语句)查询的结果集的数目,这些数据已为您静默地刷新。仅对未缓冲的结果集进行刷新。 在连接上运行新查询之前,必须完全获取未缓冲的结果集,否则MySQL将抛出错误。如果应用程序没有从未缓冲的结果集中获取所有行,mysqlnd会隐式地获取结果集以清除该行。另请参阅rows_skipped_normalrows_skipped_ps.隐性同花顺的一些可能原因:
  • 错误的客户端应用程序

  • 客户端停止读取后,它发现了它正在寻找的,但已经使MySQL计算比需要更多的记录

  • 客户端应用程序意外停止

flushed_ps_sets 连接 来自已为您静默刷新的未读数据的已准备语句的结果集数目。仅对未缓冲的结果集进行刷新。 在连接上运行新查询之前,必须完全获取未缓冲的结果集,否则MySQL将抛出错误。如果应用程序没有从未缓冲的结果集中获取所有行,mysqlnd会隐式地获取结果集以清除该行。另请参阅rows_skipped_normalrows_skipped_ps.隐性同花顺的一些可能原因:
  • 错误的客户端应用程序

  • 客户端停止读取后,它发现了它正在寻找的,但已经使MySQL计算比需要更多的记录

  • 客户端应用程序意外停止

ps_prepared_never_executed 连接 已准备但从未执行的语句数量。 准备好的语句会占用服务器资源。如果你不打算执行语句,就不应该准备它。
ps_prepared_once_executed 连接 只执行一个已准备语句的数量。 预处理语句背后的一个想法是,如果将语句执行分为不同的准备和执行阶段,则可以一遍又一遍地执行相同的查询(使用不同的参数),并且可以节省一些解析和其他准备工作。这样做的目的是准备一次缓存例如,要在多个语句执行期间重用的解析树。如果只执行一次预处理语句,那么两阶段处理的效率就会大大降低正常的查询,因为所有的缓存都意味着额外的工作,并且需要(有限的)服务器资源来保存缓存的信息。因此,只执行一次的预处理语句可能会导致性能损失。
rows_fetched_from_server_normalrows_fetched_from_server_ps 连接 从MySQL中成功获取的结果集行数,无论客户端应用程序是否使用了它们。有些行可能没有被客户端应用程序提取,而是隐式刷新了。 另请参阅packets_received_rset_row
rows_buffered_from_client_normalrows_buffered_from_client_ps 连接 来自“正常”查询或准备语句的成功缓冲行的总数。这是从MySQL中提取并在客户端上缓冲的行数。注意,对于已缓冲的行(MySQL到mysqlnd内部缓冲区)和已被客户端应用程序提取的缓冲行(mysqlnd内部缓冲区到客户端应用程序)有两个不同的统计数据。如果缓冲行数高于获取的缓冲行数,这可能意味着客户端应用程序运行的查询导致了大于所需的结果集,从而导致客户端没有读取行。 缓冲结果的查询示例:mysqli_querymysqli_store_result
rows_fetched_from_client_normal_bufferedrows_fetched_from_client_ps_buffered 连接 客户端从一个由普通查询或预备语句创建的缓冲结果集中提取的总行数。
rows_fetched_from_client_normal_unbufferedrows_fetched_from_client_ps_unbuffered 连接 客户端从“普通”查询或准备好的语句创建的未缓冲结果集中获取的总行数。
rows_fetched_from_client_ps_cursor 连接 客户端从由预备语句创建的游标中获取的总行数。
rows_skipped_normalrows_skipped_ps 连接 预留将来使用(目前不支持)
copy_on_write_savedcopy_on_write_performed 过程 使用mysqlnd,扩展返回的变量指向mysqlnd内部网络结果缓冲区。如果不更改变量,获取的数据将只在内存中保存一次。如果更改了变量,mysqlnd必须执行写时复制,以保护内部网络结果缓冲区不被更改。在MySQL客户端库中,你总是在内存中保存两次获取的数据。一次在MySQL客户端库内部缓冲区中,一次在扩展返回的变量中。理论上,mysqlnd可以节省40%的内存。但是,请注意内存节省不能用memory_get_usage
explicit_free_resultimplicit_free_result 连接、进程(仅在准备语句清理期间) 释放的结果集的总数。 free总是被认为是显式的,但是对于由init命令创建的结果集,例如,MYSQLI_INIT_COMMAND,…
proto_text_fetched_nullproto_text_fetched_bitproto_text_fetched_tinyintproto_text_fetched_shortproto_text_fetched_int24proto_text_fetched_intproto_text_fetched_bigintproto_text_fetched_decimalproto_text_fetched_floatproto_text_fetched_doubleproto_text_fetched_dateproto_text_fetched_yearproto_text_fetched_timeproto_text_fetched_datetimeproto_text_fetched_timestampproto_text_fetched_stringproto_text_fetched_blobproto_text_fetched_enumproto_text_fetched_setproto_text_fetched_geometryproto_text_fetched_other 连接 从普通查询(MySQL文本协议)中获取的某种类型的列的总数。 从C API / MySQL元数据类型到统计名称的映射:
  • MYSQL_TYPE_NULL——proto_text_fetched_null

  • MYSQL_TYPE_BIT——proto_text_fetched_bit

  • MYSQL_TYPE_TINY——proto_text_fetched_tinyint

  • MYSQL_TYPE_SHORT——proto_text_fetched_short

  • MYSQL_TYPE_INT24——proto_text_fetched_int24

  • MYSQL_TYPE_LONG——proto_text_fetched_int

  • MYSQL_TYPE_LONGLONG——proto_text_fetched_bigint

  • MYSQL_TYPE_DECIMALMYSQL_TYPE_NEWDECIMAL——proto_text_fetched_decimal

  • MYSQL_TYPE_FLOAT——proto_text_fetched_float

  • MYSQL_TYPE_DOUBLE——proto_text_fetched_double

  • MYSQL_TYPE_DATEMYSQL_TYPE_NEWDATE——proto_text_fetched_date

  • MYSQL_TYPE_YEAR——proto_text_fetched_year

  • MYSQL_TYPE_TIME——proto_text_fetched_time

  • MYSQL_TYPE_DATETIME——proto_text_fetched_datetime

  • MYSQL_TYPE_TIMESTAMP——proto_text_fetched_timestamp

  • MYSQL_TYPE_STRINGMYSQL_TYPE_VARSTRINGMYSQL_TYPE_VARCHAR——proto_text_fetched_string

  • MYSQL_TYPE_TINY_BLOBMYSQL_TYPE_MEDIUM_BLOBMYSQL_TYPE_LONG_BLOBMYSQL_TYPE_BLOB——proto_text_fetched_blob

  • MYSQL_TYPE_ENUM——proto_text_fetched_enum

  • MYSQL_TYPE_SET——proto_text_fetched_set

  • MYSQL_TYPE_GEOMETRY——proto_text_fetched_geometry

  • 任何MYSQL_TYPE_ *前面没有列出(应该没有)——proto_text_fetched_other

注意,在MySQL的每个版本中,MYSQL_*类型常量不一定与完全相同的SQL列类型相关联。

proto_binary_fetched_nullproto_binary_fetched_bitproto_binary_fetched_tinyintproto_binary_fetched_shortproto_binary_fetched_int24proto_binary_fetched_intproto_binary_fetched_bigintproto_binary_fetched_decimalproto_binary_fetched_floatproto_binary_fetched_doubleproto_binary_fetched_dateproto_binary_fetched_yearproto_binary_fetched_timeproto_binary_fetched_datetimeproto_binary_fetched_timestampproto_binary_fetched_stringproto_binary_fetched_blobproto_binary_fetched_enumproto_binary_fetched_setproto_binary_fetched_geometryproto_binary_fetched_other 连接 从准备好的语句(MySQL二进制协议)中获取的某种类型的总列数。 有关类型映射,请参见proto_text_ *如上文中所述。

表7.28返回的mysqlnd统计信息:Connection

统计 范围 描述 笔记
connect_successconnect_failure 连接 成功/失败连接尝试的总次数。 重用连接和所有其他类型的连接都包括在内。
重新连接 过程 在已打开的连接句柄上进行的(real_)连接尝试的总数。 代码序列$link = new mysqli(…);链接- > real_connect(…)将导致重新连接。但$link = new mysqli(…);链接- >连接(…)不会因为链接- >连接(…)将显式地在建立新连接之前关闭现有连接。
pconnect_success 连接 成功的持久连接尝试总数。 请注意,connect_success保存成功的持久连接和非持久连接尝试的总和。成功的非持久连接尝试的次数为connect_success-pconnect_success
active_connections 连接 活动持久连接和非持久连接的总数。
active_persistent_connections 连接 活动持久连接的总数。 活动的非持久连接的总数为active_connections-active_persistent_connections
explicit_close 连接 显式关闭连接的总数(仅限于ext/mysqli)。 导致显式关闭的代码片段示例:
$link = new mysqli(…);$link = new mysqli(…);链接- >连接(…)
implicit_close 连接 隐式关闭连接的总数(仅限ext/mysqli)。 导致隐式关闭的代码片段示例:
  • $link = new mysqli(…);链接- > real_connect(…)

  • 设置(链接)

  • 持久连接:使用real_connect创建了池连接,可能设置了未知选项—隐式关闭以避免返回带有未知选项的连接

  • 持久连接:ping/change_user失败,ext/mysqli关闭连接

  • 脚本执行结束:关闭未被用户关闭的连接

disconnect_close 连接 C API调用指示的连接失败mysql_real_connect在试图建立连接时。 叫做disconnect_close因为传递给C API调用的连接句柄将被关闭。
in_middle_of_command_close 过程 在命令执行过程中关闭了连接(未获取未完成的结果集,在发送查询之后和检索答案之前,在获取数据时,在使用LOAD data传输数据时)。 除非使用异步查询,否则只有在脚本意外停止且PHP为您关闭连接时才会发生这种情况。
init_command_executed_count 连接 init命令执行的总数,例如:MYSQLI_INIT_COMMAND,… 成功执行的次数为init_command_executed_count-init_command_failed_count
init_command_failed_count 连接 失败的init命令总数。

表7.29返回的mysqlnd统计信息:COM_*命令

统计 范围 描述 笔记
com_quitcom_init_dbcom_querycom_field_listcom_create_dbcom_drop_dbcom_refreshcom_shutdowncom_statisticscom_process_infocom_connectcom_process_killcom_debugcom_pingcom_timecom_delayed_insertcom_change_usercom_binlog_dumpcom_table_dumpcom_connect_outcom_register_slavecom_stmt_preparecom_stmt_executecom_stmt_send_long_datacom_stmt_closecom_stmt_resetcom_stmt_set_optioncom_stmt_fetchcom_daemon 连接 从PHP向MySQL发送某个COM_*命令的总次数。

在检查行之后,在发送相应的MySQL客户端服务器协议包之前,统计数据会增加。如果mysqlnd通过网络发送数据包失败,统计数据将不会减少。在失败的情况下,mysqlnd会发出PHP警告发送%s数据包时出错。PID = % d。

使用例子:

  • 检查PHP是否向MySQL发送某些命令,例如,检查客户端是否发送COM_PROCESS_KILL

  • 通过比较计算预处理语句执行的平均次数COM_EXECUTECOM_PREPARE

  • 检查PHP是否运行了任何未准备好的SQL语句COM_QUERY是零

  • 通过检查来识别运行过多SQL语句的PHP脚本COM_QUERY而且COM_EXECUTE


杂项

表7.30返回的mysqlnd统计信息

统计 范围 描述 笔记
explicit_stmt_closeimplicit_stmt_close 过程 关闭准备语句的总数。 除准备失败外,关闭总是被认为是显式的。
mem_emalloc_countmem_emalloc_ammountmem_ecalloc_countmem_ecalloc_ammountmem_erealloc_countmem_erealloc_ammountmem_efree_countmem_malloc_countmem_malloc_ammountmem_calloc_countmem_calloc_ammountmem_realloc_countmem_realloc_ammountmem_free_count 过程 内存管理调用。 只有发展。
command_buffer_too_small 连接 当从PHP发送命令到MySQL时,网络命令缓冲区扩展的数量。

Mysqlnd分配一个内部的命令/网络缓冲区mysqlnd.net_cmd_buffer_sizephp . ini)字节为每个连接。例如,如果MySQL客户端服务器协议命令,COM_QUERY(正常的查询),如果不能装入缓冲区,mysqlnd会将缓冲区扩展到发送命令所需的大小。每当为一个连接扩展缓冲区时command_buffer_too_small会加1。

如果mysqlnd必须使缓冲区的初始大小超过mysqlnd.net_cmd_buffer_sizephp . ini)字节,你应该考虑增加默认大小,以避免重新分配。

默认的缓冲区大小是4096字节,这是可能的最小值。默认值可以通过php . ini设置mysqlnd.net_cmd_buffer_size或使用(MYSQLI_OPT_NET_CMD_BUFFER_SIZE, int大小)

connection_reused