このページでは、Cloud SQL データベース接続を効果的に使用するアプリケーションの作成に関するベスト プラクティスと言語に固有のコードサンプルについて説明します。
これらのサンプルは、GitHub で入手できる完全なウェブ アプリケーションからの抜粋です。詳細
Cloud SQL に接続されたサンプル ウェブ アプリケーションを実行する手順については、ご使用の環境に該当するリンクをクリックしてください。
- ローカル コンピュータから接続するためのクイックスタート
- Compute Engine から接続するためのクイックスタート
- Cloud Run から接続するためのクイックスタート
- Cloud Run 関数から接続するためのクイックスタート
- Google Kubernetes Engine から接続するためのクイックスタート
接続プール
接続プールは、接続レイテンシとパフォーマンスを向上させるために共有され、再利用されるデータベース接続のキャッシュです。アプリケーションでデータベース接続が必要な場合は、プールから一時的に 1 つを借ります。アプリケーションでの接続が終了すると、接続がプールに戻されます。アプリケーションで次にデータベース接続が必要とされるときに再利用できます。
TCP による接続
ウェブ アプリケーションのコンテキストでのこのスニペットの使用については、GitHub の README をご覧ください。
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
注:
- CLOUD_SQL_CONNECTION_NAME は <MY-PROJECT>:<INSTANCE-REGION>:<INSTANCE-NAME> のように指定する必要があります。
- 引数 ipTypes=PRIVATE を使用すると、SocketFactory はインスタンスに関連付けられたプライベート IP を使用して接続するようになります。
- pom.xml ファイルの JDBC ソケット ファクトリ バージョン要件については、こちらをご覧ください。
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
ウェブ アプリケーションのコンテキストでのこのスニペットの使用については、GitHub の README をご覧ください。
Unix ソケットによる接続
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
このスニペットをウェブ アプリケーションのコンテキストで表示するには、GitHub の README をご覧ください。
ウェブ アプリケーションのコンテキストでのこのスニペットの使用については、GitHub の README をご覧ください。
接続の開閉
接続プールを使用する場合は、使用後に接続が必ずプールに返されるように、接続の開閉を適切に行う必要があります。返されなかった接続(「リーク」した接続)は再利用されないため、リソースが無駄に消費され、アプリケーションのパフォーマンスのボトルネックになることがあります。
接続数
すべてのデータベース接続で、クライアント側とサーバー側のリソースが使用されます。さらに、Cloud SQL では、超えてはならない接続総数の制限が課されます。作成して使用する接続の数を少なくすると、オーバーヘッドが減り、接続上限を超えずに済みます。
現在、PDO には接続上限を構成する機能はありません。
指数バックオフ
アプリケーションでデータベースに接続しようとしたものの、成功しない場合、データベースが一時的に使用できなくなる可能性があります。この場合、繰り返し接続リクエストを送信するとリソースが浪費されます。データベースに再びアクセスできるようにするには、追加の接続リクエストを送信する前に待機することをおすすめします。指数バックオフやその他の遅延メカニズムを使用すると、この目標を達成できます。
この再試行は、最初に接続するときや、プールから最初に接続を取得したときにのみ有効です。トランザクションの途中でエラーが発生した場合、アプリケーションはトランザクションの最初から再試行する必要があります。そのためプールの構成が適切でも、接続が失われるとアプリケーションにエラーが表示されることがあります。
現在、database/sql パッケージには、指数バックオフを構成する機能はありません。
現在、PDO には指数バックオフを構成する機能はありません。
接続タイムアウト
接続の試行は、さまざまな理由で失敗することがあります。ネットワーク通信が保証されることはなく、データベースが一時的に応答しなくなる可能性があります。アプリケーションが切断された接続や失敗した接続を適切に処理するようにします。
現在、database/sql パッケージには、接続タイムアウトを構成する機能はありません。タイムアウトはドライバレベルで構成されます。
接続の存続期間
接続の存続期間を制限することで、放棄された接続が蓄積しないようにできます。接続プールを使用すると、接続の存続期間を制限できます。
現在、knex Node.js ライブラリは接続期間の制御機能を提供していません。
現在、ActiveRecord は接続期間の制御機能を提供していません。
現在、PDO は接続期間の制御機能を提供していません。
完全なアプリケーションの表示
完全なアプリケーションを表示するには、下のリンクをクリックしてください。
Python プログラミング言語用の完全なアプリケーションを表示します。
Java プログラミング言語用の完全なアプリケーションを表示します。
Node.js プログラミング言語用の完全なアプリケーションを表示します。
C# プログラミング言語用の完全なアプリケーションを表示します。
Go プログラミング言語用の完全なアプリケーションを表示します。
Ruby プログラミング言語用の完全なアプリケーションを表示します。
PHP プログラミング言語用の完全なアプリケーションを表示します。
次のステップ
- プライベート IP の詳細を確認する。
- App Engine と Cloud SQL の割り当てと上限について学習する。
- Cloud SQL の使用に関するベスト プラクティスについて確認する。
- 外部アプリケーションからの接続の詳細を確認する。