上传项目图片:“Percona Toolkit”雷竞技下载官网
  1. 雷竞技下载官网Percona工具包
  2. pt - 1898

Pt-archiver保持事务打开,同时等待副本赶上

    XML 可打印的

细节

    • 错误
    • 状态: Done">完成
    • 媒介
    • 解决方法: 固定
    • 3.2.1之上
    • 3.3.0
    • 没有一个
    • 没有一个
    • 1
    • 平台冲刺33

    描述

      设置主与一个大表

      SET GLOBAL innodb_flush_log_at_trx_commit=2;SET GLOBAL sync_binlog=1000000;SET GLOBAL innodb_buffer_pool_size=2*1024*1024*1024;使用测试;删除表如果存在' joinit ';创建表joinit (' i ')int(11) NOT NULL AUTO_INCREMENT, ' s ' varchar(64) DEFAULT NULL, ' t ' time NOT NULL, ' g 'int(11) NOT NULL, PRIMARY KEY (' i '), KEY g_idx (g)) ENGINE=InnoDB DEFAULT CHARSET=latin1;INSERT INTO joinit VALUES (NULL, uuid(), time(now()), (FLOOR(1 + RAND() *60)));INSERT INTO joinit SELECT NULL, uuid(), time(now()), (FLOOR(1 + RAND() *60)) FROM joinit;INSERT INTO joinit SELECT NULL, uuid(), time(now()), (FLOOR(1 + RAND() *60)) FROM joinit;INSERT INTO joinit SELECT NULL, uuid(), time(now()), (FLOOR(1 + RAND() *60)) FROM joinit;INSERT INTO joinit SELECT NULL, uuid(), time(now()), (FLOOR(1 + RAND() *60)) FROM joinit;INSERT INTO joinit SELECT NULL, uuid(), time(now()), (FLOOR(1 + RAND() *60)) FROM joinit;INSERT INTO joinit SELECT NULL, uuid(), time(now()), (FLOOR(1 + RAND() *60)) FROM joinit;INSERT INTO joinit SELECT NULL, uuid(), time(now()), (FLOOR(1 + RAND() *60)) FROM joinit;INSERT INTO joinit SELECT NULL, uuid(), time(now()), (FLOOR(1 + RAND() *60)) FROM joinit; INSERT INTO joinit SELECT NULL, uuid(), time(now()), (FLOOR( 1 + RAND( ) *60 )) FROM joinit; -- +256 rows INSERT INTO joinit SELECT NULL, uuid(), time(now()), (FLOOR( 1 + RAND( ) *60 )) FROM joinit; -- +512 rows INSERT INTO joinit SELECT NULL, uuid(), time(now()), (FLOOR( 1 + RAND( ) *60 )) FROM joinit; -- +1024 rows INSERT INTO joinit SELECT NULL, uuid(), time(now()), (FLOOR( 1 + RAND( ) *60 )) FROM joinit; INSERT INTO joinit SELECT NULL, uuid(), time(now()), (FLOOR( 1 + RAND( ) *60 )) FROM joinit; INSERT INTO joinit SELECT NULL, uuid(), time(now()), (FLOOR( 1 + RAND( ) *60 )) FROM joinit; INSERT INTO joinit SELECT NULL, uuid(), time(now()), (FLOOR( 1 + RAND( ) *60 )) FROM joinit; - ...run few more so it has a few million rows

      在副本

      SET GLOBAL innodb_flush_log_at_trx_commit=1;SET GLOBAL sync_binlog=1;SET GLOBAL innodb_buffer_pool_size=128*1024*1024;

      然后运行

      PTDEBUG = 1 . ./pt-archiver——清除——where"g < 45"——commit-each——limit=500——statistics——source“h = localhost, S = / tmp / mysql_sandbox19731.sock, D =测试,t = joinit, u = msandbox, p = msandbox”——check-slave-lag =“h = localhost, S = / tmp / mysql_sandbox19732.sock u = msandbox, p = msandbox”——max-lag=10 > /tmp/pt-archive .debug 2>&1

      一旦副本被延迟,你将看到一个事务打开,持有1行锁和1个撤销日志条目:

      ——TRANSACTION 4287278, ACTIVE 2 sec 2 lock struct(s),堆大小1136,1 row lock(s), undo log entries 1 MySQL thread id 45, OS thread handle 140647079315200, query id 15158693 localhost msandbox Trx read view will not see Trx with id >= 4287278, sees < 4287278

      一旦您运行了一些工作负载……

      Sysbench——mysql-host=127.0.0.1——mysql-port=19731——mysql-user=root——mysql-password=msandbox——mysql-db=test /usr/share/sysbench/oltp_read_writeLua——tables=100——threads=6——table_size=100——time=1000000——report-interval=1——db-ps-mode=disable——range-size=9205——skip-trx=——point-selects=0——simple-ranges=0——sum-ranges=0——order-ranges=0——distinct-ranges=0——index-updates=3——non-index-updates=0

      ...历史名单将飞天火箭:

      ~ $真正的{./使用-e查询引擎innodb状态\ g| grep历史;睡眠1;} done历史表长度174403历史表长度186116历史表长度191834历史表长度193754历史表长度194419历史表长度195433历史表长度199125历史表长度203649历史表长度213459历史表长度222541

      这是非常糟糕的,因为大量的历史列表将严重影响性能。

      参见所附的PTDEBUG输出:pt-archiver.debug

      建议的修复方法是:在等待时不保持事务打开。

      附件

        活动

            carlos.salguero卡洛斯Salguero
            marcos.albe马科斯再
            投票:
            0 为这个问题投票
            观察人士:
            6 开始关注这个问题

            日期

              创建:
              更新:
              解决:

              聪明的清单