1

ローカルの開発マシンとは対照的に、ステージング サーバーで実行速度が 5 倍遅いクエリがあります。

Stackoverflow は書式設定をうまく処理したくありません。クエリ、説明、および説明はここにあります

ステートメントを見るとdescribe、ローカル スキーマとリモート スキーマの間に違いは見られません。

2 台のマシンのレコード数は同程度です (500k 対 600k)

コメントに応じて編集

クエリを MySQL Workbench に投入してクエリ時間を調べるというのは、非常に非科学的な私のアプローチでした。ローカル クエリ時間は約 1.3 秒で、リモート クエリ時間は約 5.2 秒でした (つまり、4 倍遅い)。このクエリ時間をテストするより良い方法があると確信しています。

マシンは異なります。私の開発マシンは、8 ギガの RAM を搭載した Mac Book Pro です。ステージング サーバーは、512 メガバイトの RAM を搭載した Linode VPS です。ステージング サーバーにはあまり負荷がかからないはずです (使用しているのは私だけです)。ほとんどのクエリがローカル マシンとステージング サーバーでほぼ同じ時間枠で実行されていることに気付きました。

RAM の問題

一時テーブルが使用されていないため ( には言及されていませんEXPLAINS)、RAM の容量は引き続き問題になりますか?

からの出力free

             total       used       free     shared    buffers     cached
Mem:        508576     453880      54696          0       4428     254200
-/+ buffers/cache:     195252     313324
Swap:       262140      19500     242640

Gist に追加されたプロファイリング

リモートでは「データの送信」に 2.5 秒かかっているようですが、ローカルでは 0.5 秒しかかかっていません。これは I/O の問題ですか? (要旨の完全なプロファイリング情報)

4

1 に答える 1

4

ステージング サーバーには、Mac Book Pro の RAM の 16 分の 1 が搭載されています。

MySQL の 2 つのインスタンスで使用できる RAM の量がわからないので、決定的なことはできませんが、最初に確認したいのはそこです。

また、これらのクエリを MySQL コマンド ラインからローカルで実行した場合、時間はどのように比較されますか? 時間の増加は、クエリ処理ではなく、ネットワーク転送にある可能性があります。

実際には...ネットワーク転送時間は私が最初に見る場所です...次にMySQLのメモリ使用量です。

次の質問の更新を編集します

「データ送信」フェーズは、サーバーがクライアントrefにデータを送信するフェーズです。データセットの大きさは正確にはわかりませんが、おそらく 50kB 程度のデータに対して 2.5 秒はかなり高いようです。プロファイリング データを調べたところ、ほぼすべての時間がデータの送信に費やされているため、ここのネットワークを強く疑っています。

編集2

いくつかの調査により、「データの送信」が誤解を招くものであり、これが実際にクエリの実行に費やされた時間であることを示すこのページにたどり着きました。

したがって、サーバーの CPU とメモリの使用量を確認する必要があると思います。MacBook よりもはるかに低いレベルで仕様が定められているからです。

于 2012-12-12T19:26:03.587 に答える