MySQLデータベースのタイムアウト設定を構成する方法の例

MySQLデータベースのタイムアウト設定を構成する方法の例

序文

最近、JD.comのダブル11ショッピングフェスティバルの準備をしていました。MySQLのタイムアウト設定を構成する際に、設定できる場所がたくさんあることに気付きました。これほど多くのタイムアウト設定はどのような効果をもたらすのでしょうか。また、設定によってどのような影響がもたらされるのでしょうか。本日の記事で分析してみましょう。

1. JDBCタイムアウト設定

connectTimeout: MySQL データベースとのソケット接続を確立するまでの待機のタイムアウトを示します。デフォルト値は 0 で、タイムアウトが設定されていないことを意味します。単位はミリ秒です。30000 が推奨されます。

socketTimeout: クライアントと MySQL データベースがソケットを確立した後、ソケットの読み取りと書き込みの待機タイムアウトを示します。Linux システムのデフォルトの socketTimeout は 30 分で、変更せずにそのままにしておくことができます。

2. 接続プールのタイムアウト設定

maxWait: データベース接続プールに利用可能な接続がない場合の待機時間を示します。デフォルト値は 0 で、これは無限の待機を意味します。単位はミリ秒です。60000 が推奨されます。

3. MyBatisクエリのタイムアウト

defaultStatementTimeout: MyBatis 構成ファイル内のデフォルトのクエリ タイムアウトを秒単位で示します。設定されていない場合は、待機時間はありません。

一部の SQL ステートメントを defaultStatementTimeout より長く実行する必要がある場合は、Mapper ファイルで別の SQL ステートメントのタイムアウトを設定できます。

4. トランザクションタイムアウト

トランザクション タイムアウトは、トランザクション実行のタイムアウトを制御するために使用されます。実行時間は、トランザクション内のすべてのコード実行の合計 (秒単位) です。

要約する

上位レベルのタイムアウトは下位レベルのタイムアウトに依存します。下位レベルのタイムアウトが正しい場合にのみ、上位レベルのタイムアウトが正常であることが保証されます。たとえば、ソケット タイムアウトが失敗すると、高レベルのステートメント タイムアウトとトランザクション タイムアウトの両方が無効になります。

1. トランザクションタイムアウト

Spring が提供するトランザクション タイムアウト設定は非常にシンプルです。各トランザクションの開始時間と消費時間を記録します。特定のイベントが発生すると、消費時間がチェックされます。タイムアウト値を超えると、例外がスローされます。

トランザクションに 5 つのステートメントが含まれ、各ステートメントの実行時間が 200 ミリ秒、その他のビジネス ロジックの実行時間が 100 ミリ秒であると仮定すると、トランザクション タイムアウトは少なくとも 1,100 ミリ秒 (200 * 5 + 100) に設定する必要があります。

2. ステートメントタイムアウト

ステートメント タイムアウトは、ステートメントの実行時間を制限するために使用されます。タイムアウト値は、JDBC java.sql.Statement.setQueryTimeout(int timeout) API を呼び出すことによって設定されます。ただし、現在では開発者がコード内で直接設定することはほとんどなく、フレームワークを通じて設定することがほとんどです。

iBatis では、sql-map-config.xml の defaultStatementTimeout 属性を通じてステートメント タイムアウトのデフォルト値を設定できます。同時に、sqlmap の select、insert、update タグのタイムアウト属性を設定して、異なる SQL ステートメントのタイムアウトを個別に構成することもできます。

3. ソケットタイムアウト

データベースが突然停止したり、ネットワーク エラー (デバイス障害などによる) が発生した場合、JDBC ソケット タイムアウトは非常に重要です。 TCP/IP の構造上、ソケットにはネットワーク エラーを検出する方法がないため、アプリケーションはデータベース接続が切断されたことを積極的に検出できません。ソケット タイムアウトが設定されていない場合、アプリケーションはデータベースが結果を返すまで無期限に待機します。この接続はデッド接続と呼ばれます。

接続が切断されるのを防ぐには、ソケットにタイムアウト設定が必要です。ソケット タイムアウトは、JDBC を通じて設定できます。ソケット タイムアウトにより、ネットワーク エラーが発生したときにアプリケーションが無限に待機することがなくなり、サービス障害の時間が短縮されます。

ソケット タイムアウトを使用してステートメントの実行時間を制限することは推奨されません。したがって、ソケット タイムアウト値はステートメント タイムアウト値よりも高くする必要があります。そうしないと、ソケット タイムアウト値が先に有効になり、ステートメント タイムアウト値が意味をなさず、効果もなくなります。

これで、MySQL データベースのタイムアウト設定と構成に関するこの記事は終了です。MySQL データベースのタイムアウト設定と構成に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Docker環境でMySQLを実行し、Binlogを有効にしてマスタースレーブ同期を構成する方法
  • MySQL データベースのバックアップ設定 遅延バックアップ方式 (MySQL マスター スレーブ構成)
  • MySQLはパフォーマンスを最適化するためにインデックスを使用します
  • MySQLはステータスの表示と分析の説明を通じてデータベースのパフォーマンスを最適化します
  • MySQL データベースのパフォーマンス最適化の概要
  • GaussDB for MySQL パフォーマンス最適化の詳細な説明
  • mysql 構成接続パラメータ設定とパフォーマンスの最適化

<<:  CentOS6 アップグレード glibc 操作手順

>>:  自動検索提案機能のスタイルファイルを入力します: suggestion.css

推薦する

CSSをiPhoneのフルスクリーンに適応させる方法

1. メディアクエリ方式 /*iPhone X への適応*/ @media 画面のみ、(デバイス幅:...

Vue は Axios リクエスト フロントエンドのクロスドメイン問題をどのように解決するのか

目次序文1. クロスドメインの問題はなぜ発生するのでしょうか? 2. 解決策クロスオリジンリソース共...

Vue+element ui はアンカーの配置を実現します

この記事では、アンカー配置を実現するためのVue +要素UIの具体的なコードを例として紹介します。具...

jsはユーザーのページ操作を記憶するためにクッキーを使用します

序文開発プロセスでは、ブラウザレベルでユーザーが実行した操作を記憶するなど、同様の要件に遭遇すること...

MySQL における explain の役割の詳細な説明

1. MYSQLインデックスインデックス: MySQL がデータを効率的に取得するのに役立つデータ構...

MySQL 8.0.22 の最新バージョンのダウンロードとインストールの超詳細なチュートリアル (Windows 64 ビット)

目次序文1. 公式サイトからMySQL 8.0.22をダウンロードする2. 環境変数を設定する3. ...

データ型の判断における js typeof と instanceof の違いと、その開発と使用について

目次1. typeof演算子2. インスタンスオブ演算子3. typeof と instanceof...

MySQLデータベースを定期的に自動バックアップする方法

データは貴重なものであることは誰もが知っています。データをバックアップしなければ、データをそのまま放...

Vueタイマーの詳細な使い方

この記事では、参考までにタイマーを実装するためのVueの具体的なコードを紹介します。具体的な内容は次...

SQLはROW_NUMBER() OVER関数を使用してシーケンス番号を生成します。

構文: ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY...

使用したコマンドを表示するLinuxコマンドメソッドの概要

システムでは多くのコマンドが使用されていますが、使用したコマンドをどのように確認すればよいでしょうか...

WAMPにインストールするとMySQLが起動できるが、再起動後に起動できなくなる問題の解決方法

初めてwampをインストールした後、すべてのサービスが正常に使用できますが、再起動するとwampのア...

Linux の sudo 脆弱性により不正な特権アクセスが発生する可能性がある

Linux で新たに発見された sudo の脆弱性を悪用すると、特定のユーザーが root としてコ...

Docker データ ストレージ tmpfs マウントの詳細な説明

この記事を読む前に、ボリュームとバインドマウントの基本を理解しておいてください。詳細については、次の...

Nginx Rewriteモジュールを使用するいくつかのシナリオ

アプリケーションシナリオ1: ドメイン名ベースのリダイレクト会社の古いドメイン名は www.accp...