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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果瓶颈在于IO,多少线程都一样啊, 除非的分表存在不同的物理磁盘上.
你需要统计一下IO情况才行.
你可以用top或iostat查看一下sql执行时的wa, IO-wait参数, 比例是多少.
IO资源方面瓶颈
出现 IO 资源方面瓶颈的时候,主要表现在服务器 iowait 很高,usr 占比较少,系统响应较慢,数据库中经常会存在大量执行状态的 session。
遇到 IO 资源方面的瓶颈,我们可以使用的硬件层面优化方案主要就是:
增加内存加大可缓存的数据量:这个方案能否达到效果取决于系统热点数据的总量,毕竟内存的成本也是比较高的,而且单台设备所能管理的内存量也是有限的
改善底层存储设备的 IO 能力:如本文前面所述,底层存储能力的改善同时取决于多个方面,既有单个磁盘本身的能力问题,也包括磁盘数目方面的策略,同时还受到存储自身以及存储和主机之间的带宽限制。所以在优化底层存储能力的同时需要同时考虑到这3方面的因素,做好总体分析和局部的平衡
如果确实是单机IO存在瓶颈,可以考虑将表分布到几个独立的数据库,最终应用层合并数据。