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 の NULL 値に関する体験談と分析チュートリアルシリーズ

目次1. テストデータ2. ヌル値による不便3. スペース、空の値、null をどのように判断すれば...

MySQLの大文字と小文字の区別によって発生する問題の分析

MYSQLは大文字と小文字を区別します言葉を見れば信じられます。タイトルを見れば内容がわかります。 ...

この記事ではSQL CASE WHENの使い方を詳しく説明します

目次シンプルな CASEWHEN 関数:これは、CASEWHEN 条件式関数を使用するのと同じです。...

JavaプログラミングでJavaScriptの超実用的なテーブルプラグインを書く

目次効果ドキュメント最初のステップステップ2ステップ3ソースコード効果ドキュメント最初のステップta...

MySQL は information_schema オブジェクトの付与をバイパスし、ERROR 1044 (4200) エラーを報告します

この質問は、MySQL の権限に関する WeChat グループのネットユーザー間の議論です。次のよう...

MySQL の 6 つの一般的な制約タイプの詳細な説明

目次序文1.nullでない2. ユニーク3. デフォルト4.主キー自動増分主キー5. 外部キー6.チ...

Divの境界と透明度に関する設定

フレーム:スタイル=”border-style:solid;border-width:5px;bor...

MySQL Community Server 5.7.19 インストール ガイド (詳細)

MySQL公式サイトのzipファイルのダウンロードリンク https://dev.mysql.co...

MySQL 8.0 のメモリ関連パラメータの概要

理論的には、MySQL によって使用されるメモリ = グローバル共有メモリ + max_connec...

SSMプロジェクトは、ホットデプロイメント構成を実装するためにTomcatとMavenを使用してWARパッケージとしてデプロイされることが多い。

背景ご存知のとおり、JavaEE プロジェクトを開発した後は、そのプロジェクトをサーバーの Tomc...

MySQLバイナリログを介してデータベースデータを復元する方法の詳細な説明

ウェブサイト管理者は、さまざまな理由や操作により、ウェブサイトのデータを誤って削除したり、ウェブサイ...

Dockerコンテナのログ分析

コンテナログを表示するまず、 docker run -it --rm -d -p 80:80 ngi...

フレックスレイアウトにおけるflex-growとflex-shrinkの計算方法の詳しい説明

CSS のFlex(彈性布局)すると、Web ページのレイアウトを柔軟に制御できます。Flex Fl...

Ubuntu 18.04 に vsftpd をインストールするための実装コード

vsftpdをインストールする $ sudo apt-get install vsftpd -y v...

ドラッグアンドドロップによる並べ替えの詳細を実現する js

目次1. はじめに2. 実装3. HTML ドラッグ アンド ドロップ API を使用しないのはなぜ...