Php mysqlnd=>query()之后的memory\u get\u usage()不显示内存使用情况

Php mysqlnd=>query()之后的memory\u get\u usage()不显示内存使用情况,php,mysql,memory-management,mysqlnd,Php,Mysql,Memory Management,Mysqlnd,这在文档中: MySQL本机驱动程序管理不同于MySQL客户端的内存 图书馆这些库在内存分配和存储方式上有所不同 释放,在读取结果时如何在块中分配内存 MySQL,存在哪些调试和开发选项,以及如何读取结果 从MySQL链接到PHP用户变量 所有内存分配和释放都是使用PHP内存完成的 管理职能。因此,mysqlnd的内存消耗可以 可以使用PHP API调用进行跟踪,例如内存使用情况 我使用的是PHP5.4,所以MySQL扩展是使用mysqlnd驱动程序编译的。 即使那个文档说mysqlnd的所有内

这在文档中:

MySQL本机驱动程序管理不同于MySQL客户端的内存 图书馆这些库在内存分配和存储方式上有所不同 释放,在读取结果时如何在块中分配内存 MySQL,存在哪些调试和开发选项,以及如何读取结果 从MySQL链接到PHP用户变量

所有内存分配和释放都是使用PHP内存完成的 管理职能。因此,mysqlnd的内存消耗可以 可以使用PHP API调用进行跟踪,例如内存使用情况

我使用的是PHP5.4,所以MySQL扩展是使用mysqlnd驱动程序编译的。 即使那个文档说mysqlnd的所有内存管理都是通过PHP完成的,在查询返回cca 1MB BLOB结果集的表之后,我看不到任何内存使用情况。查询在缓冲mysql\u存储\u结果模式下使用:

$result = $conn->query('SELECT * FROM test');
echo memory_get_usage()/1024;
为什么memory\u get\u usage在查询后不显示内存使用量提升


我认为当使用缓冲模式时,查询会将整个结果集从MySQL服务器返回给mysqlnd。

query通常会执行查询并准备返回的结果集,但实际上不会将结果返回给PHP。。。。resultset通常是指向记录的一组指针,而不是记录本身。MySQL参考资料说:客户机处理结果集有两种方法。一种方法是通过调用mysql\u store\u result一次检索整个结果集。此函数从服务器获取查询返回的所有行,并将它们存储在客户机中。第二种方法是客户端通过调用mysql\u use\u result来启动逐行结果集检索。此函数初始化检索,但实际上不从服务器获取任何行。在这两种情况下,您都可以通过调用mysql\u fetch\u row来访问行。使用mysql\u store\u result,mysql\u fetch\u行访问以前从服务器获取的行。使用mysql\u use\u result,mysql\u fetch\u行实际上从服务器检索该行。[link]看来mysqli PHP扩展的查询'SELECT*FROM test'应该在mysqlnd中启动mysql_查询和mysql_存储_结果C函数,这些函数应该将整个结果集提取到客户端。还是我理解得不正确?ThanksMark Baker:$result=$conn->query'SELECT*FROM test';睡眠40$结果->全部取数;-如果我在睡眠时停止MySQL服务,我仍然能够获取结果。因此,如文档所述,在缓冲模式下的查询会立即将结果传输到客户端。在这种情况下,如果您是对的,并且数据存储在PHP内存中,那么我显然是非常非常错误的。。。。这仍然需要您解释为什么PHP内存使用率没有变化,否则会有神奇的效果