Amazon DocumentDB オペレーションのプロファイリング - Amazon DocumentDB

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon DocumentDB オペレーションのプロファイリング

Amazon DocumentDB (with MongoDB compatibility) でプロファイラーを使用して、クラスターで実行されたオペレーションの実行時間と詳細をログに記録することができます。プロファイラーは、クラスターで最も遅いオペレーションをモニタリングし、個々のクエリパフォーマンスとクラスター全体のパフォーマンスを向上させるのに役立ちます。

デフォルトでは、プロファイラー機能は無効になっています。有効にすると、プロファイラーは、お客様定義のしきい値 (100 ms など) の値より時間がかかっているオペレーションを Amazon CloudWatch Logs に記録します。ログに記録される詳細には、プロファイリングされたコマンド、時間、プランの概要、クライアントメタデータが含まれます。操作が CloudWatch Logs に記録された後、CloudWatch Logs インサイトを使用して Amazon DocumentDB プロファイリングデータを分析、モニタリング、アーカイブすることができます。一般的なクエリについては、「一般的なクエリ」セクションを参照してください 。

有効にすると、プロファイラーはクラスター内の追加のリソースを利用します。高いしきい値 (500 ms など) から開始し、値を徐々に小さくして、低速なオペレーションを識別することをお勧めします。しきい値 50 ms から開始すると、高スループットのアプリケーションのクラスターでパフォーマンスの問題が発生する可能性があります。プロファイラーはクラスターレベルで有効であり、クラスター内のすべてのインスタンスとデータベースで動作します。Amazon DocumentDB は、ベストエフォート方式で Amazon CloudWatch Logs にオペレーションを記録します。

Amazon DocumentDB はプロファイラーを有効にするための追加料金を課しませんが、CloudWatch Logs の使用料は標準料金で請求されます。CloudWatch Logs の料金の詳細については、Amazon CloudWatch の料金 をご覧ください。

サポートされているオペレーション

Amazon DocumentDB プロファイラーでは、以下の操作をサポートしています。

  • aggregate

  • count

  • delete

  • distinct

  • find (OP_QUERY およびコマンド)

  • findAndModify

  • insert

  • update

制約事項

スロークエリプロファイラーは、クエリの結果セット全体が 1 つのバッチに収まることができ、結果セットが 16 MB 未満(最大 BSON サイズ)の場合のみプロファイラーログを出力できます。16 MB を超える結果セットは、自動的に複数のバッチに分割されます。

ほとんどのドライバまたはシェルでは、デフォルトのバッチサイズが小さく設定されている場合があります。バッチサイズは、クエリの一部として指定することができます。低速クエリログを取得するために、予想される結果セットのサイズを超えるバッチサイズをお勧めします。結果セットのサイズが不明な場合や変動する場合は、バッチサイズを大きな数値 (100k など) に設定することもできます。

ただし、バッチサイズを大きくすると、クライアントにレスポンスを送信する前にデータベースから取得しなければならない結果も多くなります。一部のクエリでは、結果を得るまでに長い遅延が発生する可能性があります。結果セット全体を消費する予定がない場合、クエリの処理に多くの I/O を費やして結果を破棄する可能性があります。

Amazon DocumentDB プロファイラーの有効化

クラスターでプロファイラーを有効にするには、3 つのステップを実行します。すべての手順が完了していないと、プロファイリングログが CloudWatch Logs に送信されませんので、ご注意ください。プロファイラーはクラスターレベルで設定され、クラスターのすべてのデータベースとインスタンスで実行されます。

クラスターでプロファイラーを有効にするには
  1. デフォルトのクラスターパラメータグループを変更できないため、使用できるカスタムクラスターパラメータグループがあることを確認してください。詳細については、「Amazon DocumentDB クラスターパラメータグループを作成する」を参照してください。

  2. 使用可能なカスタムクラスターパラメータグループを使用して、profilerprofiler_threshold_ms および profiler_sampling_rate のパラメータを変更します。詳細については、「Amazon DocumentDB クラスターパラメータグループを変更する」を参照してください。

  3. カスタムクラスターパラメータグループを使用し、CloudWatch Logs への profiler ログのエクスポートを有効にするために、クラスターを作成または変更します。

以下のセクションでは、AWS Management Console と AWS Command Line Interface (AWS CLI) を使用してこれらのステップを実装する方法を示します。

Using the AWS Management Console
  1. 開始する前に、Amazon DocumentDB クラスターと、まだ持っていない場合はカスタムクラスターパラメータグループを作成します。詳細については、Amazon DocumentDB クラスターパラメータグループを作成するおよびAmazon DocumentDB クラスターの作成を参照してください。

  2. 使用可能なカスタムクラスターパラメータグループを使用して、以下のパラメータを変更します。詳細については、「Amazon DocumentDB クラスターパラメータグループを変更する」を参照してください。

    • profiler - クエリプロファイリングを有効化または無効化します。有効な値は、enabled および disabled です。デフォルト値は disabled です。プロファイリングを有効にするには、値を enabled に設定します。

    • profiler_threshold_ms - profilerenabled に設定すると、 profiler-threshold-ms より時間がかかっているコマンドは全て CloudWatch にログ出力されます。有効な値は [50-INT_MAX] です。デフォルト値は 100 です。

    • profiler_sampling_rate - プロファイリングやロギングを行うべき低速オペレーションの割合です。有効な値は [0.0-1.0] です。デフォルト値は 1.0 です。

  3. カスタムクラスターパラメータグループを使用するようにクラスターを修正し、プロファイラーログエクスポートを Amazon CloudWatch に公開するように設定します。

    1. ナビゲーションペインで、[Clusters (クラスター)] を選択し、カスタムパラメータグループをクラスターに追加します。

    2. パラメータグループを関連付けるクラスター名の左側にあるボタンを選択します。[Actions (アクション)]、[Modify (変更)] の順に選択し、クラスターを変更します。

    3. [Cluster options (クラスターオプション)] で、上記のステップからカスタムパラメータグループを選択して、クラスターに追加します。

    4. [Log exports(ログのエクスポート)] で [Profiler logs(プロファイラーログ)] をクリックして Amazon CloudWatchを選択します。

    5. [続行] を選択して、変更の概要を表示します。

    6. 変更を確認したら、直ちに、あるいは、[変更のスケジューリング] の下にある次のメンテナンスウィンドウ中に適用することができます。

    7. [クラスターの変更] を選択して、新しいパラメータグループでクラスターを更新します。

Using the AWS CLI

次の手順では、クラスター sample-cluster でサポートされているすべてのオペレーションでプロファイラーを有効にします。

  1. 開始する前に、次のコマンドを実行し、名前に default がなく、パラメータグループファミリーとして docdb3.6 を持つクラスターパラメータグループの出力を確認して、使用可能なカスタムクラスターパラメータグループがあることを確認します。デフォルト以外のクラスターパラメータグループがない場合は、「Amazon DocumentDB クラスターパラメータグループを作成する」を参照してください。

    aws docdb describe-db-cluster-parameter-groups \ --query 'DBClusterParameterGroups[*].[DBClusterParameterGroupName,DBParameterGroupFamily]'

    次の出力では、sample-parameter-group のみが両方の条件を満たしています。

    [ [ "default.docdb3.6", "docdb3.6" ], [ "sample-parameter-group", "docdb3.6" ] ]
  2. カスタムクラスターパラメータグループを使用して、以下のパラメータを変更します。

    • profiler - クエリプロファイリングを有効化または無効化します。有効な値は、enabled および disabled です。デフォルト値は disabled です。プロファイリングを有効にするには、値を enabled に設定します。

    • profiler_threshold_ms - profilerenabled に設定すると、profiler -threshold-ms より長い時間を要するすべてのコマンドが CloudWatch にログ記録されます。有効な値は [0-INT_MAX] です。この値を 0 に設定すると、サポートされているすべてのオペレーションがプロファイルされます。デフォルト値は 100 です。

    • profiler_sampling_rate - プロファイリングやロギングを行うべき低速オペレーションの割合です。有効な値は [0.0-1.0] です。デフォルト値は 1.0 です。

    aws docdb modify-db-cluster-parameter-group \ --db-cluster-parameter-group-name sample-parameter-group \ --parameters ParameterName=profiler,ParameterValue=enabled,ApplyMethod=immediate \ ParameterName=profiler_threshold_ms,ParameterValue=100,ApplyMethod=immediate \ ParameterName=profiler_sampling_rate,ParameterValue=0.5,ApplyMethod=immediate
  3. Amazon DocumentDB クラスターを修正して、前のステップの sample-parameter-group カスタムクラスターパラメータグループを使用し、パラメータ --enable-cloudwatch-logs-exportsprofiler に設定するようにします。

    次のコードは、前のステップから sample-cluster を使用するようにクラスター sample-parameter-group を変更し、有効な CloudWatch Logs のエクスポートに profiler を追加します。

    aws docdb modify-db-cluster \ --db-cluster-identifier sample-cluster \ --db-cluster-parameter-group-name sample-parameter-group \ --cloudwatch-logs-export-configuration '{"EnableLogTypes":["profiler"]}'

    このオペレーションによる出力は、次のようになります。

    { "DBCluster": { "AvailabilityZones": [ "us-east-1c", "us-east-1b", "us-east-1a" ], "BackupRetentionPeriod": 1, "DBClusterIdentifier": "sample-cluster", "DBClusterParameterGroup": "sample-parameter-group", "DBSubnetGroup": "default", "Status": "available", "EarliestRestorableTime": "2020-04-07T02:05:12.479Z", "Endpoint": "sample-cluster.node.us-east-1.docdb.amazonaws.com", "ReaderEndpoint": "sample-cluster.node.us-east-1.docdb.amazonaws.com", "MultiAZ": false, "Engine": "docdb", "EngineVersion": "3.6.0", "LatestRestorableTime": "2020-04-08T22:08:59.317Z", "Port": 27017, "MasterUsername": "test", "PreferredBackupWindow": "02:00-02:30", "PreferredMaintenanceWindow": "tue:09:50-tue:10:20", "DBClusterMembers": [ { "DBInstanceIdentifier": "sample-instance-1", "IsClusterWriter": true, "DBClusterParameterGroupStatus": "in-sync", "PromotionTier": 1 }, { "DBInstanceIdentifier": "sample-instance-2", "IsClusterWriter": true, "DBClusterParameterGroupStatus": "in-sync", "PromotionTier": 1 } ], "VpcSecurityGroups": [ { "VpcSecurityGroupId": "sg-abcd0123", "Status": "active" } ], "HostedZoneId": "ABCDEFGHIJKLM", "StorageEncrypted": true, "KmsKeyId": "arn:aws:kms:us-east-1:<accountID>:key/sample-key", "DbClusterResourceId": "cluster-ABCDEFGHIJKLMNOPQRSTUVWXYZ", "DBClusterArn": "arn:aws:rds:us-east-1:<accountID>:cluster:sample-cluster", "AssociatedRoles": [], "ClusterCreateTime": "2020-01-10T22:13:38.261Z", "EnabledCloudwatchLogsExports": [ "profiler" ], "DeletionProtection": true } }

Amazon DocumentDB プロファイラーの無効化

プロファイラを無効にするには、profiler パラメータと profiler ログの CloudWatch Logs へのエクスポートの両方を無効にします。

プロファイラーの無効化

次のように、profiler パラメータは、AWS Management Console またはAWS CLI を使用して無効にすることができます。

Using the AWS Management Console

次の手順では、AWS Management Console を使用してAmazon DocumentDB profiler を無効化します。

  1. AWS Management Console にサインインし、Amazon DocumentDB コンソール https://console.aws.amazon.com/docdb を開きます。

  2. ナビゲーションペインで、[パラメータグループ] を選択します。次に、プロファイラーを無効にするクラスターパラメータグループの名前を選択します。

  3. 結果の [Cluster parameters (クラスターパラメータ)] ページで、profiler パラメータの左側にあるボタンを選択し、[Edit (編集)] を選択します。

  4. [Modify profiler (プロファイラーの変更)] ダイアログボックスで、リストから [disabled] を選択します。

  5. [Modify cluster parameter (クラスターパラメータの変更)] を選択します。

Using the AWS CLI

AWS CLI を使用してクラスターで profiler を無効にするには、次のようにクラスターを変更します。

aws docdb modify-db-cluster-parameter-group \ --db-cluster-parameter-group-name sample-parameter-group \ --parameters ParameterName=profiler,ParameterValue=disabled,ApplyMethod=immediate

プロファイラーログのエクスポートの無効化

profiler ログの CloudWatch Logs へのエクスポートを無効にするには、以下のように AWS Management Console または AWS CLI、のどちらかを使用します。

Using the AWS Management Console

次の手順では、AWS Management Console を使用して Amazon DocumentDB の CloudWatch へのログエクスポートを無効にします。

  1. Amazon DocumentDB コンソールを、次の場所で開きます。https://console.aws.amazon.com/docdb

  2. ナビゲーションペインで クラスター を選択します。ログのエクスポートを無効にするクラスターの名前の左側にあるボタンを選択します。

  3. [アクション] メニューから [Modify (変更)] を選択します。

  4. [Log exports (ログのエクスポート)] セクションまでスクロールし、[Profiler logs (プロファイラーログ)] を選択解除します。

  5. [Continue] (続行) をクリックします。

  6. 変更を確認してから、この変更をクラスターにいつ適用するかを選択します。

    • Apply during the next scheduled maintenance window (次に予定されているメンテナンス期間中に適用)

    • すぐに適用

  7. [クラスタークラスターの変更] を選択します。

Using the AWS CLI

次のコードでは、クラスター sample-cluster を変更し、CloudWatch プロファイラーログを無効にします。

Linux、macOS、Unix の場合:

aws docdb modify-db-cluster \ --db-cluster-identifier sample-cluster \ --cloudwatch-logs-export-configuration '{"DisableLogTypes":["profiler"]}'

Windows の場合:

aws docdb modify-db-cluster ^ --db-cluster-identifier sample-cluster ^ --cloudwatch-logs-export-configuration '{"DisableLogTypes":["profiler"]}'

このオペレーションによる出力は、次のようになります。

{ "DBCluster": { "AvailabilityZones": [ "us-east-1c", "us-east-1b", "us-east-1a" ], "BackupRetentionPeriod": 1, "DBClusterIdentifier": "sample-cluster", "DBClusterParameterGroup": "sample-parameter-group", "DBSubnetGroup": "default", "Status": "available", "EarliestRestorableTime": "2020-04-08T02:05:17.266Z", "Endpoint": "sample-cluster.node.us-east-1.docdb.amazonaws.com", "ReaderEndpoint": "sample-cluster.node.us-east-1.docdb.amazonaws.com", "MultiAZ": false, "Engine": "docdb", "EngineVersion": "3.6.0", "LatestRestorableTime": "2020-04-09T05:14:44.356Z", "Port": 27017, "MasterUsername": "test", "PreferredBackupWindow": "02:00-02:30", "PreferredMaintenanceWindow": "tue:09:50-tue:10:20", "DBClusterMembers": [ { "DBInstanceIdentifier": "sample-instance-1", "IsClusterWriter": true, "DBClusterParameterGroupStatus": "in-sync", "PromotionTier": 1 }, { "DBInstanceIdentifier": "sample-instance-2", "IsClusterWriter": true, "DBClusterParameterGroupStatus": "in-sync", "PromotionTier": 1 } ], "VpcSecurityGroups": [ { "VpcSecurityGroupId": "sg-abcd0123", "Status": "active" } ], "HostedZoneId": "ABCDEFGHIJKLM", "StorageEncrypted": true, "KmsKeyId": "arn:aws:kms:us-east-1:<accountID>:key/sample-key", "DbClusterResourceId": "cluster-ABCDEFGHIJKLMNOPQRSTUVWXYZ", "DBClusterArn": "arn:aws:rds:us-east-1:<accountID>:cluster:sample-cluster", "AssociatedRoles": [], "ClusterCreateTime": "2020-01-10T22:13:38.261Z", "DeletionProtection": true } }

Amazon DocumentDB プロファイラーログにアクセスする

Amazon CloudWatch 上のプロファイルログにアクセスするには、次のステップに従います。

  1. CloudWatch コンソール (https://console.aws.amazon.com/cloudwatch/) を開きます。

  2. Amazon DocumentDB クラスターと同じリージョンであることを確認します。

  3. ナビゲーションペインで [ログ] を選択します。

  4. クラスターのプロファイラーログを確認するには、リストで /aws/docdb/yourClusterName/profiler を選択します。

    各インスタンスのプロファイルログは、対応する各インスタンス名の下に表示されます。

一般的なクエリ

以下に、プロファイルされたコマンドの分析に使用できる一般的なクエリをいくつか示します。CloudWatch Logs インサイト の詳細については、CloudWatch Logs インサイトでログデータを分析するサンプルクエリ を参照してください。

指定されたコレクションの中で最も低速だった 10 件のオペレーションを取得する

filter ns="test.foo" | sort millis desc | limit 10

特定のコレクション内で 60 ms 以上かかったすべての更新オペレーションを取得する

filter millis > 60 and op = "update"

先月最も遅かった 10 件のオペレーションを取得する

sort millis desc | limit 10

プランの概要が COLLSCAN のすべてのクエリを取得する

filter planSummary="COLLSCAN"