mysql并行查询问题

业务表数据量过大分表设计4张,然后需求是将4张表全量数据导出。

测试机器4核,做法是开启4个线程同时查询,最终结果汇总。

如果一个线程查询一张表耗时 2s,那么要实现的是 4个线程跑完也是耗时 2s(利用cpu多核真正并行),但现实是耗时 2 * 4 约等于 8s多。

真的困扰多时的一个问题,还望大佬相助,跪谢!

附上mysql参数:

+-----------------------------------------+---------------------------+
| Variable_name                           | Value                     |
+-----------------------------------------+---------------------------+
| innodb_purge_threads                    | 0                         |
| innodb_read_io_threads                  | 4                         |
| innodb_thread_concurrency               | 10                        |
| innodb_thread_sleep_delay               | 10000                     |
| innodb_write_io_threads                 | 4                         |
| max_delayed_threads                     | 20                        |
| max_insert_delayed_threads              | 20                        |
| myisam_repair_threads                   | 1                         |
| performance_schema_max_thread_classes   | 50                        |
| performance_schema_max_thread_instances | 1000                      |
| pseudo_thread_id                        | 81                        |
| thread_cache_size                       | 8                         |
| thread_concurrency                      | 10                        |
| thread_handling                         | one-thread-per-connection |
| thread_stack                            | 262144                    |
+-----------------------------------------+---------------------------+

mysql 版本是 5.5.28

阅读 5.3k
2 个回答

如果瓶颈在于IO,多少线程都一样啊, 除非的分表存在不同的物理磁盘上.
你需要统计一下IO情况才行.

你可以用top或iostat查看一下sql执行时的wa, IO-wait参数, 比例是多少.

IO资源方面瓶颈
出现 IO 资源方面瓶颈的时候,主要表现在服务器 iowait 很高,usr 占比较少,系统响应较慢,数据库中经常会存在大量执行状态的 session。
遇到 IO 资源方面的瓶颈,我们可以使用的硬件层面优化方案主要就是:
增加内存加大可缓存的数据量:这个方案能否达到效果取决于系统热点数据的总量,毕竟内存的成本也是比较高的,而且单台设备所能管理的内存量也是有限的
改善底层存储设备的 IO 能力:如本文前面所述,底层存储能力的改善同时取决于多个方面,既有单个磁盘本身的能力问题,也包括磁盘数目方面的策略,同时还受到存储自身以及存储和主机之间的带宽限制。所以在优化底层存储能力的同时需要同时考虑到这3方面的因素,做好总体分析和局部的平衡

如果确实是单机IO存在瓶颈,可以考虑将表分布到几个独立的数据库,最终应用层合并数据。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题