私は2台のサーバで同じデータベースを持っています。MySQLクエリで新しいサーバに時間がかかりすぎる
サーバ1(クラウドサーバ4ギガバイトRAM)
MySQLの変数= https://pastebin.com/raw/jENsXnsK
これはRAM、4 GBのクラウドサーバ(管理ラックスペースからのMySQLクラウド・インスタンス)です。
iは、クエリを実行すると、複数の結合有し、それはこれが
150 rows in set (0.61 sec)
サーバ2(専用32ギガバイトRAM)
MySQLの変数= https://pastebin.com/raw/sYdBhp4p
で実行されます32GBのRAMを備えた新しい専用サーバーまだ実稼働中ではなく、CPU/RAMを増やすにつれてクラウドサーバを専用に移行しようとしています。
クラウドサーバーからこの新しい専用の同じクエリーにDBをコピーすると、さらに時間がかかります。
150 rows in set (21.32 sec)
これは約40倍遅くなります。専用のクラウドで
[[email protected] ~]# free -m
total used free shared buff/cache available
Mem: 31797 2700 23182 96 5914 28569
Swap: 16381 0 16381
[[email protected] ~]#
なしSSHアクセス、アマゾンRDSのようなだけでMySQLのアクセスに無料-m上
は結果。
EDIT 1:
私は、クエリは、専用のサーバー上ではるかに高速に実行したこと、2Mにデフォルト131072からjoin_buffer_sizeに変更。セットで
150行(1.84秒)
それでもそれは約4ギガバイトのRAMを搭載したサーバーよりも3倍倍遅いです。
SELECT nr.*, p.*, e.*,
(
SELECT cityname as cityname
FROM city_type AS ct
where ct.id = p.city_type
) as cityname,
(
SELECT city_id as city_id
FROM tbl_suburb AS ts
where ts.id = e.tbl_suburb_id
) as suburb_city_id,
(
SELECT suburb_name
FROM tbl_suburb AS ts
where ts.id = e.tbl_suburb_id
) as suburb_name,
(
SELECT kilometers as km
FROM tbl_suburb AS tskm
where tskm.id = e.tbl_suburb_id
) as suburb_kilometers
FROM new_registrations AS nr
INNER JOIN tbl_admin_registrations AS tar ON tar.registration_id = nr.id
INNER JOIN tbl_admin_properties AS tap ON tap.admin_id = tar.admin_id
INNER JOIN (tbl_properties AS p
LEFT JOIN tbl_room_types rt ON (rt.tbl_property_id = p.id)
) ON p.id = tap.property_id
INNER JOIN tbl_expansions AS e ON e.property_id = tap.property_id
WHERE p.expansion = '1'
AND p.status = '2'
AND nr.country = 1
AND nr.id NOT IN(203, 204)
AND (nr.deleted = 'n'
OR nr.deleted IS NULL
)
AND e.id IN (
SELECT te.id as expansion_id
FROM tbl_suburb AS ts2
INNER JOIN tbl_expansions as te ON te.tbl_suburb_id IN (
SELECT id
FROM tbl_suburb
WHERE city_id IN (
SELECT id
FROM city_type
WHERE country_id = '1'))
)AND (
(rt.week4 > 350 AND rt.week4 <= 5250)
OR (rt.week3 > 350 AND rt.week3 <= 5250)
OR (rt.week2 > 350 AND rt.week2 <= 5250)
OR (rt.week1 > 350 AND rt.week1 <= 5250))
GROUP BY nr.id;
はあなたが同じクエリの計画を説明し比較したことがありますか?説明の計画は、クエリのパフォーマンスを求める最初の項目です。 –
@ used-by-already私はアプリケーションの開発者ではないので、スピードアップしてもクエリを変更したくありません。私が必要とするのは、同じクエリを新しいサーバで同じ速度で実行することだけです。ここでは、クエリの説明です。 https://pastebin.com/raw/iiWKDaD7私はこれがあなたが必要とするものかどうか分かりません。もしあなたがdiffの結果を望むなら、あなたはSQLを実行するように教えてください? – HostOnNet
**あなたが**計画**を比較していたかどうか尋ねました。たとえば、欠落しているインデックスが表示される可能性があります。これは、理由を絞り込むための提案です。それは私を助けません。 –