【问题标题】:Why mysql import tablespace so slow with insert/update sql pressure?为什么mysql导入表空间在insert/update sql压力下这么慢?
【发布时间】:2017-02-08 15:58:14
【问题描述】:

我的 mysql 中有模式 A 和 B,当我对模式 A 进行压力测试时,其中包括大量并发批量插入和更新 sql 操作,并从模式 B 上的 xtrabackup 导出的文件中导入许多表空间。我找到了导入操作非常缓慢并且花费大量时间(超过一小时)。如果我不对模式 A 做压力测试,导入操作只需花费将近 20 秒。

show processlist: 856 guest 10.142.90.17:51671 pinc_0002 Query 733 Table lock alter table bill import tablespace 0 857 guest 10.142.90.17:51700 pinc_0002 Query 733 Table lock alter table company import tablespace 0 858 guest 10.142.90.17:51731 pinc_0002 Query 733 Table lock alter table car_new import tablespace 0 859 guest 10.142.90.17:51758 pinc_0002 Query 733 Table lock alter table dialing_his import tablespace 0 860 guest 10.142.90.17:51799 pinc_0002 Query 733 Table lock alter table car import tablespace 0 861 guest 10.142.90.17:51846 pinc_0002 Query 732 Table lock alter table employee_his_new import tablespace 0 862 guest 10.142.90.17:51869 pinc_0002 Query 732 Table lock alter table book import tablespace 0 863 guest 10.142.90.17:51914 pinc_0002 Query 732 Table lock alter table goods import tablespace 0 864 guest 10.142.90.17:51975 pinc_0002 Query 732 Table lock alter table order_details import tablespace 0

result of SHOW ENGINE INNODB STATUS

select * from information_schema.INNODB_LOCKS: 115155367:9417:4:2 115155367 X RECORD `pinc_0003`.`testcolumn` GEN_CLUST_INDEX 9417 4 2 0x00001D331DDF 115153055:9417:4:2 115153055 X RECORD `pinc_0003`.`testcolumn` GEN_CLUST_INDEX 9417 4 2 0x00001D331DDF 115150974:9417:4:2 115150974 X RECORD `pinc_0003`.`testcolumn` GEN_CLUST_INDEX 9417 4 2 0x00001D331DDF 115148337:9417:4:2 115148337 X RECORD `pinc_0003`.`testcolumn` GEN_CLUST_INDEX 9417 4 2 0x00001D331DDF

result of select * from information_schema.INNODB_TRX

top: PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
54996 apps 20 0 111g 71g 8664 S 1794.7 14.2 2254:20 mysqld
iostat -dxm: ``` [apps@cs1n3 ~]$ iostat -dxm 2 Linux 2.6.32-358.el6.x86_64 (cs1n3) 02/08/2017 _x86_64_ (64 CPU)

设备:rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util 标准偏差 0.04 485.19 8.12 76.89 0.19 2.43 63.20 0.19 2.25 0.16 1.38 sdb 0.00 8.14 0.03 2.44 0.00 0.04 35.10 0.01 4.51 0.14 0.04

设备:rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util sda 0.00 841.50 0.00 7003.50 0.00 63.91 18.69 3.13 0.45 0.13 94.20 sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 ```

``` iostat -dxm Linux 2.6.32-358.el6.x86_64 (cs1n3) 02/08/2017 _x86_64_ (64 CPU) 设备:rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util 标准偏差 0.04 485.19 8.12 76.89 0.19 2.43 63.20 0.19 2.25 0.16 1.38 sdb 0.00 8.14 0.03 2.44 0.00 0.04 35.10 0.01 4.51 0.14 0.04

设备:rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util sda 0.00 841.50 0.00 7003.50 0.00 63.91 18.69 3.13 0.45 0.13 94.20 sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 ```

【问题讨论】:

    标签: mysql


    【解决方案1】:

    也许答案就在您的表格架构中。如果您的表中有PRIMARY_KEY,则您的数据库具有B-Tree 结构,但如果您的表中没有PRIMARY_KEY,则您的数据库具有table 结构。因此,也许您的数据库中有table 结构,因此操作添加/更新的成本高于B-Tree 结构。

    【讨论】:

    • 我有 1 个非 PRIMARY_KEY 的表和 19 个 PRIMARY_KEY 的表,我发现重启 mysql 服务器,然后导入表空间只花了将近 20 分钟。
    • 哪个少,哪个多,是否一样?
    • 也许好主意是添加到所有表 PRIMARY_KEY?请检查这个
    猜你喜欢
    • 2012-04-30
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-04
    • 2012-08-10
    相关资源
    最近更新 更多