【问题标题】:MySQL/MariaDB - Setting global variable "innodb_flush_log_at_trx_commit = 2" doesn't affect speedMySQL/MariaDB - 设置全局变量“innodb_flush_log_at_trx_commit = 2”不影响速度
【发布时间】: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 时,前后速度没有差异。

当变量的值为1时

当变量值为2时

文件里面的查询是用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


【解决方案1】:

您可能需要每秒COMMIT 超过 100 个事务才能看到任何差异。那是硬盘驱动器;如果你有 SDD,它可能是 1000。

你在做以下事情吗?

START TRANSACTION;
INSERT
INSERT
...
INSERT   -- 1000 1-row inserts in a single connection?
COMMIT;  -- This is where that setting makes a difference.

COMMIT 占总数的比例很小,很难衡量。

真正的加速是这样做:

START TRANSACTION;
INSERT ... VALUES
    ( row ),
    ( row ),
    ...
    ( row );  -- one 1000-row insert?
COMMIT;  -- This is where that setting makes a difference.

但是,这需要更改您的应用代码。

潜在问题:是否需要为每一行获取Last_insert_id()

PS:这将展示与innodb_flush_log_at_trx_commit 的差异;它会慢得多:

START TRANSACTION;
INSERT
COMMIT;

START TRANSACTION;
INSERT
COMMIT;
...       -- 1000 1-row inserts in a single connection
START TRANSACTION;
INSERT 
COMMIT;  -- after each row inserted!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 2010-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多