9.7. 减少 SQL 查询(上)
减少 SQL 查询
上一节我们已经榨干了 Web 服务器的性能,但不管我们用多大的并发,吞吐量总是在 580 左右,这是因为影响吞吐量的不仅仅是 PHP-FPM 进程数量,还有代码执行效率,而 SQL 查询是影响执行效率的一个重要因素,所以接下来我们将尽可能地减少秒杀接口的 SQL 查询数量。
1. 开启 SQL 日志
为了更清楚地了解在一次秒杀请求过程中发生了哪些 SQL 查询,我们需要先开启 SQL 日志。
app/Providers/AppServiceProvider.php
use Illuminate\Support\Str;
.
.
.
public function boot()
{
.
.
.
// 只在本地开发环境启用 SQL 日志
if (app()->environment('local')) {
\DB::listen(function ($query) {
\Log::info(Str::replaceArray('?', $query->bindings, $query->sql));
});
}
}
.
.
.
由于我们的业务规则不允许一个用户同时存在两个未支付的秒杀订单,所以先在数据库中删掉之前创建的秒杀订单: