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

推薦する

Vue3 のウォッチの使用方法とベストプラクティスガイド

目次序文🌟 1. APIの紹介2. 複数のデータソースの監視3. リスニングアレイ4. 監視対象5....

MySQL の暗黙的な型変換によって発生するインデックス障害の解決策

目次質問再生暗黙的な変換要約する参照する質問仕事中、1 つの SQL クエリ ステートメントのみを実...

MySQLユーザーと権限管理の詳細な説明

この記事では、例を使用して MySQL ユーザーと権限の管理について説明します。ご参考までに、詳細は...

Nginx レイヤー 4 負荷分散構成ガイド

1. レイヤー4負荷分散の概要レイヤー 4 ロード バランシングとは何ですか?いわゆる 4 層負荷分...

JavaScript ESの新機能letとconstキーワードに基づく

目次1. letキーワード1.1 基本的な使い方1.2 変動昇進はない1.3 一時的なデッドゾーン1...

EChartsマルチチャート連携機能の実装プロセス

表示するデータが多い場合、1 つのチャートに表示しても効果はよくありません。このとき、2 つのチャー...

vue3 における vuex と pinia の落とし穴

目次導入インストールと使用方法文章の相違点と類似点の簡単な比較VuexとPiniaの長所と短所Pin...

波効果を作成するための CSS のトリック

純粋な CSS を使用して波の効果を実現することは、常に非常に困難でした。 波形曲線を実現するにはベ...

シンプルなウェブ計算機を実装するJavaScript

背景私は新しいプロジェクト チームに配属されたので、プロジェクトでは js を使用する必要があります...

Centos 7 システムの Tomcat サーバーの詳細な分析

目次1. tomcatの起源1. Tomcat アプリケーションのシナリオ2. Tomcatに必要な...

Vue ユニットテストに推奨されるプラグインと使用例

目次フレーム最高レベルのエラー報告活発なコミュニティとチーム冗談モカ推奨プラグインVue テストライ...

JSON.stringify のさまざまな用途のまとめ

序文json を使用したことがある人なら、オブジェクトを文字列化してからバックエンドに送信するのが一...

MySQLの認証コマンドgrantの使い方

この記事の例は MySQL 5.0 以降で実行されます。ユーザー権限を付与するための MySQL コ...

nginx.conf ファイルの構文強調表示とフォーマット設定には nginx.vim ツールを使用します。

私はtengineを使用しています。インストールディレクトリは/usr/local/tengineで...

HTML ファイルにフラッシュ ビデオ形式 (flv、swf) ファイルを埋め込む方法

Flash ファイル形式: .FLV および .SWFフラッシュ ビデオ形式には、.flv と .s...