-- 18 max_allowed_packet
/*
    增加该变量的值十分安全,这是因为仅当需要时才会分配额外内存。例如,仅当你发出长查询或mysqld必须返回大
    的结果行时mysqld才会分配更多内存。
该变量之所以取较小默认值是一种预防措施,以捕获客户端和服务器之间的错误信息包,    并确保不会因偶然使用大的信息包而导致内存溢出。
*/ 
看到mysql的这个参数的时候,有个疑问,如果我是存储过程,在存储过程里面有许多的 insert ... select ...的操作,而且都是大批量的,比如300W级别的操作。我在页面调用存储过程,只返回true或者false,页面只知道call成功或失败。问下,这个里面的大批量查询与红颜色部分的描述的是一种情况吗?

解决方案 »

  1.   

    insert ... select ...
    并没有和前台交互
      

  2.   

    仅当你发出长查询或mysqld必须返回大
    的结果行时mysqld才会分配更多内存客户端的默认大小是1M。
    红色的意思是说,你把这个大小调整到10M,但是查询的时候结果集的大小总在1M以内,那么虽然你设置了10M,但是内存还是只分配1M出来给它,而不是分配10M,然后空着9M。服务端的默认大小是1G。如果你查询一个很大的记录过来,超过了1M,客户端就会提示你这个缓冲区太小,存不下所有记录,要你调整大小。你例举的存储过程都在服务器端完成,不需要返回记录集到客户端,所以都在1G里面缓冲了。