2011-07-29 11 views
3

大きなインデックスを持つ大きなMySQLテーブルがあります。私はリモートマシンから単純なselect *クエリを実行します。大きな結果セットが必要です。大きな結果セットのデータ転送が遅い

私の問題は、クエリを実行すると結果セットが〜300 KBytes/secの最大データ転送速度で戻ることです。 私は同じテーブルを作成し、SQLServer Express 2008 R2で同じクエリを実行し、結果は2MBytes /秒(私の行制限)の転送速度で返されました。

サーバーマシンはWindows Server 2008 R2 x64、クアッドコア、4GB RAM、MySQLバージョンは5.6.2 m5 64ビットです。私は通信プロトコルでの競合を無効にしようとしましたが、結果は同じです。

これはなぜ起こっているのですか?

- テオドール

+0

通常、全体のクエリ処理には、個々の手順peアクセス許可、ロック設定のチェック、結果の並べ替えなどを行い、データをクライアントに送り返します。このデータ転送についてのみ話していることは確かですか、クエリに別のボトルネックがある可能性がありますか? – Bjoern

+1

これはおそらく、リモート...最大スループットに達したためです。この結果セットはどれくらい大きいですか? – Dor

+0

私には唯一、設定ファイルmy.iniのどれくらいのメモリをMySQLで利用できるようにしたのかということだけです。 MySQLがディスク上にたくさんのものをキャッシュしなければならない場合は、転送速度が影響を受ける可能性があります。 – Jaydee

答えて

0

リンゴとオレンジを比較している可能性があります。

私はMySQLサーバー上でSELECT *を実行し、ネットワークの追加の制約なしに、サーバー上のデータをローカルで取得するためにどのようなデータレートを取得するかを確認します。

これが遅い場合でも、ネットワークの障害ではありません。

MySQLセットアッププログラムが実行されると、MySQLのセットアップ担当者に、MySQLがハードウェア上でどのような役割を果たすかを尋ねます(開発サーバー、共有サーバー、専用)。

これらのすべての違いは、MySQLがサーバー上で消費するメモリ量です。

最も遅い設定は開発(最小メモリを使用)で、最も高速な設定は専用(大量のメモリを使用する)です。 my.iniファイルを使って、MySQLがどれくらいのメモリを割り当てるかを変更したり、「my.iniメモリ」を使って詳細な手順を知ることができます。

MySQLが使用している(またはそうでない場合がある)メモリは、パフォーマンスに大きな違いをもたらします。

まず、MySQLサーバ上でローカルにデータを取得する速度を確認します。速度が遅い場合、ネットワークは問題ではありません.MySQLのメモリ使用量を確認してください。もちろん、高速であれば、ネットワークやデータベースミドルウェア(ODBC?)やツールで表示されるデータのいずれかが遅いです...

もう1つ - SELECT * TWICEを試​​してみてください...なぜですか? 2回目の結果(メモリにもよりますが)はキャッシュされるべきです... 2回目は速くする必要があります...

さらに、myを変更するときには、MySQLを再起動することを忘れないでください。 iniファイルを作成します(変更する前にバックアップを作成してください)。

関連する問題