0

古い vb.net Web アプリを古いサーバーから新しいサーバーに移動する必要があるクライアントがいます。新しいサーバーでアプリを実行すると、サーバーが新しく、ハードウェアがはるかに優れているにもかかわらず、実行速度が非常に遅いことに気付きました。

アプリケーションのパフォーマンス分析を実行したところ、主要なホットスポットは OdbcDataAdapter.Fill() コマンドでした。

次に、MySQL で一般ログを有効にして、それを追跡しました。私が見つけたのは、アプリが大量のクエリを作成していたことです (たとえば、このプログラマーは検索結果ごとに複数のクエリを実行していました) が、どこかで抑制されているようです。

以下は、1 つのページ リクエストのログのほんの一部です。

130223 11:21:48   624 Connect   root@localhost on mydb
          624 Query SET NAMES utf8
          624 Query SET character_set_results = NULL
          624 Query SET SQL_AUTO_IS_NULL = 0
          624 Query set @@sql_select_limit=DEFAULT
          624 Query select count(*) from bg_doc_status where uploaded = 1 and candidateid='51233'
          624 Quit  
130223 11:21:49   625 Connect   root@localhost on mydb
          625 Query SET NAMES utf8
          625 Query SET character_set_results = NULL
          625 Query SET SQL_AUTO_IS_NULL = 0
          625 Query set @@sql_select_limit=DEFAULT
          625 Query select * from bg_doc_status where willfax=1 and candidateid='51233'
          625 Quit  
130223 11:21:50   626 Connect   root@localhost on mydb
          626 Query SET NAMES utf8
          626 Query SET character_set_results = NULL
          626 Query SET SQL_AUTO_IS_NULL = 0
          626 Query set @@sql_select_limit=DEFAULT
          626 Query Select distinct serviceid from bg_service_results where CandidateID='51233'
          626 Quit  
130223 11:21:51   627 Connect   root@localhost on mydb
          627 Query SET NAMES utf8
          627 Query SET character_set_results = NULL
          627 Query SET SQL_AUTO_IS_NULL = 0
          627 Query set @@sql_select_limit=DEFAULT
          627 Query Select count(*) from bg_candidates_selected_services where CandidateID='51233'
          627 Quit  

このプログラミングがどれほど悪いかについて話す必要はありません:)。この男は、1 つのクエリで多くのことを行っている可能性があります。それでも、MySql は 1 秒あたり最大 1 つのクエリを実行するようです!

ワークベンチの SQL エディターでこれらのクエリを実行すると、それぞれ「0.000 秒」かかります。CTRL + ENTER をできるだけ早く押すと、1 秒間に数回実行されることがログに記録されます。

この 1 秒あたり 1 クエリの制限の原因を知っている人はいますか? 開発と本番の両方で発生します。

32 ビットと 64 ビットの両方で、MySQL ODBC 5.2w ドライバーと MySQL ODBC 5.2a ドライバーの両方を試しました。

私は解決策を見つけました: odbc.open() は丸1秒かかっていたものです。どうやら、時間がかかっていたのは dns ルックアップ (localhost の場合!) でした。web.config の db サーバー アドレスを 127.0.0.1 に変更すると、修正されました。この人が同じ問題を見つけたようです。

4

1 に答える 1

2

私は解決策を見つけました: odbc.open() は丸1秒かかっていたものです。どうやら、時間がかかっていたのは dns ルックアップ (localhost の場合!) でした。web.config の db サーバー アドレスを 127.0.0.1 に変更すると、修正されました。この人が同じ問題を見つけたようです。

于 2013-02-23T17:57:51.113 に答える