在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
可能是關於網絡延遲,表結構,索引和查詢效率。所以,你應該提供關於你的模式和查詢的更多細節。 – abeyaz
它使用32個表,包括在一個連接中在3秒內執行的自連接(13個唯一表),但是在兩個並行中,每個進程需要6秒鐘等等,就像它們在隊列中執行一樣。查詢對於許多連接來說足夠大,但沒有任何聚合和排序。只有一個表使用using_where掃描4262行,並使用索引進行了45%篩選,其他使用索引 –
看起來您正在每個查詢中鎖定表。你在使用BEGIN TRANSACTION嗎? – abeyaz