
2 台のサーバーがあり、それぞれ別の場所にあります。1 台でアプリケーションをホストし、もう 1 台でデータベース サーバーをホストする必要があります。
アプリケーション サーバーからデータベース サーバーに ping を実行すると、平均で約 30 ミリ秒の応答が得られます。
私の質問は次のとおりです:
When I query the database from the app;
それは時間がかかるでしょうか
30 ms + database_server_query_run_time
または;
それは時間がかかるでしょうか
30 ms + database_server_query_run_time
+ 30ミリ秒
これを理解していただきたいです。
答え1
通常、これら 2 つのオプションよりも時間がかかります。
Ping はクライアントからサーバーまで、そしてまた戻ってくるまでの時間だけを測定します (rtt - 往復時間)
通常、データベースは TCP を使用するため、最初に SYN パケットを送信して TCP ハンドシェイクを開始する必要があります (簡単に言うと、15 ミリ秒* + CPU 時間)。次に、SYN/ACK を受信し (15 ミリ秒 + CPU 時間)、ACK と要求を返信します (少なくとも 15 ミリ秒 + CPU 時間)。次に、DB がクエリを処理する時間、データを取得する時間 (15 ミリ秒 + CPU)、ACK にもう少し時間がかかり、接続を閉じます。
もちろん、これにはデータベースへの認証 (ユーザー名/パスワード) は含まれません。また、暗号化 (SSL ハンドシェイク/DH など必要なもの) も含まれません。
*往復のルートが対称であると仮定した場合の往復時間の半分(到着に半分の時間、戻るのに半分の時間... ping 応答の CPU 処理時間は非常に短い)
答え2
ping 時間は往復です。考えてみれば、片道の時間をどのように測定できるでしょうか? つまり、30 ミリ秒とクエリ時間がかかります。
答え3
ping 時間はこれら 3 つすべてを合わせて表すため、アプリからデータベース サーバーまでの時間、データベース クエリの完了にかかった時間 (クエリの完了後に応答のタイムスタンプが作成される)、およびアプリ サーバーへの往復の転送にかかった時間が含まれます。
つまり、簡単に言うと、ping は、パケットが送信されてからその応答が往復して戻ってくるまでにかかったすべての往復時間です。
サービスの「ping」は通常、複数の ping の平均で測定されるため、ping は 1 つのパケットが送信されたことを意味する場合もあれば、すべての往復時間の平均値を指す場合もあります。したがって、最後の 100 パケットから ping の往復時間の値を取得し、それらの平均が 30 ミリ秒である場合、「ping は 30 ミリ秒です」と言うことになります。