php(Supervisor)で複数のプロセスをフォークします。それぞれが同じMysql DBへの接続を作成し、同じSELECTクエリを並列に実行します(Gearman)。プロセスの量(つまり同じ時間接続)を増やして、同じクエリを並列実行すると、各プロセスのSHOW PROCESSLISTでデータ送信時間が長くなります。トランザクションレベルがREAD COMMUNITEDでない単純な選択です。それはいくつかのMySQLの設定の問題ですか?またはSELECTクエリでテーブルのロックが発生しましたか?それとも、フルスキャンがしますか?mysqlへの接続を増やすと、同じクエリでそれぞれデータ送信時刻が上昇する
サーバー:Ubuntu 16.04.2 LTS。 1 CPUコア。 MySQL 5.7.17。 innodb_buffer_pool_size 12ギガバイト
ネットワークレイテンシ、テーブル構造、インデックス、およびクエリの効率についての可能性があります。そのため、スキーマとクエリについての詳細を説明する必要があります。 – abeyaz
1回の接続で3秒間実行するセルフジョイン(13個のユニークなテーブル)を含む32個のテーブルを使用しますが、2つのパラレルでは、キュー内での実行と同様に、各プロセスで6秒かかることになります。クエリは、多くの結合では十分ですが、集計やソートはありません。たった1つのテーブルスキャン4262 rows with using_whereと45%filter、他のインデックスを使用 –
あなたは各クエリでテーブルをロックしているようです。 BEGIN TRANSACTIONを使用していますか? – abeyaz