

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

# Amazon DocumentDB オペレーションのプロファイリング
<a name="profiling"></a>

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

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

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

Amazon DocumentDB はプロファイラーを有効にするための追加料金を課しませんが、CloudWatch Logs の使用料は標準料金で請求されます。CloudWatch Logs の料金の詳細については、[Amazon CloudWatch の料金](https://aws.amazon.com/cloudwatch/pricing/) をご覧ください。

**Topics**
+ [サポートされているオペレーション](#profiling.supported-commands)
+ [制限事項](#profiling.limitations)
+ [プロファイラーの有効化](#profiling.enable-profiling)
+ [プロファイラーの無効化](#profiling.disable-profiling)
+ [プロファイラーログのエクスポートの無効化](#profiling.disabling-logs-export)
+ [プロファイラーのログへのアクセス](#profiling.accessing)
+ [一般的なクエリ](#profiling.common-queries)

## サポートされているオペレーション
<a name="profiling.supported-commands"></a>

Amazon DocumentDB プロファイラーでは、以下の操作をサポートしています。
+ `aggregate`
+ `count`
+ `delete`
+ `distinct`
+ `find` (OP\$1QUERY およびコマンド)
+ `findAndModify`
+ `insert`
+ `update`

## 制限事項
<a name="profiling.limitations"></a>

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

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

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

## Amazon DocumentDB プロファイラーの有効化
<a name="profiling.enable-profiling"></a>

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

**クラスターでプロファイラーを有効にするには**

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

1. 使用可能なカスタムクラスターパラメータグループを使用して、`profiler`、`profiler_threshold_ms` および `profiler_sampling_rate` のパラメータを変更します。詳細については、「[Amazon DocumentDB クラスターパラメータグループを変更する](cluster_parameter_groups-modify.md)」を参照してください。

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

以下のセクションでは、 AWS マネジメントコンソール と AWS Command Line Interface () を使用してこれらのステップを実装する方法を示しますAWS CLI。

------
#### [ Using the AWS マネジメントコンソール ]

1. 開始する前に、Amazon DocumentDB クラスターと、まだ持っていない場合はカスタムクラスターパラメータグループを作成します。詳細については、「[Amazon DocumentDB クラスターパラメータグループを作成する](cluster_parameter_groups-create.md)」および「[Amazon DocumentDB クラスターの作成](db-cluster-create.md)」を参照してください。

1. 使用可能なカスタムクラスターパラメータグループを使用して、以下のパラメータを変更します。詳細については、「[Amazon DocumentDB クラスターパラメータグループを変更する](cluster_parameter_groups-modify.md)」を参照してください。
   + `profiler` - クエリプロファイリングを有効化または無効化します。有効な値は、`enabled ` および `disabled` です。デフォルト値は `disabled` です。プロファイリングを有効にするには、値を `enabled` に設定します。
   + `profiler_threshold_ms` - `profiler` を `enabled` に設定すると、` profiler_threshold_ms` より時間がかかっているコマンドは全て CloudWatch にログ出力されます。有効な値は `[50-INT_MAX]` です。デフォルト値は `100` です。
   + `profiler_sampling_rate` - プロファイリングやロギングを行うべき低速オペレーションの割合です。有効な値は `[0.0-1.0]` です。デフォルト値は `1.0` です。

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

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

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

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

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

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

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

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

------
#### [ Using the AWS CLI ]

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

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

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

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

   ```
   [
          [
              "default.docdb3.6",
              "docdb3.6"
          ],
          [
              "sample-parameter-group",
              "docdb3.6"
          ]
   ]
   ```

1. カスタムクラスターパラメータグループを使用して、以下のパラメータを変更します。
   + `profiler` - クエリプロファイリングを有効化または無効化します。有効な値は、`enabled ` および `disabled` です。デフォルト値は `disabled` です。プロファイリングを有効にするには、値を `enabled` に設定します。
   + `profiler_threshold_ms` - `profiler` を `enabled` に設定すると、`profiler_threshold_ms` より長い時間を要するすべてのコマンドが CloudWatch にログ記録されます。有効な値は `[50-INT_MAX]` です。デフォルト値は `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
   ```

1. Amazon DocumentDB クラスターを修正して、前のステップの `sample-parameter-group` カスタムクラスターパラメータグループを使用し、パラメータ `--enable-cloudwatch-logs-exports` を `profiler` に設定するようにします。

   次のコードは、前のステップから `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 プロファイラーの無効化
<a name="profiling.disable-profiling"></a>

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

### プロファイラーの無効化
<a name="profiling.disable-profiler"></a>

`profiler` パラメータは AWS CLI、次のように AWS マネジメントコンソール または を使用して無効にできます。

------
#### [ Using the AWS マネジメントコンソール ]

次の手順では AWS マネジメントコンソール 、 を使用して Amazon DocumentDB を無効にします`profiler`。

1. にサインインし AWS マネジメントコンソール、[https://console.aws.amazon.com/docdb](https://console.aws.amazon.com/docdb) で Amazon DocumentDB コンソールを開きます。

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

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

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

1. [**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
```

------

## プロファイラーログのエクスポートの無効化
<a name="profiling.disabling-logs-export"></a>

CloudWatch Logs への`profiler`ログのエクスポートを無効にするには AWS CLI、次のように AWS マネジメントコンソール または を使用します。

------
#### [ Using the AWS マネジメントコンソール ]

次の手順では、 を使用して AWS マネジメントコンソール Amazon DocumentDB の CloudWatch へのログのエクスポートを無効にします。

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

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

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

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

1. [**続行**] をクリックしてください。

1. 変更を確認してから、この変更をクラスターにいつ適用するかを選択します。
   + **Apply during the next scheduled maintenance window (次に予定されているメンテナンス期間中に適用)**
   + **すぐに適用**

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

------
#### [ Using the AWS CLI ]

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

**Example**  
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 プロファイラーログにアクセスする
<a name="profiling.accessing"></a>

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

1. CloudWatch コンソールの [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) を開いてください。

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

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

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

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

## 一般的なクエリ
<a name="profiling.common-queries"></a>

以下に、プロファイルされたコマンドの分析に使用できる一般的なクエリをいくつか示します。CloudWatch Logs インサイト の詳細については、[CloudWatch Logs インサイトでログデータを分析する](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html) と [サンプルクエリ](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax-examples.html) を参照してください。

### 指定されたコレクションの中で最も低速だった 10 件のオペレーションを取得する
<a name="profiling.common-queries.slow-queries-on-collection"></a>

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

### 特定のコレクション内で 60 ms 以上かかったすべての更新オペレーションを取得する
<a name="profiling.common-queries.updates-gt-60-ms"></a>

```
filter millis > 60 and op = "update"
```

### 先月最も遅かった 10 件のオペレーションを取得する
<a name="profiling.common-queries.slow-queries-last-month"></a>

```
sort millis desc | limit 10
```

### プランの概要が COLLSCAN のすべてのクエリを取得する
<a name="profiling.common-queries.collscan-plan-summary"></a>

```
filter planSummary="COLLSCAN"
```