1

私はライブサーバーと開発サーバーを持っており、ライブサーバーの方が強力で、どちらも同等の負荷を実行しているにもかかわらず、ライブ (開発サーバーではない) サーバーでのクエリの実行速度が 10 倍遅いことがわかりましたライブサーバーから開発サーバーにバックアップをロードするため、データベース構造の問題ではありません。

どこで不一致を探すことができるかについて、誰かアイデアがありますか? それはMySQLの設定でしょうか?どこから探し始めるべきですか?

ライブサーバー:

mysql> SELECT count(`Transaction`.`id`) as count, sum(`Transaction`.`amount`) as sum, sum(Transaction.citiq_margin+rounding + Transaction.citiq_margin_vat) as Revenue FROM `transactions` AS `Transaction ` LEFT JOIN `meters` AS `Meter` ON (`Transaction`.`meter_id` = `Meter`.`id`) LEFT JOIN `units` AS `Unit` ON (`Meter`.`unit_id` = `Unit` .`id`) WHERE (NOT (`Unit`.`Building_id` IN ('1', '85')) AND NOT (`Transaction`.`state` >= 90)) AND DAY(`Transaction`.` created`) = DAY(NOW()) AND YEAR(`Transaction`.`created`) = YEAR(NOW()) AND (MONTH(`Transaction`.`created`)) = MONTH(NOW());
+------+---------+---------+
| | カウント | 合計 | 収益 |
+------+---------+---------+
| | 413 | 3638550 | 409210 |
+------+---------+---------+
セットで 1 行 (2.62 秒)

[root@mises ~]# アップタイム
 17:11:57 アップ 55 日、1 分、1 ユーザー、負荷平均: 0.45、0.56、0.60

開発サーバー (バックアップからのわずかな時間の遅延のため、結果の数は異なります):

mysql> SELECT count(`Transaction`.`id`) as count, sum(`Transaction`.`amount`) as sum, sum(Transaction.citiq_margin+rounding + Transaction.citiq_margin_vat) as Revenue FROM `transactions` AS `Transaction ` LEFT JOIN `meters` AS `Meter` ON (`Transaction`.`meter_id` = `Meter`.`id`) LEFT JOIN `units` AS `Unit` ON (`Meter`.`unit_id` = `Unit` .`id`) WHERE (NOT (`Unit`.`Building_id` IN ('1', '85')) AND NOT (`Transaction`.`state` >= 90)) AND DAY(`Transaction`.` created`) = DAY(NOW()) AND YEAR(`Transaction`.`created`) = YEAR(NOW()) AND (MONTH(`Transaction`.`created`)) = MONTH(NOW());
+------+---------+---------+
| | カウント | 合計 | 収益 |
+------+---------+---------+
| | 357 | 3005550 | 338306 |
+------+---------+---------+
セットで 1 行 (0.22 秒)

[www@smith test] $ アップタイム
 18:11:53 アップ 12 日間、1:57、4 ユーザー、負荷平均: 0.91、0.75、0.62

ライブ サーバー (Xeon クアッドコア x 2):

プロセッサ : 7
vendor_id : 純正インテル
CPUファミリー:6
モデル : 44
モデル名 : Intel(R) Xeon(R) CPU E5620 @ 2.40GHz
ステップ: 2
CPU メガヘルツ: 2395.000
キャッシュサイズ:12288KB
物理 ID : 0
兄弟 : 8
コア ID: 10
CPU コア: 4

開発サーバー (1 x クアッドコア)

プロセッサ : 3
vendor_id : 純正インテル
CPUファミリー:6
モデル : 23
モデル名 : Intel(R) Core(TM)2 Quad CPU Q8300 @ 2.50GHz
ステップ: 10
マイクロコード: 0xa07
CPU MHz : 1998.000
キャッシュサイズ:2048KB
物理 ID : 0
兄弟 : 4
コア ID: 3
CPU コア: 4

ライブサーバー:

  1. CentOS 5.7
  2. MySQL バージョン 5.0.95

開発サーバー:

  1. ArchLinux
  2. MySQL バージョン 5.5.25a
4

2 に答える 2

1

明らかに最初に確認することは、MySql 構成ファイルで、key_buffer、sort_buffer などのクエリに適切な量のメモリを使用していることを確認することです。ブログ全体を持っている私よりはるかに賢い人がいます。 MySql の設定専用です。

クエリの前に「explain」を追加して、何が最も時間がかかっているかを確認することもできます...しかし、それは後で一般的に使用するためのものかもしれません.

実際には、「ライブ」サーバーにはキャッシュ機能と、これらのクエリを実行するための 2 倍のコア数があり、サーバー間のクエリ時間の違いを説明するのに十分な馬力とメモリを備えている可能性があります。

于 2012-08-01T15:32:06.177 に答える
0

そこで、Centos、1 CPU、512MBのメモリを実行している仮想マシンで同じデータベースとクエリを実行しました。0.3秒でそのクエリに対する答えが得られます。システム負荷は0.4です:/

唯一の本当の違いは、そのサーバーでMysql5.5を実行していることです。そして、私の場合、Mysql5.0からMysql5.5へのパフォーマンスが実際に10倍向上しているようです。

ライブサーバーをMysql5.0からMysql5.5に移行して初めて確実にわかります。移行したら、結果を確認します。

于 2012-08-02T12:44:33.380 に答える