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

推薦する

docker を使用して複数のネットワーク インターフェースを持つコンテナーを起動する方法の例

コンテナにネットワークインターフェースを追加する1 デフォルトのネットワークモードでコンテナを実行す...

Vueコンポーネント通信方法事例まとめ

目次1. 親コンポーネントが子コンポーネントに値を渡す(props) 2. サブコンポーネントは親コ...

h5入力ボックスプロンプト+通常のテキストボックスプロンプトを実装する方法

XML/HTML コードコンテンツをクリップボードにコピー<入力 id = "ユーザ...

Tomcat メモリ オーバーフロー問題の解決経験

少し前に、製品バージョンをテスト用にテスターに​​提出したのですが、テスト結果はまったく予想外のもの...

サブメニューをクリックする効果を実現するJavaScript

この記事では、クリック時にサブメニューを表示するためのJavaScriptの具体的なコードを参考まで...

Webデザインチュートリアル(2):模倣と盗作について

<br />前回の記事では、Webデザインの手順と方法を紹介しました。詳細については、前...

CSS 垂直センタリングの代替実装コードの詳細な説明(非従来型)

序文ご存知のとおり、「CSS で要素を垂直方向に中央揃えするにはどうすればよいか」という質問は、すで...

JavaScript ベースのシンプルなカルーセルの実装

この記事では、シンプルなカルーセルを実装するためのJavaScriptの具体的なコードを参考までに紹...

tinyMCEの使い方と体験の詳細な説明

tinyMCE の使用方法の詳細な説明初期化TinyMCE を初期化するときは、ページの HEAD ...

IE6、IE7、IE8 で CSS3 の丸い角と影のスタイルをサポートする

CSS3 の角丸や影の効果を使ったページを作りたいのですが、IE ブラウザでは対応していません。こ...

MySQL の無効な左結合の問題を解決する方法とその使用上の注意

MySQLの左結合が無効であり、その使用方法今日SQLを書いていたとき、左結合を使用すると左のテーブ...

MySQL データベースの最適化: テーブルとデータベースのシャーディング操作の詳細な説明

この記事では、例を使用して、MySQL データベースの最適化のためのテーブルおよびデータベース シャ...

MySQL インデックスの原理と使用例の分析

この記事では、例を使用して MySQL インデックスの原理と使用方法を説明します。ご参考までに、詳細...

ビジュアルデザインとインタラクションデザインについて

<br />製品設計プロセス全体において、ビジュアルデザインとインタラクションデザインの...

HTML テーブル マークアップ チュートリアル (2): テーブル境界属性 BORDER

デフォルトでは、テーブルの境界線は 0 ですが、テーブルの境界線を設定できます。基本的な構文<...