MySQL と接続関連のタイムアウトの詳細な概要

MySQL と接続関連のタイムアウトの詳細な概要

MySQL と接続関連のタイムアウト

序文:

今日、同僚から、データ量が多いときに MySQL データベースをクエリすると、セッションが常に切断されるのはなぜかと尋ねられました。最初は MySQL 接続タイムアウトの問題だと思いましたが、ネットワークの不安定さが原因であることが判明しました。

以下は接続に関連するタイムアウトの概要です

スレーブネットタイムアウト

スレーブが接続が切断されたと判断し、読み取りを中止して再接続を試行するまでに、マスターからのさらなるデータを待機する秒数。最初の再試行はタイムアウト直後に行われます。再試行の間隔は、CHANGE MASTER TO ステートメントの MASTER_CONNECT_RETRY オプションによって制御され、再接続試行の回数は --master-retry-count オプションによって制限されます。デフォルトは 3600 秒 (1 時間) です。
スレーブはマスターとの接続に問題があると判断した場合、N 秒待機してから切断し、マスターに再接続します。

ネット読み取りタイムアウト:

読み取りを中止する前に接続からさらにデータを待つ秒数。サーバーがクライアントから読み取りを行っている場合、net_read_timeoutは中止するタイミングを制御するタイムアウト値です。
読み取りを終了する前に接続からのデータを待機する秒数。net_read_timeout は、クライアントからデータを読み取っているときにサーバーがタイムアウトするタイミングを制御します。

ネット書き込みタイムアウト:

書き込みを中止する前に、ブロックが接続に書き込まれるのを待機する秒数。サーバーがクライアントに書き込んでいる場合、net_write_timeout は中止するタイミングを制御するタイムアウト値です。
書き込みを終了する前に接続にブロックを書き込むのを待機する秒数。サービスがクライアントにデータを書き込んでいるときに、net_write_timeout がタイムアウトするタイミングを制御します。

待機タイムアウト

サーバーが非対話型接続を閉じる前にアクティビティを待機する秒数。
対話のない接続がサーバーによって閉じられるまでにかかる時間。

インタラクティブタイムアウト:

サーバーが対話型接続を閉じる前にその接続でのアクティビティを待機する秒数。
対話のない接続がサーバーによって閉じられるまでにかかる時間。

接続タイムアウト

mysqld サーバーが接続パケットを待機する秒数。この秒数が経過すると、Bad ハンドシェイクで応答します。デフォルト値は 10 秒です。

接続応答を待つ時間

connect_timeout:接続取得フェーズ(認証)中に有効になります

interactive_timeout と wait_timeout: 接続アイドルフェーズ (スリープ) 中に動作します。
net_read_timeout および net_write_timeout: ビジー接続フェーズ (クエリ) 中に有効になります。

MySQL 接続の取得は、複数のハンドシェイクの結果です。ユーザー名とパスワードの一致検証に加えて、IP->HOST->DNS->IP 検証も行われます。どのステップでも、ネットワークの問題によりスレッドがブロックされる可能性があります。スレッドが不必要な検証待機で浪費されるのを防ぐため、connect_timeout を超える接続要求は拒否されます。

ネットワークに問題がない場合でも、クライアントが常に接続を占有できるようにすることはできません。 MySQL は、wait_timeout (または client_interactive フラグに応じて interactive_timeout) より長い間スリープ状態のままになっているクライアントを積極的に切断します。

接続がスリープ状態でない場合でも、つまりクライアントがデータの計算や保存でビジー状態の場合でも、MySQL は条件付きで待機することを選択します。データ パケットの配布プロセス中に、クライアントが応答する時間がない場合があります (データ パケットの送信、受信、または処理が遅すぎる)。接続が無限に待機して無駄にならないようにするために、MySQL は条件付きで接続を積極的に切断することも選択します (net_read_timeout および net_write_timeout)。

参照:

http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html

上記は、MySQL と接続関連のタイムアウトの詳細な概要です。ご質問がある場合は、メッセージを残すか、コミュニティで議論してください。お読みいただきありがとうございます。お役に立てれば幸いです。このサイトをサポートしていただき、ありがとうございます。

以下もご興味があるかもしれません:
  • MySQL における interactive_timeout と wait_timeout の違い
  • C3P0 接続プール + MySQL 構成と wait_timeout 問題の解決
  • MySQLのslave_net_timeoutパラメータによって解決されたクラスタの問題

<<:  React で Antd の Form コンポーネントを使用してフォーム機能を実装する方法

>>:  Tomcatのデフォルトプログラム公開パスの使用と変更についての説明

推薦する

MySQLサブクエリでorder byが効かない問題の解決方法

偶然にも、SQL ステートメントを異なる MySQL インスタンスで実行すると、異なる結果が生成され...

MySQL トランザクションの概念と使用法の詳細な説明

目次情事の概念取引の状態取引の役割取引の特徴トランザクション構文トランザクション対応ストレージエンジ...

Alibaba Cloud OSS アクセス権設定(RAM 権限制御)実装

シナリオmyBuket の static/material/ ディレクトリなど、Alibaba Cl...

MySQL の中国語文字化け問題の解決方法

1. LinuxのMySQLで中国語の文字化けが発生する。以下の操作を実行する。 vi /etc/m...

動的および静的分離を実現する nginx のサンプルコード

1. nginxの動的と静的の分離の簡単な設定web1は静的サーバー、web2は動的サーバー、nod...

LinuxでのDockerのインストールチュートリアル

Docker パッケージは、デフォルトの CentOS-Extras リポジトリにすでに含まれていま...

HttpとHttpsの両方をサポートするNginxの詳細な設定

最近の Web サイトでは Https をサポートすることがほぼ標準機能となっており、Nginx は...

MySQL ストアド プロシージャで case ステートメントを使用する詳細な例

この記事では、例を使用して、MySQL ストアド プロシージャでの case ステートメントの使用方...

ネイティブ js を使用してライブ バレット スクリーンのスクロール効果をシミュレートします。

目次1. 基本原則2. 特定のコード要約する1. 基本原則まず、生放送エリアを10の部分に分割し(個...

MySQLからMariaDBへのスムーズな移行のための詳細な手順

1. MariaDB と MySQL の紹介1. MariaDB の紹介MariaDB は、MySQ...

あまり多くのコードを書かずに、ハイパーリンクを使ってシンプルで美しいカスタムチェックボックスを実装できます。

今日ふと、HTML でチェックボックスのスタイルを変更できる範囲が限られていることと、チェックボック...

Reactはルーティングを使用してログインインターフェースにリダイレクトします

前回の記事では、webpack と react 環境を設定した後、ログイン インターフェースとその後...

Linux で MySQL 8.0 バージョンをアンインストールする方法

1. MySQLをシャットダウンする [root@localhost /]# サービスmysqldを...

Docker Compose で利用可能な環境変数の詳細な説明

Compose のいくつかの部分は、何らかの方法で環境変数を扱います。このチュートリアルは、必要な情...

HTML タグ マーキーはさまざまなスクロール効果を実現します (JS 制御なし)

ページの自動スクロール効果は JavaScript で実現できますが、今日偶然、JS 制御なしでさま...