Cloud SQL for PostgreSQL のよくある質問

概要

Cloud SQL とは
Cloud SQL は、クラウドでフルマネージドの SQL データベースを提供するサービスです。Cloud SQL では PostgreSQL、SQL Server、MySQL データベースを使用できます。
Cloud SQL を使用するとどのようなメリットがありますか?
Cloud SQL を使用すると、些末ではあっても必要であり時間がかかることが多いタスク(パッチの適用、アップデート、バックアップの管理、レプリケーションの構成など)を Google に任せることができ、ユーザーは優れたアプリケーションの開発に集中できます。さらに、標準のワイヤ プロトコルを使用しているため、アプリケーションやロケーションを問わずに接続できます。
Cloud SQL ではどのデータベース バージョンを使用できますか?アップデートはどのように管理されますか?

Cloud SQL for PostgreSQL は、PostgreSQL 9.6、10、11、12(デフォルト)、13 をサポートします。マイナーなバージョン更新はリリース後直ちにデプロイされ、ユーザー側で行う必要がある操作はありません。更新の詳細については、Cloud SQL インスタンスでのメンテナンスの概要をご覧ください。

インスタンスの現在のバージョンを確認するには、Google Cloud Console に移動し、インスタンス名をクリックして [インスタンスの詳細] ページを開きます。または、gcloud sql instances describe コマンドを使用することもできます。

Cloud SQL はすべてのデータベース機能をサポートしていますか?
Cloud SQL は PostgreSQL の一般的な機能のほとんどをサポートしています。標準 PostgreSQL と Cloud SQL が提供する機能とのすべての違いの一覧については、Cloud SQL と標準 PostgreSQL の機能の違いをご覧ください。
サイズや QPS に上限はありますか?
Cloud SQL インスタンスに対して 1 秒あたりのクエリ数(QPS)の制限はありません。接続数やサイズの上限と App Engine 固有の上限については、割り当てと上限をご覧ください。
Cloud SQL に変更があった場合、どのようにして通知を受け取ることができますか?
google-cloud-sql-announce フォーラムに登録し、そこに投稿された Cloud SQL に関するお知らせやニュースを受け取ることができます。
バグの報告、機能のリクエスト、質問がある場合はどうすればいいですか?
google-cloud-sql-discuss グループに対してバグの報告や機能のリクエストを行えます。質問は Stack Overflow で行うことができます。その他のサポート オプションについては、Cloud SQL のサポートのページをご覧ください。
トップへ戻る

スタートガイド

データが存在しない新しいインスタンスに使用ディスク領域が表示されるのはなぜですか?
Cloud SQL とデータベースはどちらも、インスタンスの作成時にシステム ファイル用とメタデータ用の領域を使用します。
トップへ戻る

データ ストレージとレプリケーション

データはどこに保存されますか?

PostgreSQL インスタンス: インスタンス データは、そのインスタンスが存在するリージョンに保存されます。デフォルトでは、Cloud SQL は、冗長性を確保するためにバックアップ データを 2 つのリージョンに保存します。1 つのリージョンは、インスタンスが存在するリージョンと同一のものになります。もう一方は別のリージョンになります。1 つの大陸に 2 つのリージョンがある場合、バックアップ データはどちらも同じ大陸に置かれます。オーストラリアにはリージョンが 1 つしかないため、シドニー リージョンのバックアップ データはアジアに保存されます。サンパウロ リージョンの場合、バックアップ データは米国のリージョンに保存されます。

ゾーンとは?

ゾーンは、リソースを実行できる、特定の地理的な場所にある独立したエンティティです。たとえば、us-central1-a という名前のゾーンは米国中部のロケーションを示します。

ゾーンの詳細については、Compute Engine のドキュメントのゾーンリソースをご覧ください。

ストレージにはどのような上限がありますか?
ストレージ上限については、割り当てと上限をご覧ください。
どのようにデータをレプリケーションしますか?

PostgreSQL のインスタンスは高可用性構成リードレプリカを提供します。

Cloud SQL のフェイルオーバーはどのように動作しますか?

フェイルオーバーの詳細については、高可用性構成の概要をご覧ください。

データは暗号化されますか?
Cloud SQL ユーザーのデータは、データベース テーブル、一時ファイル、バックアップに保存されるときに暗号化されます。外部接続は、SSL を使用するか、Cloud SQL Proxy を使用して暗号化できます。
保存されているデータの暗号化はどのように管理されますか?

データの暗号化には、256 ビットの Advanced Encryption Standard(AES-256)以上の暗号化方式と対称鍵が使用されます。つまり、データ保存時の暗号化とデータ使用時の復号に同じ鍵が使用されます。これらのデータ鍵はそれ自体が、安全なキーストアに保存されている鍵を使用して暗号化され、定期的に変更されます。

詳しくは、Google Cloud での保存時の暗号化をご覧ください。

転送中のデータの暗号化はどのように管理されますか?

すべての転送データは、Google が管理している物理的境界または Google のために管理されている物理的境界の外へ出るときに、1 つ以上のネットワーク レイヤで暗号化され認証されます。これらの物理的境界の内部で転送されるデータについては、認証は通常行われますが、暗号化はデフォルトでは行われない場合があります。そのため、ユーザーの判断で、脅威モデルに基づいて追加のセキュリティ対策を適用できます。たとえば、Cloud SQL へのゾーン内接続に対して SSL を構成できます。

詳しくは、Google Cloud での転送データの暗号化をご覧ください。

どのような種類のリードレプリカを作成できますか?

リードレプリカの詳細については(各タイプの用途など)、レプリケーションのオプションをご覧ください。

トップへ戻る

バックアップと復元

どのようにすればインスタンスを復元できますか?

バックアップに復元するには、Google Cloud Consolegcloud コマンドライン ツールを使用します。詳しくは、インスタンスを復元するをご覧ください。

バックアップにはどのくらいの費用がかかりますか?

バックアップはインスタンス ストレージの料金に基づいて課金されます。

インスタンス ストレージとインスタンスの料金については、料金をご覧ください。

7 日以上前の自動バックアップにアクセスできますか?

自動バックアップは毎日行われ、7 日間保持されます。7 日後に、最も古いバックアップが削除されます。自動バックアップは増分バックアップです。このバックアップには、前回のバックアップの作成後に変更されたデータのみが含まれます。最も古いバックアップはデータベースと同程度のサイズです。最も古いバックアップが削除されると、完全なバックアップを維持するため、その次に古いバックアップのサイズが増加します。

オンデマンド バックアップは手動で削除するまで削除されないことに注意してください。

リージョンの障害対策に対して、外部レプリケーションとクロスリージョン レプリケーションは、それぞれどのような場合に適していますか?
外部レプリケーション クロスリージョン レプリケーション
お客様による自己管理 Cloud SQL マネージド クロスリージョン レプリカ
GCP 以外のインスタンスと GCP インスタンスの間で複製可能 GCP Cloud SQL インスタンス間でのみ複製可能
GCP に対する移行を行うことで、ダウンタイムの最小化や、ハイブリッド / マルチクラウド データ保護を行う GCP リージョン間でデータを移行して、ダウンタイムを最小化する
メジャー バージョン間レプリケーションがサポートされている メジャー バージョン間レプリケーションはサポートされていない
トップへ戻る

インスタンスの管理

Cloud SQL インスタンスを再起動する原因となるアクションはどれですか?
Cloud SQL で次の操作を行うと、Cloud SQL インスタンスが再起動される場合があります。
  • 更新
  • 作成
  • レプリカのプロモート
  • メンテナンス
  • レプリカの再作成
  • フェイルオーバー
  • 再起動
  • バックアップからのインスタンスの復元
  • 既存のインスタンスでの高可用性の有効化(インスタンスへの更新)
  • 再起動が必要なデータベース フラグの追加
再起動時のインスタンスのシャットダウン時間は?をご覧ください。
再起動時のインスタンスのシャットダウン時間はどの程度ですか?

インスタンスが再起動されると、インスタンスの大部分は 1~2 分間シャットダウンされます。インスタンスがシャットダウンされる前に、すべての接続が終了し、現在の作業はディスクからフラッシュされます。負荷が大きいインスタンスの場合、このプロセスには時間がかかり、インスタンスが停止しているように見えることがあります。このような場合、インスタンスがシャットダウンして再起動するまで 1 時間ほどかかることがあります。

データベースを拡大または縮小することはできますか?

インスタンスに使用できるストレージの量はいつでもダウンタイムなしに増やすことができます。インスタンスのストレージのサイズを減らすことはできません。また、インスタンスの空き容量が残り少ないときに自動的にストレージ容量を増やすように構成することもできます。詳細については、こちらをご覧ください。

vCPU をアップグレードしてダウングレードできますか?

はい、インスタンスで使用する vCPU の数を変更できます。使用するコアの数は必要に応じて増減できます。通常、vCPU 数の変更には 5 分もかかりません。

Cloud SQL の管理には Google Cloud Console を使用する必要がありますか?
いいえ。コンソールを使用して実行できるすべての管理タスクは、Cloud SQL Admin API を使用してプログラムで行うことも、gcloud コマンドライン ツールを使用してスクリプト化することもできます。
一時ファイルによって使用されるスペースを再利用するにはどうすればよいですか?
SQL クエリで多数の一時テーブルが作成されると、一時ファイルが大きくなる可能性があります。一時テーブルによって使用されるスペースを再利用するには、データベースを再起動する必要があります。データベースを再起動して一時ファイルが増えても、プロビジョニングされるディスク スペースは減少しません。
特定のデータベースをインポートまたはエクスポートできますか?
はい。特定のデータベースのみをインポートまたはエクスポートできます。複数のデータベースを一度にインポートまたはエクスポートすることはできません。詳細については、データのインポートまたはデータのエクスポートをご覧ください。
CSV ファイルをインポートまたはエクスポートできますか?
CSV ファイルをインポートまたはエクスポートできます。詳細については、CSV ファイルの作成をご覧ください。
インスタンスのデータのインポートまたはエクスポートには Cloud Storage アカウントが必要ですか?
Cloud SQL は、Cloud Storage バケットを使用したデータベース(圧縮または非圧縮の SQL ダンプファイル)のインポートとエクスポートをサポートしています。Cloud Storage バケットを使用してインポートまたはエクスポートするには、Google Cloud アカウントを登録してバケットを作成するか、別のアカウントの Cloud Storage バケットにアクセスできる必要があります。詳細については、データのインポートまたはデータのエクスポートをご覧ください。
削除したインスタンスのインスタンス名を再使用できますか?
はい、ただし削除直後にはできません。インスタンス名は、最長で 1 週間は再使用できません。
cloudsqladmin データベース ユーザーとは何ですか?
すべての Cloud SQL インスタンスには cloudsqladmin というデータベース ユーザーが存在します。SHOW GRANTS FOR cloudsqladmin@localhost を実行したときにこのユーザーに気付くことがあります。一部のインスタンスでは、システム ユーザー テーブルにもこのユーザーが表示されます。このユーザー アカウントは、インスタンスのデータにアクセスする必要のある自動プロセス(インスタンスのバックアップや、インポートまたはエクスポートなど)によって使用されます。
Cloud SQL ではどの程度のトランザクション分離が可能ですか?

PostgreSQL インスタンス: Cloud SQL では Read committed トランザクション分離が可能です。特定のセッションに対してトランザクションの分離レベルを変更することはできますが、通常はデフォルト値の使用が推奨されます。詳細については、PostgreSQL ドキュメントでトランザクションの分離をご覧ください。

トップへ戻る

料金と課金

Cloud SQL を試すにはどうすればよいですか?
最小インスタンスは db-f1-micro です。このインスタンスを使用してサービスを試すことができます。共有コア インスタンスは SLA の対象外であるので注意してください。
プロジェクトではインスタンスをいくつ作成できますか?
インスタンスの制限については、割り当てと上限をご覧ください。
どれくらいのサイズのデータベース インスタンスが必要ですか?RAM はどれくらい必要ですか?
一般に、RAM と CPU が多い大きなインスタンスを選択すると、データベースのパフォーマンスが向上します。これにより、結合、ORDER BY、GROUP などを含む計算量の多い多数のクエリのパフォーマンスが向上します。ただし、単一の行が影響を受ける更新のパフォーマンスはそれほど変わりません。インスタンスのサイズと料金の詳細については、料金をご覧ください。
インスタンスの使用時間はどのようにして算出されますか?

インスタンスがアクティブになっている間、1 分単位で課金されます。

ストレージはどのようにして算出されますか?
ストレージは、インスタンスに対してプロビジョニングされたストレージの量を基に算出されます。バックアップ用のストレージは、バックアップが使用しているスペースの量によって課金されます。ストレージへの課金はインスタンスがアクティブであるかどうかにかかわらず発生します。
請求額はどこで確認できますか?
Google Cloud Console の [お支払い] タブに、前回の請求書の発行後に発生したインスタンスの課金額が表示されます。
インスタンスが上限サイズに達したらどうなりますか?

ストレージの自動増量を有効にしていない場合にインスタンスがプロビジョニングされたストレージ サイズに達したとき、またはインスタンスの設定上限に達した場合、それ以降のデータベースへの書き込みは、ユーザーがストレージ サイズを増やさない限り許可されません。ストレージ サイズを増やすためにインスタンスを再起動する必要はなく、ダウンタイムも発生しません。

インスタンスが停止しているのはなぜですか?
おそらく Google Cloud アカウントに関する問題が原因です。請求サポート リクエストを提出することで、課金のステータスを確認できます。請求に関する問題を解決してから数時間以内に、インスタンスは実行可能なステータスに戻ります。停止された MySQL インスタンスは 90 日後に削除されることに注意してください。
インスタンスが削除されたのはなぜですか?
90 日間停止されているインスタンスは削除されます。これは SUSPENDED 状態のインスタンスに適用されます。RUNNABLE 状態で停止しているインスタンスは削除されません。
Cloud SQL アカウントをキャンセルするにはどうすればよいですか?
プロジェクトで Cloud SQL を無効にするには、Google Cloud Console に移動し、プロジェクトを選択してから、[API] サービスを選択して API ダッシュボードを開きます。 Cloud SQL API を探し、その API の [無効にする] をクリックします。
課金を無効にするにはどうすればよいですか?
[課金と設定] ペインで、Google Cloud Console の [課金を無効にする] をクリックすると、課金を無効にできます。課金を無効にすると、Cloud SQL サービスも無効になります。課金を無効にする前に、Cloud SQL サービスを無効にしてもよいことを確認してください。

課金を無効にすると、課金サイクルの初日からキャンセルした時点までに発生した料金に関する最後の請求が届きます。

トップへ戻る

App Engine での Cloud SQL の使用

App Engine から PostgreSQL インスタンスに接続できますか?
環境と使用している言語によっては、App Engine アプリケーションから PostgreSQL インスタンスに接続できます。詳細については、App Engine スタンダード環境からの接続または App Engine フレキシブル環境からの接続をご覧ください。
米国の App Engine から EU の Cloud SQL インスタンス(またはその逆)にアクセスできますか?

PostgreSQL インスタンスに接続する場合、App Engine アプリケーションは同じリージョン内に存在していなくてもかまいません。ただし、Cloud SQL インスタンスと App Engine アプリケーションの距離が大きく離れていると、データベース接続のレイテンシが高くなります。

どの Google Cloud データベース サービスが適していますか?
これはアプリケーションの要件によって異なります。Google Cloud では、データの格納および取得のためのサービスが多数提供されています。詳しくは、ストレージ オプションをご覧ください。
App Engine 開発用サーバーを使用するためにローカルのデータベース サーバーをインストールする必要はありますか?
いいえ。開発用サーバーで実行するときは、App Engine から Cloud SQL とローカルにインストールされたデータベース サーバーのどちらを使用するかを構成できます。
インスタンスにアクセスするにはどの言語を使用する必要がありますか?
App Engine からインスタンスに接続する際に使用できる言語はいくつかあります。詳細については、App Engine スタンダード環境からの接続または App Engine フレキシブル環境からの接続をご覧ください。

App Engine を使用しない場合は、対応するコネクタまたは API が用意されている任意の言語を使用できます。

Django を Cloud SQL で使用できますか?
はい、Cloud SQL は Django に対応しています。Django スタートガイドをご覧ください。
Python クエリ文字列ではどのプレースホルダを使用できますか?
Python の場合、パラメータの置換に使用できるのは %s 形式のコードだけです。このため、次のステートメントは無効です。cursor.execute('INSERT INTO entries (guestAge) VALUES (%d)', (age))
接続を管理するにはどうすればよいですか?

データベース接続を効果的に管理することは、データベース アプリケーション開発の重要な側面です。効果的な接続管理には、接続プールや指数バックオフの使用が含まれます。これらの手法をさまざまな言語とフレームワークで使用する例については、データベース接続を管理するをご覧ください。

インスタンス接続上限の詳細については、割り当てと上限をご覧ください。

「無効な接続 ID」というメッセージの SQLException の意味は何ですか。
接続がサーバーでオープンではなくなり、クライアントで破棄されることを意味しています。このような接続はすでにクローズされているため、「close」を呼び出す必要はありません。
App Engine の外部からプログラムで Cloud SQL インスタンスにアクセスすることはできますか?
はい。サポートされている任意の言語を使用して、外部アプリケーションからプログラムで Cloud SQL インスタンスにアクセスできます。外部アプリケーションから接続するをご覧ください。
トップへ戻る