このトピックでは、PolarDB for MySQL に関するよくある質問への回答を提供します。
基本
PolarDB とは何ですか?
PolarDB は、クラウドネイティブのリレーショナルデータベースサービスです。PolarDB は、世界中の 10 を超えるリージョンのデータセンターにデプロイされています。PolarDB は、すぐに使用できるオンラインデータベースサービスを提供します。PolarDB は 3 つの独立したエンジンをサポートしています。これにより、PolarDB は MySQL および PostgreSQL と完全に互換性があり、Oracle 構文と高度に互換性があります。PolarDB クラスタは最大 200 TB のストレージ容量を提供します。詳細については、「PolarDB for MySQL Enterprise Edition とは何ですか?」をご参照ください。
PolarDB はなぜ従来のデータベースよりも優れているのですか?
従来のデータベースと比較して、PolarDB は数百テラバイトのデータを保存できます。また、高可用性、高信頼性、迅速なスケールアップとスケールダウン、ロックフリーバックアップなど、幅広い機能を提供します。詳細については、「メリット」「」「」をご参照ください。
PolarDB はいつリリースされましたか?いつ商用利用が可能になりましたか?
PolarDB は 2017 年 9 月にパブリックプレビューとしてリリースされ、2018 年 3 月に商用利用が可能になりました。
クラスタとノードとは何ですか?
PolarDB Cluster Edition は、マルチノードクラスタアーキテクチャを使用します。クラスタには、1 つのプライマリノードと複数の読み取り専用ノードがあります。PolarDB クラスタはゾーンをまたいでデプロイできますが、リージョンをまたいでデプロイすることはできません。PolarDB サービスは、クラスタレベルで管理および課金されます。詳細については、「用語」「」「」をご参照ください。
PolarDB はどのプログラミング言語をサポートしていますか?
PolarDB は、Java、Python、PHP、Golang、C、C++、.NET、Node.js などのプログラミング言語をサポートしています。ネイティブ MySQL と対話できるプログラミング言語は、PolarDB for MySQL と直接対話できます。詳細については、MySQL 公式 Web サイトをご覧ください。
PolarDB はどのストレージエンジンをサポートしていますか?
PolarDB for MySQL には 2 つのエディションがあります。使用可能なストレージエンジンはエディションによって異なります。
PolarDB for MySQL Cluster Edition は、すべてのテーブルに対して InnoDB ストレージエンジンのみを使用します。PolarDB for MySQL クラスタでテーブルを作成するときに、MyISAM、Memory、CSV などの InnoDB 以外のストレージエンジンを指定すると、クラスタはストレージエンジンを自動的に InnoDB に変更します。PolarDB for MySQL クラスタへの移行プロセスでは、PolarDB for MySQL は、InnoDB 以外のストレージエンジンを使用するテーブルも InnoDB に変更して、スムーズな移行を保証します。
PolarDB は分散データベースですか?
はい、PolarDB は、Parallel Raft コンセンサスプロトコルに基づく分散ストレージクラスタです。その計算エンジンは、異なるサーバーに分散された 1 ~ 16 の計算ノードで構成されます。クラスタは最大 200 TB のストレージ容量、最大 88 の CPU コア、710 GB のメモリを提供します。クラスタでは、ストレージと計算リソースのオンライン動的スケーリングが可能であり、スケーリングプロセス中に通常のビジネス運用に影響を与えません。
PolarDB を購入した後、シャーディングを実装するために PolarDB-X データベースミドルウェアを購入する必要がありますか?
はい。
PolarDB はテーブルパーティショニングをサポートしていますか?
はい。
PolarDB クラスタを購入した後、そのリージョンを変更できますか?
いいえ。
PolarDB にはデフォルトのパーティショニングメカニズムがありますか?
PolarDB は、ストレージレイヤーでパーティショニングを実装します。これはユーザーにとって透過的であり、感知できません。
シングルノードクラスタは、サービスの可用性とデータの信頼性をどのように保証しますか?
シングルノードクラスタは、特定の目的で単一の計算ノードを運用するように設計されています。シングルノードクラスタは、2 次レベルの計算スケジューリングや分散マルチレプリカストレージなどのテクノロジーを使用して、高いサービス可用性と高いデータ信頼性を保証します。
シングルノードの PolarDB クラスタはどのように購入しますか?
シングルノードクラスタは販売終了となりました。ただし、PolarDB クラスタを購入するときに読み取り専用ノードの数を 0 に設定することで、シングルノードクラスタを作成できます。
互換性
PolarDB for MySQL は MySQL Community Edition と互換性がありますか?
はい、PolarDB for MySQL は MySQL Community Edition と完全に互換性があります。
どのトランザクション分離レベルがサポートされていますか?
PolarDB for MySQL は、READ_UNCOMMITTED、READ_COMMITTED(デフォルト)、REPEATABLE_READ 分離レベルをサポートしており、SERIALIZABLE 分離レベルはサポートしていません。
PolarDB for MySQL の SHOW PROCESSLIST 文のクエリ結果は、MySQL Community Edition のクエリ結果と同じですか?
プライマリエンドポイントを使用して SHOW PROCESSLIST 文を実行する場合、クエリ結果は同じです。クラスタエンドポイントを使用して SHOW PROCESSLIST 文を実行する場合、クエリ結果は PolarDB for MySQL と MySQL Community Edition で異なります。PolarDB for MySQL の文のクエリ結果には、同じスレッド ID を持つ複数のレコードが見つかる場合があります。これらの各レコードは、PolarDB for MySQL クラスタ内のノードに対応しています。
PolarDB for MySQL のメタデータロック (MDL) メカニズムは、MySQL Community Edition のメカニズムと同じですか?
はい。PolarDB for MySQL の MDL ロックメカニズムは MySQL Community Edition のメカニズムと同じです。ただし、PolarDB for MySQL データベースノードのアーキテクチャは共有ストレージに基づいています。そのため、プライマリノードでデータ定義言語(DDL)操作が実行されると、読み取り専用ノードが DDL 操作の中間データにアクセスし、データの不整合が発生する可能性があります。この問題を回避するために、PolarDB for MySQL は REDO ログを使用して、DDL 操作に含まれる排他 MDL を読み取り専用ノードに同期します。これにより、DDL 操作中に読み取り専用ノードの他のユーザースレッドがテーブルデータにアクセスすることを防ぎます。特定のシナリオでは、これが DDL 操作をブロックする可能性があります。
SHOW PROCESSLIST
文を実行して、DDL 操作の状態を表示できます。DDL 操作がWait for syncing with replicas
状態の場合は、このようなブロッキングが発生しています。この問題の解決方法については、「DDL 文の実行ステータスと MDL ステータスを表示する」をご参照ください。PolarDB for MySQL のバイナリログフォーマットは、MySQL のネイティブバイナリログフォーマットと同じですか?
はい、PolarDB for MySQL のバイナリログフォーマットは、MySQL のネイティブバイナリログフォーマットと同じです。
PolarDB は performance_schema と sys スキーマをサポートしていますか?
はい。
PolarDB for MySQL は、MySQL Community Edition と同じテーブル統計収集および更新メカニズムを使用していますか?
はい、PolarDB for MySQL は MySQL Community Edition と同じテーブル統計収集および更新メカニズムを使用しています。プライマリノードでのテーブル統計の各更新は読み取り専用ノードに同期され、プライマリノードと読み取り専用ノード間で実行計画の一貫性が保たれます。また、読み取り専用ノードで
ANALYZE TABLE
文を実行して、ディスクから最新の統計を事前にロードすることもできます。PolarDB は拡張アーキテクチャ(XA)トランザクションをサポートしていますか?PolarDB は、ネイティブ MySQL システムと同じ方法で XA トランザクションをサポートしていますか?
はい、PolarDB はネイティブ MySQL システムと同じ方法で XA トランザクションをサポートしています。
PolarDB はフルテキストインデックスをサポートしていますか?
はい。
説明フルテキストインデックスを使用してデータをクエリすると、読み取り専用ノードでインデックスキャッシュが使用されます。インデックスキャッシュのため、インデックスに基づいて最新のデータを取得することはできません。プライマリエンドポイントを使用してフルテキストインデックスに基づいてデータを読み書きすることをお勧めします。これにより、最新のデータを取得できます。
Percona Toolkit はサポートされていますか?
はい、Percona Toolkit はサポートされています。ただし、オンライン DDL を使用することをお勧めします。
gh-ost はサポートされていますか?
はい、gh-ost はサポートされています。ただし、オンライン DDL を使用することをお勧めします。
課金
PolarDB クラスタの課金項目は何ですか?
課金項目には、ストレージ容量、計算ノード、データバックアップストレージ(無料枠あり)、SQL Explorer 機能(オプション)が含まれます。詳細については、「課金項目」「」「」をご参照ください。
課金対象のストレージ容量にはどのファイルが保存されますか?
課金対象のストレージ容量には、データベーステーブルファイル、インデックスファイル、UNDO ログファイル、REDO ログファイル、バイナリログファイル、スローログファイル、および少数のシステムファイルが保存されます。詳細については、「PolarDB for MySQL Enterprise Editionとは何ですか?」「」「」をご参照ください。
PolarDB のストレージプランはどのように使用しますか?
ストレージプランを使用して、サブスクリプションまたは従量課金クラスタのストレージ料金を相殺できます。たとえば、それぞれ 40 GB のストレージ容量を持つ 3 つのクラスタがあり、合計容量は 120 GB になります。3 つのクラスタに対して 100 GB のストレージプランを使用できます。その後、超過分の 20 GB のストレージに対して従量課金で課金されます。詳細については、「ストレージプランを購入する」「」「」をご参照ください。
クラスタに読み取り専用ノードを追加すると、どのように課金されますか?
読み取り専用ノードの価格は、プライマリノードの価格と同じです。詳細については、「計算ノードの料金」「」「」をご参照ください。
読み取り専用ノードを追加すると、ストレージ容量は 2 倍になりますか?
いいえ、読み取り専用ノードを追加してもストレージ容量は 2 倍になりません。PolarDB は、計算とストレージが分離されたアーキテクチャを使用します。購入した読み取り専用ノードは、計算リソースとして使用されます。そのため、ストレージ容量は増加しません。
ストレージにはサーバーレスモードが使用されます。そのため、クラスタを購入するときにストレージ容量を指定する必要はありません。データ量が増加すると、ストレージ容量は自動的にスケーリングされます。使用したストレージに対して課金されます。最大ストレージ容量は、クラスタの仕様によって異なります。最大ストレージ容量を増やす方法については、「クラスタの仕様を手動で変更する」「」「」をご参照ください。
従量課金クラスタの課金を停止するにはどうすればよいですか?
クラスタが不要になった場合は、クラスタを解放できます。詳細については、「クラスタを解放する」をご参照ください。クラスタを解放すると、クラスタの課金は停止します。
一時的なアップグレードプロセス中にクラスタの仕様を変更できますか?
一時的なアップグレードプロセス中(クラスタが実行中状態)は、クラスタの仕様を手動でアップグレードできますが、クラスタの仕様を手動でダウングレードしたり、クラスタの仕様の自動スケーリングを許可したり、読み取り専用ノードを追加または削除したりすることはできません。
PolarDB クラスタのパブリック帯域幅はどのくらいですか?パブリック帯域幅の料金を支払う必要がありますか?
PolarDB クラスタには、パブリック帯域幅の制限はありません。PolarDB クラスタのパブリック帯域幅は、使用する SLB サービスの帯域幅によって異なります。PolarDB クラスタのパブリック帯域幅の料金は発生しません。
サブスクリプションクラスタの請求書が毎日生成されるのはなぜですか?
PolarDB クラスタの課金項目には、主に計算ノード(プライマリノードと読み取り専用ノード)、ストレージ容量、無料枠を超えるデータバックアップストレージ、SQL Explorer(オプション)、GDN(オプション)が含まれます。詳細については、「課金項目」をご参照ください。サブスクリプション課金方法を使用する場合、クラスタを購入するときに計算ノードの料金を前払いする必要があります。前払いには、ストレージ容量、データバックアップストレージ、SQL Explorer の料金は含まれていません。ストレージ料金は、1 時間ごとの実際のストレージ使用量に基づいて生成されます。そのため、サブスクリプション課金方法を使用している場合でも、従量課金請求書が生成されます。
ApsaraDB RDS インスタンスを PolarDB クラスタに移行すると料金が発生しますか?
いいえ、ApsaraDB RDS インスタンスを PolarDB クラスタに移行しても料金は発生しません。ApsaraDB RDS インスタンスと PolarDB クラスタに対してのみ課金されます。
DELETE
文を実行して PolarDB 内のテーブルのデータを削除した後も、特定のテーブルで使用されているストレージ容量に対して課金されるのはなぜですか?DELETE
文は、テーブルに削除マーカーを追加するだけです。テーブル領域は解放されません。
クラスタアクセス(読み書き分離)
PolarDB で読み書き分離を実装するにはどうすればよいですか?
アプリケーションでクラスタエンドポイントを指定するだけで、クラスタエンドポイントに構成されている読み書きモードに基づいて読み書き分離を実装できます。詳細については、「PolarProxy を構成する」「」「」をご参照ください。
PolarDB クラスタではいくつの読み取り専用ノードがサポートされていますか?
PolarDB は、分散クラスタアーキテクチャを使用します。クラスタは、1 つのプライマリノードと最大 15 の読み取り専用ノードで構成されます。高可用性を確保するには、少なくとも 1 つの読み取り専用ノードが必要です。
読み取り専用ノード間で負荷が不均衡なのはなぜですか?
考えられる理由の 1 つは、読み取り専用ノードへの接続数が少ないことです。もう 1 つの考えられる理由は、読み取り専用ノードの 1 つが、使用しているカスタムクラスタエンドポイントに関連付けられていないことです。
プライマリノードの負荷が大きくなる、または小さくなる原因は何ですか?
プライマリノードの負荷が大きくなる原因は次のとおりです。1. プライマリエンドポイントを使用してアプリケーションをクラスタに接続している。2. プライマリノードが読み取りリクエストを受け入れている。3. トランザクションリクエストの数が多い。4. プライマリ/セカンダリレプリケーションの遅延が大きいため、リクエストがプライマリノードにルーティングされている。5. 読み取り専用ノードの例外により、読み取りリクエストがプライマリノードにルーティングされている。
プライマリノードの負荷が小さくなる原因は、「プライマリノードからの読み取りオフロード」機能が有効になっていることです。
クラスタのプライマリノードの負荷を軽減するにはどうすればよいですか?
次の方法を使用して、クラスタのプライマリノードの負荷を軽減できます。
クラスタエンドポイントを使用して PolarDB クラスタに接続できます。詳細については、「PolarProxy を構成する」「」「」をご参照ください。
多数のトランザクションがプライマリノードに大きな負荷をかけている場合は、コンソールでトランザクション分割機能を有効にできます。こうすることで、トランザクション内の一部のクエリが読み取り専用ノードにルーティングされます。詳細については、「トランザクション分割」「」「」をご参照ください。
レプリケーションの遅延が原因でリクエストがプライマリノードにルーティングされている場合は、整合性レベルを下げることができます。たとえば、結果整合性レベルを使用できます。詳細については、「整合性レベル」「」「」をご参照ください。
プライマリノードが読み取りリクエストを受け入れると、プライマリノードの負荷も大きくなる可能性があります。この場合、コンソールでプライマリノードが読み取りリクエストを受け入れる機能を無効にできます。これにより、プライマリノードにルーティングされる読み取りリクエストの数が減少します。詳細については、「プライマリノードが読み取りリクエストを受け入れる」をご参照ください。
新しく挿入されたデータをすぐに取得できないのはなぜですか?
この問題は、整合性レベルの設定が原因である可能性があります。PolarDB クラスタのクラスタエンドポイントは、次の整合性レベルをサポートしています。
結果整合性:この整合性レベルでは、同じセッション(接続)に基づくか異なるセッションに基づくかに関係なく、新しく挿入されたデータをすぐに取得できることは保証されません。
セッション整合性:この整合性レベルでは、同じセッションに基づいて新しく挿入されたデータをすぐに取得できます。
グローバル整合性:この整合性レベルでは、同じセッションまたは異なるセッションのいずれに基づいても、最新のデータをすぐに取得できます。
説明整合性レベルが高いと、プライマリノードの負荷が大きくなります。これは、プライマリノードのパフォーマンスを低下させます。整合性レベルを選択する際は注意してください。ほとんどのシナリオでは、セッション整合性レベルでサービスの可用性を確保できます。強力な整合性が必要な少数の SQL 文については、SQL 文に
/* FORCE_MASTER */
ヒントを追加して、整合性レベルの要件を満たすことができます。詳細については、「整合性レベル」「」「」をご参照ください。SQL 文をプライマリノードで強制的に実行するにはどうすればよいですか?
クラスタエンドポイントを使用する場合は、SQL 文の前に
/* FORCE_MASTER */
または/* FORCE_SLAVE */
を追加して、SQL 文のルーティング先を強制的に指定できます。詳細については、「ヒント」「」「」をご参照ください。/* FORCE_MASTER */
は、リクエストをプライマリノードに強制的にルーティングするために使用されます。この方法は、読み取りリクエストに強力な整合性が必要な少数のシナリオに適用されます。/* FORCE_SLAVE */
は、リクエストを読み取り専用ノードに強制的にルーティングするために使用されます。この方法は、特別な構文を読み取り専用ノードにルーティングして精度を確保する必要があるシナリオに適用されます。たとえば、ストアドプロシージャを呼び出し、複数文を使用する文は、デフォルトで読み取り専用ノードにルーティングされます。
説明ヒントにはルーティングの最優先順位が割り当てられており、整合性レベルやトランザクション分割による制限はありません。ヒントを使用する前に、ビジネスへの影響を評価してください。
ヒントには、/*FORCE_SLAVE*/ set enable_hashjoin = off; など、GUC パラメータを変更する文を含めることはできません。この種の文は、予期しないクエリ結果を引き起こす可能性があります。
異なるサービスに異なるエンドポイントを割り当てることはできますか?異なるエンドポイントを使用してサービスを分離することはできますか?
はい、複数のカスタムエンドポイントを作成し、それらを異なるサービスに割り当てることができます。基盤となるノードが異なる場合、カスタムクラスタエンドポイントを使用してサービスを分離でき、相互に影響を与えません。カスタムエンドポイントの作成方法については、「カスタムクラスタエンドポイントを作成する」「」「」をご参照ください。
複数の読み取り専用ノードが存在する場合、読み取り専用ノードの 1 つに対してシングルノードエンドポイントを個別に作成するにはどうすればよいですか?
シングルノードエンドポイントを作成できるのは、クラスタエンドポイントの「読み書きモード」パラメータが「読み取り専用」に設定されており、クラスタに 3 つ以上のノードがある場合のみです。詳細については、「クラスタエンドポイントを構成する」「」「」をご参照ください。
警告ただし、読み取り専用ノードにシングルノードエンドポイントを作成し、読み取り専用ノードに障害が発生した場合、シングルノードエンドポイントは最大 1 時間使用できなくなる可能性があります。本番環境ではシングルノードエンドポイントを作成しないことをお勧めします。
クラスタに作成できるシングルノードエンドポイントの最大数はいくつですか?
クラスタに 3 つのノードがある場合、読み取り専用ノードの 1 つに対してのみシングルノードエンドポイントを作成できます。クラスタに 4 つのノードがある場合、読み取り専用ノードの 2 つに対してシングルノードエンドポイントを作成できます(それぞれ 1 つ)。クラスタに 5 つ以上のノードがある場合も同様のルールが適用されます。
プライマリエンドポイントのみを使用しているときに、読み取り専用ノードに負荷がかかります。プライマリエンドポイントは読み書き分離をサポートしていますか?
いいえ、プライマリエンドポイントは読み書き分離をサポートしていません。プライマリエンドポイントは常にプライマリノードのみに接続されます。読み取り専用ノードでは、クエリ/秒(QPS)が少ない場合があります。これは正常なケースであり、プライマリエンドポイントとは無関係です。
管理とメンテナンス
フィールドとインデックスをオンラインで追加するにはどうすればよいですか?
MySQL のネイティブオンライン DDL、pt-osc、gh-ost などのツールを使用して、フィールドとインデックスをオンラインで追加できます。MySQL のネイティブオンライン DDL を使用することをお勧めします。
説明pt-osc を使用する場合は、
recursion-method
パラメータなど、プライマリノードと読み取り専用ノード間のデータ整合性をチェックするためのパラメータを使用しないでください。これは、pt-osc がバイナリログレプリケーションに基づいてプライマリノードと読み取り専用ノード間のデータ整合性をチェックするためです。ただし、PolarDB は物理レプリケーションを使用しており、バイナリログレプリケーションはサポートしていません。バルク挿入機能はサポートされていますか?
はい。
書き込み専用ノードにのみデータを書き込む場合、データをバルク挿入できますか?一度に挿入できる値の最大数はいくつですか?
はい、書き込み専用ノードにのみデータを書き込む場合、データをバルク挿入できます。一度に挿入できる値の最大数は、max_allowed_packet パラメータの値によって決まります。詳細については、「レプリケーションと max_allowed_packet」をご参照ください。
クラスタエンドポイントを使用してバルク挿入操作を実行できますか?
はい。
プライマリノードから読み取り専用ノードにデータをレプリケートするときに、レプリケーションの遅延が発生しますか?
はい、数ミリ秒のレプリケーションの遅延が発生します。
レプリケーションの遅延はいつ増加しますか?
レプリケーションの遅延は、次のシナリオで増加します。
プライマリノードが多数の書き込みリクエストを処理し、過剰な REDO ログを生成します。その結果、これらの REDO ログを読み取り専用ノードで適時に再生できません。
大きな負荷を処理するために、読み取り専用ノードが REDO ログの再生に使用される大量のリソースを占有します。
I/O ボトルネックが原因で、システムが REDO ログの読み書きを低速で行います。
レプリケーションの遅延が発生した場合、クエリ結果の整合性を確保するにはどうすればよいですか?
クラスタエンドポイントを使用し、クラスタエンドポイントに適切な整合性レベルを選択できます。次の整合性レベルを降順に示します。グローバル整合性(強力な整合性)、セッション整合性、結果整合性。詳細については、「整合性レベル」「」「」をご参照ください。
単一ノードに障害が発生した場合、目標復旧時点(RPO)をゼロにすることはできますか?
はい。
バックエンドでノードの仕様はどのようにアップグレードされますか?たとえば、ノードの仕様を 2 コア 8 GB メモリから 4 コア 16 GB メモリにアップグレードするにはどうすればよいですか?アップグレードはサービスにどのような影響を与えますか?
PolarDB の PolarProxy とデータベースノードは、最新の構成にアップグレードする必要があります。サービスへの影響を最小限に抑えるために、ローリングアップグレード方式を使用して複数のノードをアップグレードします。各アップグレードには約 10 ~ 15 分かかります。サービスへの影響は 30 秒以内です。この期間中、1 ~ 3 回の一時的な接続エラーが発生する可能性があります。詳細については、「クラスタの仕様を手動で変更する」「」「」をご参照ください。
ノードの追加にはどのくらい時間がかかりますか?ノードを追加するときにサービスは影響を受けますか?
ノードの追加には約 5 分かかります。ノードを追加するときにサービスは影響を受けません。ノードを追加する方法については、「読み取り専用ノードを追加する」「」「」をご参照ください。
説明読み取り専用ノードを追加した後、読み取り専用ノードにリクエストを転送するための読み書き分離接続が確立されます。読み取り専用ノードが追加される前に作成された読み書き分離接続は、読み取り専用ノードにリクエストを転送しません。接続を閉じてから再接続する必要があります。たとえば、アプリケーションを再起動して接続を確立できます。
カーネルマイナーバージョンを最新のレビジョンバージョンに更新するにはどのくらい時間がかかりますか?更新が完了するときにサービスは影響を受けますか?
PolarDB は、ローリングアップデート方式を使用して複数のノードをアップグレードし、サービスへの影響を最小限に抑えます。ほとんどの場合、更新の完了には 30 分もかかりません。アップグレード中に PolarProxy またはデータベースエンジンが再起動されます。これにより、サービスが中断される可能性があります。オフピーク時に更新を実行することをお勧めします。アプリケーションがデータベースに自動的に再接続できることを確認してください。詳細については、「マイナーバージョンアップデート」「」「」をご参照ください。
自動フェールオーバーはどのように実装されますか?
PolarDB は、アクティブ/アクティブ高可用性アーキテクチャを使用します。プライマリノードに障害が発生すると、システムは読み取り専用ノードから新しいプライマリノードを自動的に選択し、元のプライマリノードから新しいプライマリノードにサービスをフェールオーバーします。フェールオーバー優先度は、PolarDB クラスタ内の各ノードに割り当てられます。優先度は、フェールオーバー中にどのノードをプライマリノードとして選択できるかを決定します。複数のノードのフェールオーバー優先度が同じ場合、プライマリノードとして選択される確率は同じです。詳細については、「自動フェールオーバーと手動フェールオーバー」「」「」をご参照ください。
一般ユーザーが PolarDB for MySQL クラスタのセッションを閉じるには、どのような権限が必要ですか?
PolarDB for MySQL クラスタで KILL コマンドを使用してセッションを閉じるには、一般ユーザーに必要な権限が必要です。一般ユーザーは、別の一般ユーザーのセッションを閉じるには、
PROCESS
権限が必要です。説明一般ユーザーは、追加の権限なしで自分の現在のセッションを閉じることができます。
同じユーザーが作成した別のセッションを閉じるには、一般ユーザーに
PROCESS
権限が必要です。高度な特権アカウントは、PolarDB for MySQL クラスタで
KILL
コマンドを使用して一般ユーザーのセッションを閉じるときは注意が必要です。
バックアップと復元
PolarDB はどのようにデータをバックアップしますか?
PolarDB は、スナップショットを使用してデータをバックアップします。詳細については、バックアップ方法 1:自動バックアップ および バックアップ方法 2:手動バックアップ、「」「」をご参照ください。
データベースはどのくらいの速さで復元できますか?
バックアップセットまたはスナップショットに基づいてデータベース内の 1 TB のデータを復元または複製するには、40 分かかります。特定の時点にデータを復元する場合、REDO ログの再生に必要な時間も含まれている必要があります。1 GB の REDO ログデータの再生には約 20 ~ 70 秒かかります。復元時間の合計は、バックアップセットに基づいてデータを復元するのに必要な時間と、REDO ログを再生するのに必要な時間の合計です。
パフォーマンスと容量
PolarDB for MySQL クラスタが ApsaraDB RDS for MySQL インスタンスよりも大幅なパフォーマンス向上を示さないのはなぜですか?
PolarDB for MySQL クラスタと ApsaraDB RDS for MySQL インスタンスのパフォーマンスを比較する前に、次の点を考慮して、正確で合理的なパフォーマンス比較結果を得てください。
PolarDB for MySQL クラスタと ApsaraDB RDS for MySQL インスタンスが同じ仕様を使用していることを確認します。
PolarDB for MySQL クラスタと ApsaraDB RDS for MySQL インスタンスが同じバージョンであることを確認します。
理由は、実装メカニズムがバージョンによって異なるためです。たとえば、MySQL 8.0 は、Log_writer、log_fluser、log_checkpoint、log_write_notifier などのスレッドを個別に抽象化することで、マルチコア CPU を最適化します。ただし、少数の CPU コアのみを使用する場合、MySQL 8.0 のパフォーマンスは MySQL 5.6 または MySQL 5.7 よりも低くなります。PolarDB for MySQL 5.6 と ApsaraDB RDS for MySQL 5.7 または 8.0 を比較しないことをお勧めします。これは、PolarDB for MySQL 5.6 のオプティマイザが、PolarDB for MySQL の新しいバージョンのオプティマイザほどパフォーマンスが良くないためです。
実際のオンライン環境での負荷をシミュレートするか、sysbench ベンチマークスイートを使用してパフォーマンスを比較することをお勧めします。これにより、得られたパフォーマンスデータが実際のオンラインシナリオで得られたデータに近づきます。
単一の SQL 文を使用して PolarDB for MySQL と ApsaraDB RDS for MySQL の読み取りパフォーマンスを比較しないことをお勧めします。
これは、PolarDB が計算とストレージが分離されたアーキテクチャを使用しているため、ネットワーク通信により単一クエリのレイテンシが増加するためです。そのため、PolarDB for MySQL の読み取りパフォーマンスは ApsaraDB RDS for MySQL よりも低くなります。オンラインデータベースのキャッシュヒット率は、ほとんどの場合 99% を超えています。最初の読み取りリクエストのみが I/O リソースを消費し、読み取りパフォーマンスが低下します。後続の読み取りリクエストは、データがバッファプールに格納されているため、I/O リソースを消費しません。後続の読み取りリクエストでは、PolarDB for MySQL と ApsaraDB RDS for MySQL は同じ読み取りパフォーマンスを提供します。
単一の SQL 文を使用して書き込みパフォーマンスを比較しないことをお勧めします。代わりに、本番環境をシミュレートしてストレステストを実行することをお勧めします。
パフォーマンス比較のために、ApsaraDB RDS for MySQL のプライマリインスタンスと読み取り専用インスタンスを PolarDB のプライマリノードと読み取り専用ノードと比較することをお勧めします。 ApsaraDB RDS for MySQL の読み取り専用インスタンスには、準同期レプリケーションが実装されています。これは、PolarDB のアーキテクチャでは、デフォルトでデータ書き込みにクォーラムメカニズムが使用されているためです。 3 つのうち 2 つ、または 3 つすべてにデータが書き込まれると、システムは書き込み操作が成功したと判断します。 PolarDB はストレージレイヤーでデータ冗長性を実装し、3 つのレプリカに対して強力な整合性と高い信頼性を保証します。そのため、適切な比較方法は、非同期レプリケーションではなく準同期レプリケーションが実装されている ApsaraDB RDS for MySQL と PolarDB for MySQL を比較することです。
PolarDB for MySQL と ApsaraDB RDS for MySQL のパフォーマンス比較結果の詳細については、「PolarDB for MySQL と ApsaraDB RDS for MySQL のパフォーマンス比較」をご参照ください。
削除されたデータベースが大量のストレージ容量を占有するのはなぜですか?
これは、削除されたデータベースの REDO ログファイルがストレージ容量を占有しているためです。ほとんどの場合、REDO ログファイルは 2 GB ~ 11 GB のストレージ容量を占有します。合計 11 GB のストレージ容量が占有されている場合、8 GB のストレージ容量はバッファプール内の 8 つの REDO ログファイルによって占有されます。残りの 3 GB のストレージ容量は、書き込まれている REDO ログファイル、事前に作成された REDO ログファイル、および最新の REDO ログファイルによって均等に占有されます。
loose_innodb_polar_log_file_max_reuse
パラメータは、バッファプール内の REDO ログファイルの数を指定します。このパラメータのデフォルト値は 8 です。このパラメータの値を変更して、ログファイルによって占有されるストレージ容量を削減できます。この場合、大きな負荷が処理されると、定期的なパフォーマンスの変動が発生する可能性があります。テーブルの最大数はいくつですか?パフォーマンスが低下しないようにするには、テーブル数の制限は何ですか?
テーブルの最大数は、ファイルの数によって異なります。詳細については、「制限」「」「」をご参照ください。
テーブルパーティショニングは PolarDB のクエリパフォーマンスを向上させることができますか?
ほとんどの場合、SQL クエリ文がパーティションに該当する場合、パフォーマンスを向上させることができます。
PolarDB クラスタに 10,000 個のデータベースを作成できますか?PolarDB クラスタのデータベースの最大数はいくつですか?
はい、PolarDB クラスタに 10,000 個のデータベースを作成できます。作成できるデータベースの最大数は、ファイルの数によって異なります。詳細については、「制限」「」「」をご参照ください。
接続の最大数は、読み取り専用ノードの数によって異なりますか?読み取り専用ノードを追加することで、接続の最大数を増やすことはできますか?
読み取り専用ノードの数は、接続の最大数とは無関係です。PolarDB の接続の最大数は、ノードの仕様によって決まります。詳細については、「制限」をご参照ください。より多くの接続が必要な場合は、仕様をアップグレードしてください。
1 秒あたりの入出力操作(IOPS)はどのように制限および分離されますか?PolarDB クラスタの複数のノードは I/O リソースを競合しますか?
PolarDB クラスタの各ノードの IOPS は、ノードの仕様に基づいて指定されます。各ノードの IOPS は他のノードの IOPS から分離されており、相互に影響を与えません。
読み取り専用ノードのパフォーマンスが低下した場合、プライマリノードは影響を受けますか?
はい、読み取り専用ノードの負荷が過度に大きく、レプリケーションの遅延が増加すると、プライマリノードのメモリ消費量がわずかに増加します。
バイナリログ機能を有効にすると、データベースのパフォーマンスにどのような影響がありますか?
バイナリログ機能を有効にした後、書き込みと更新(INSERT、UPDATE、および DELETE)のパフォーマンスのみが影響を受けます。クエリ(SELECT)のパフォーマンスは影響を受けません。ほとんどの場合、読み取りリクエストと書き込みリクエストのバランスが取れているデータベースでバイナリログ機能を有効にすると、データベースのパフォーマンスは 10% 以下しか低下しません。
SQL Explorer(完全な SQL ログ監査)機能を有効にすると、データベースのパフォーマンスにどのような影響がありますか?
SQL Explorer 機能を有効にしても、データベースのパフォーマンスは影響を受けません。
PolarDB はどの高速ネットワークプロトコルを使用していますか?
PolarDB は、デュアルポート RDMA(リモートダイレクトメモリアクセス)を使用して、計算ノードとストレージノード間、およびデータレプリカ間の高い I/O スループットを確保します。各ポートは、低レイテンシで最大 25 Gbit/s のデータレートを提供します。
インターネットから PolarDB にアクセスする場合、使用できる最大帯域幅はどのくらいですか?
インターネットから PolarDB にアクセスする場合、最大帯域幅は 10 Gbit/s です。
大きなテーブル
PolarDB for MySQL の大きなテーブルは、従来のデータベースのローカルディスクと比較してどのような利点がありますか?
PolarDB for MySQL データベースの大きなテーブルは分割され、N 台の物理ストレージサーバーに格納されます。そのため、大きなテーブルの I/O 操作は複数のディスクに割り当てられます。PolarDB for MySQL データベースの I/O 読み取り操作の全体的なスループット(I/O レイテンシではなく)は、すべての I/O 操作がローカルディスクにスケジュールされているデータベースのスループットよりも高くなります。
大きなテーブルを最適化するにはどうすればよいですか?
パーティションテーブルを使用して大きなテーブルを最適化することをお勧めします。
パーティションテーブルのアプリケーションシナリオは何ですか?
パーティションテーブルは、大きなテーブルをプルーニングしてクエリのデータスキャン量を制御し、ビジネスコードを変更したくない場合に使用できます。たとえば、パーティションテーブルを使用して、サービスの既存データを定期的にクリアできます。最も古い月に作成されたパーティションを削除し、翌月のパーティションを作成して、最新の 6 か月間のデータのみを保持できます。
同じ PolarDB for MySQL データベースに大量のデータを含むテーブルをコピーする場合、たとえば、テーブル A のすべてのデータをテーブル B にコピーする場合、どの方法が適していますか?
次の SQL 文を実行して、データを直接コピーできます。
create table B as select * from A
安定性
高同時実行シナリオで PHP の短命接続を最適化できますか?
はい、高同時実行シナリオで PHP の短命接続を最適化できます。PHP の短命接続を最適化するには、クラスタエンドポイントの設定でセッションレベルの接続プールを有効にします。詳細については、「クラスタエンドポイントを指定する」「」「」をご参照ください。
遅い SQL クエリによってデータベース全体のパフォーマンスが低下するのを防ぐにはどうすればよいですか?
PolarDB for MySQL 5.6 または 8.0 クラスタを使用している場合は、文の同時実行制御機能を使用して、指定された SQL 文に対してレート制限と調整を実装できます。この機能の詳細については、「同時実行制御」をご参照ください。
PolarDB はアイドルセッションタイムアウト機能をサポートしていますか?
はい。wait_timeout パラメータの値を変更して、アイドルセッションのタイムアウト期間を指定できます。詳細については、「クラスタとノードのパラメータを指定する」をご参照ください。
遅い SQL クエリを特定するにはどうすればよいですか?
次の 2 つの方法で遅い SQL クエリを特定できます。
コンソールで遅い SQL クエリを取得します。詳細については、「遅い SQL クエリ」をご参照ください。
データベースクラスタに接続し、
SHOW PROCESSLIST
文を実行して、実行に時間がかかる SQL 文を見つけます。データベースクラスタへの接続方法の詳細については、「クラスタに接続する」をご参照ください。
遅い SQL クエリを終了するにはどうすればよいですか?
遅い SQL クエリを特定した後、遅い SQL クエリの ID を見つけて
kill <Id>
コマンドを実行して、SQL クエリを終了します。
データライフサイクル管理
PolarDB for MySQL クラスタは、ホットデータとウォームデータをコールドデータとしてどのようにアーカイブしますか?
PolarDB for MySQL クラスタは、InnoDB エンジンを使用して格納されたホットデータと、X-Engine を使用して PolarStore から Object Storage Service (OSS) に格納されたウォームデータを、データ定義言語 (DDL) ポリシーを使用して CSV または ORC 形式のコールドデータとしてアーカイブできます。このアーカイブにより、PolarStore のストレージ容量が効果的に解放され、データベースのストレージコスト全体が削減されます。詳細については、「コールドデータを手動でアーカイブする」をご参照ください。
PolarDB for MySQL クラスタは、ホットデータ、ウォームデータ、コールドデータの自動分離とアーカイブをサポートしていますか?
PolarDB for MySQL クラスタは、ホットデータ、ウォームデータ、コールドデータの自動分離とアーカイブをサポートしています。データライフサイクル管理 (DLM) ポリシーを構成して、PolarStore から低コストの OSS ストレージへのデータの自動アーカイブを実装できます。これにより、データベースのストレージコストが削減され、ストレージ効率が向上します。詳細については、「コールドデータを自動的にアーカイブする」をご参照ください。