Laravel大量数据库查询导致php进程内存耗尽

行路难,不在水,不在山,只在人情反覆间

Laravel框架默认存储每次请求(每次命令行执行也相当于一次请求)的所有数据库查询语句!!!
在普通的http中数据库请求语句并不多,所有不会导致问题,但是需要大量数据库查询的命令行工具就显然不能这么干,

禁用query日志

1
DB::connection()->disableQueryLog();  //禁用query log

打印sql

AppServiceProvider.php 的 boot 方法中添加如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
public function boot()
{
if (env('APP_ENV') === 'local') {
DB::connection()->enableQueryLog();
Event::listen('kernel.handled', function ($request, $response) {
if ( $request->has('sql-debug') ) {
$queries = DB::getQueryLog();
dd($queries);
}
});
}
}