【发布时间】:2020-07-01 06:31:43
【问题描述】:
我已将 innodb_flush_log_at_trx_commit 的全局变量设置为 2,但是当我运行命令 ab.exe -n 200 -c 200 -s 9999 http://127.0.0.1/index.php 时,前后速度没有差异。
文件里面的查询是用php/laravel写的:
$status = ['enable', 'disable'];
try {
\DB::beginTransaction();
for($p = 1; $p <= 1000; $p++) {
$price = mt_rand(1000, 5000);
CarPrice::create([
'car_id' => $p,
'amount' => $price,
'status' => $status[rand(0, 1)],
]);
}
\DB::commit();
} catch (\Exception $exception) {
\DB::rollback();
die('Err!');
}
- 每次修改
innodb_flush_log_at_trx_commit时,我都会重新启动 Apache 和 MariaDB。 - Windows 10
- 内存:8
- CPU:奔腾 3.3GHz
- 硬盘:HDD(非 SSD)
【问题讨论】:
-
您还没有就任何特定代码提出问题。您似乎在请求一个 PHP 脚本,但我们无法猜测该脚本中的内容。你应该阅读stackoverflow.com/help/how-to-ask
-
@BillKarwin 已编辑代码详细信息。
-
嗯,程序在第二种情况下要快一些。为什么您期望在更改单个 mariadb 设置后提交速度会发生根本变化?
-
因为我认为通过使用该变量它将使用 ram 而不是磁盘,所以它会得到 50 而不是 131 !!! @影子
-
如果我正确理解
ab的参数,您的基准测试似乎只运行 200 个事务。这可能不足以显示不同 innodb 日志刷新设置之间的任何可检测差异。基准测试通常需要运行 小时 才能显示差异。我运行了 8 个小时,是的,我确实看到了几个小时内结果的显着变化。不过我不使用 Windows,所以我不知道您会有什么体验。
标签: mysql query-optimization innodb