鍍金池/ 問答/數(shù)據(jù)庫  網(wǎng)絡(luò)安全/ mysql并行查詢問題

mysql并行查詢問題

業(yè)務(wù)表數(shù)據(jù)量過大分表設(shè)計4張,然后需求是將4張表全量數(shù)據(jù)導(dǎo)出。

測試機(jī)器4核,做法是開啟4個線程同時查詢,最終結(jié)果匯總。

如果一個線程查詢一張表耗時 2s,那么要實(shí)現(xiàn)的是 4個線程跑完也是耗時 2s(利用cpu多核真正并行),但現(xiàn)實(shí)是耗時 2 * 4 約等于 8s多。

真的困擾多時的一個問題,還望大佬相助,跪謝!

附上mysql參數(shù):

+-----------------------------------------+---------------------------+
| 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

回答
編輯回答
奧特蛋

如果瓶頸在于IO,多少線程都一樣啊, 除非的分表存在不同的物理磁盤上.
你需要統(tǒng)一下IO情況才行.

你可以用top或iostat查看一下sql執(zhí)行時的wa, IO-wait參數(shù), 比例是多少.

IO資源方面瓶頸
出現(xiàn) IO 資源方面瓶頸的時候,主要表現(xiàn)在服務(wù)器 iowait 很高,usr 占比較少,系統(tǒng)響應(yīng)較慢,數(shù)據(jù)庫中經(jīng)常會存在大量執(zhí)行狀態(tài)的 session。
遇到 IO 資源方面的瓶頸,我們可以使用的硬件層面優(yōu)化方案主要就是:
增加內(nèi)存加大可緩存的數(shù)據(jù)量:這個方案能否達(dá)到效果取決于系統(tǒng)熱點(diǎn)數(shù)據(jù)的總量,畢竟內(nèi)存的成本也是比較高的,而且單臺設(shè)備所能管理的內(nèi)存量也是有限的
改善底層存儲設(shè)備的 IO 能力:如本文前面所述,底層存儲能力的改善同時取決于多個方面,既有單個磁盤本身的能力問題,也包括磁盤數(shù)目方面的策略,同時還受到存儲自身以及存儲和主機(jī)之間的帶寬限制。所以在優(yōu)化底層存儲能力的同時需要同時考慮到這3方面的因素,做好總體分析和局部的平衡

2018年7月16日 15:31
編輯回答
筱饞貓

如果確實(shí)是單機(jī)IO存在瓶頸,可以考慮將表分布到幾個獨(dú)立的數(shù)據(jù)庫,最終應(yīng)用層合并數(shù)據(jù)。

2017年9月9日 19:08