2017-09-14 50 views
-2

在php(Supervisor)中分叉多個進程。每個都創建與同一個Mysql數據庫的連接,並行執行相同的SELECT查詢(Gearman)。如果我增加進程數量(即同一時間連接)並且更多相同的查詢將並行運行將導致在每個進程的SHOW PROCESSLIST中增加發送數據時間。這是一個簡單的選擇,事務級別READ UNCOMMITED。它是一些MySQL配置問題?或者SELECT查詢導致表鎖?或者,也許全面掃描呢?增加到mysql的連接會導致在相同查詢中每個發送數據時間上升

服務器:Ubuntu 16.04.2 LTS。 1個CPU核心。 MySQL 5.7.17。 innodb_buffer_pool_size 12 GB

+2

可能是關於網絡延遲,表結構,索引和查詢效率。所以,你應該提供關於你的模式和查詢的更多細節。 – abeyaz

+0

它使用32個表,包括在一個連接中在3秒內執行的自連接(13個唯一表),但是在兩個並行中,每個進程需要6秒鐘等等,就像它們在隊列中執行一樣。查詢對於許多連接來說足夠大,但沒有任何聚合和排序。只有一個表使用using_where掃描4262行,並使用索引進行了45%篩選,其他使用索引 –

+0

看起來您正在每個查詢中鎖定表。你在使用BEGIN TRANSACTION嗎? – abeyaz

回答

0

它使用32個表包括自我連接(13頁獨特的表)中的一個連接

得在3秒內執行看到的細節。聽起來像缺少或不足索引。

這是「實體 - 屬性 - 值如果是這樣,你跟着這裏的提示:。http://mysql.rjweb.org/doc.php/index_cookbook_mysql#speeding_up_wp_postmeta

InnoDB的不鎖表,但它可能是做這將鎖定所有行表掃描同樣,聲音如不良的索引和/或查詢公式。

請提供SHOW CREATE TABLE所有13桌,再加上SELECTEXPLAIN SELECT ...

如果有某種寫在後臺發生的情況,這可能影響SELECT,甚至在READ UNCOMMITTED模式。

至少16GB的RAM?

分叉多少個進程?你有多少個CPU核心?

+0

中看到它1個CPU核心,15GB RAM。即使是2個過程也會導致每次增加兩次。整個數據庫沒有插入/更新活動。是的,似乎有一個錯誤的查詢。但是不能很好地優化它,導致它在API中實現。那麼水平分片可能有幫助嗎? –

+0

也許CPU運行時處於100%的狀態?這可以解釋爲3的一個; 6s for 2.如果您無法更改生成的查詢,則無法實現分片。讓我們看看查詢。 –

相關問題