質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

解決済

2回答

4040閲覧

c#で外部のMySQLサーバに繋ぐとすごく遅い(名前解決以外の問題?)

sparc

総合スコア19

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

2クリップ

投稿2020/05/22 07:37

編集2020/05/22 09:30

お世話になります。

c#の自作プログラムから外部のMySQLサーバに接続したときのレスポンスの悪さに悩んでいます。
ローカルでは1秒未満で終わるものが、5~6秒かかります。

ネットで調べると、名前解決が出来ていないからだ。「-skip-name-resolve 」を設定しろ。
という記述は見つかるのですが、こちらを設定しても改善しません。むしろ、設定の有無で速度は変わりません。

つまり、名前解決で問題が発生するときの現象に近いのですが、

 ・上記オプションを設定しても変わないこと
・C#でのconnectionStringは、IPアドレスで指定している

ということで、名前解決の問題ではなさそうなのです。

■接続構成
WindowsPC(Win10)→AWS上のMySQL5.7

※AWSのメモリも疑ったので、512MB→1Gに増やしましたが変わりませんでした。

■クエリの内容
・データの数は30個ほど
・クエリはなんてことのないSELECT文と、ファイルのダウンロード(数十キロバイト)
上記クエリは、ローカルで実施すると、遅いものでも0.10s未満で終わるものです。

■その他
・MySQLのバージョン、my.cnfの内容はローカルと外部サーバで同じです。
・Winsharkなるものを入れましたが、さっぱり分からず(勉強不足)で今は保留にしています。

以上となりますが、AWSのメモリを増設してもダメ、my.cnfをチューニングしても何も変わらず、
という感じで、かれこれ3、4日悩んでも分からないでいます。

どなたか、詳しい方がいらっしゃいましたらアドバイスいただければ幸いです。
よろしくお願いいたします。

■追伸
・AWSは東京リージョンです。
・データベースコネクトだけのc#プログラムで速度を測ったところ、
ローカルが、100ms に対して、300~500msとやはり4、5倍でした。
クエリは10個ほど発行すると、やはり4、5秒遅延するのかな。といった感じです。
データベースの接続から遅いという感じです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

showkit

2020/05/22 07:46

接続なのか、取得なのか 切り分けはついていますか? データベースコネクト時点で時間がかかるのか、SELECT のレスポンスで時間がかかるのかによって、対処する内容も変わりますが・・・。
sparc

2020/05/22 07:57

showkit様 ありがとうございます。そうですね。すみません。切り分けはついていません。 何をチューニングしても変化がないので、根本的な何かなのかと思いまして。。。 時間掛かるかもしれませんが、少し切り分けてみます。
sparc

2020/05/22 08:14

showkit様 データベースコネクトだけの速度を測ったところ、 ローカルが、100ms に対して、300~500msとやはり4、5倍になっています。 プログラム全体で、クエリを10個ほど発行しているので、その積み重ねが4~5秒になっているものと 思われます。 何かお気づきの点がありましたら、アドバイスいただければ幸いです。
showkit

2020/05/22 08:22

ネットワーク自体がボトルネックかどうかを 単純に調べるならば、相手マシンが ping のレスポンスありであれば、ローカルのマシンが、Windows とのことなので、LAN 内のものと ping のレスポンス時間を比較すれば、ネットワーク自体の問題かどうかは すぐわかりますよ。
sparc

2020/05/22 08:48

pingはローカルは1ms、AWSは最大36msということで、約4倍でした。 やはり単なるネットワーク遅延なのですかね。。。
guest

回答2

0

自己解決

自己解決とします。
結論からするとネットワークのボトルネック。

自作プログラムにストップウォッチを入れて帯域を5Mbpsと100Mbpsで切り替えて測定。
9個のクエリ発行について

 ・5MMbps:平均4.5秒

 ・100Mbps:平均2.5秒

ローカルの約1秒と比べれば2.5秒でも遅いが、コネクションだけでもそれなりに時間が掛かるので、
ネットワークのボトルネックと諦めクローズします。

ご協力いただいた皆様、ありがとうございました。

投稿2020/05/26 04:23

sparc

総合スコア19

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

AWS上のMySQL5.7

こちらですが、どのリージョンを使用されてます?
もし、アメリカ(us-west-1等)だとすると、クエリ発行の度に海を越えることになりますので、レスポンスは遅くなります。

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-available-regions

以下、これが原因だと仮定して……。

スピード重視でしたら、東京(ap-northeast-1)か大阪(ap-northeast-3)リージョンにすると良いかと。
ただ、東京や大阪は、アメリカよりも値段が高いので、費用対効果で選ばれると良いのではないかと思います。

そのあたりを検討されている記事があったのでご紹介しておきます。
https://cloud-textbook.com/734/

投稿2020/05/22 09:24

nak

総合スコア696

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sparc

2020/05/22 09:28

nak様 ご親切にありがとうございます。 情報が少なく申し訳ありませんでしたが、東京でございまして。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問