You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: powerapps-docs/administrator/app-analytics.md
+4-4Lines changed: 4 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
1
---
2
2
title: View analytics reports for your app | Microsoft Docs
3
-
description: View reports to see the usage and performance of your PowerApps apps.
3
+
description: View reports to see the usage and performance of your Power Apps apps.
4
4
author: jamesol-msft
5
5
manager: kvivek
6
6
ms.service: powerapps
@@ -19,14 +19,14 @@ search.app:
19
19
# View analytics reports for your app
20
20
Have you built an app and shared it out to your organization? Are you curious how many of your colleagues are using it on a daily basis?
21
21
22
-
Introducing the first PowerApps analytics report that is now available from [make.powerapps.com](https://make.powerapps.com/?utm_source=padocs&utm_medium=linkinadoc&utm_campaign=referralsfromdoc); the **App usage report**.
22
+
Introducing the first Power Apps analytics report that is now available from [make.powerapps.com](https://make.powerapps.com/?utm_source=padocs&utm_medium=linkinadoc&utm_campaign=referralsfromdoc); the **App usage report**.
23
23
24
24
The App usage report gives you the ability to track how many users are using your app over the past 30 days broken down by day, device platform and ___location.
All reports are available to any user with "Can edit" permission to the app, but the user must have a PowerApps Plan 2 or PowerApps Plan 2 trial license in order to access the reports.
29
+
All reports are available to any user with "Can edit" permission to the app, but the user must have a Power Apps Plan 2 or Power Apps Plan 2 trial license in order to access the reports.
30
30
31
31
## Where do I find my app's reports?
32
32
You can view your app's reports via the following steps:
@@ -50,5 +50,5 @@ Yes, you are able to download a .csv file with the data for any chart in a repor
50
50
## Are there going to be any other reports?
51
51
Yes! In fact we are planning to develop similar reports around app performance and error reporting.
52
52
53
-
If you have specific feedback, questions, or requests we would love to hear about them on our [PowerApps Ideas forum](https://powerusers.microsoft.com/t5/PowerApps-Ideas/idb-p/PowerAppsIdeas).
53
+
If you have specific feedback, questions, or requests we would love to hear about them on our [Power Apps Ideas forum](https://powerusers.microsoft.com/t5/PowerApps-Ideas/idb-p/PowerAppsIdeas).
Copy file name to clipboardExpand all lines: powerapps-docs/developer/common-data-service/api-limits.md
+66-23Lines changed: 66 additions & 23 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,64 +1,107 @@
1
1
---
2
-
title: "API Limits (Common Data Service) | Microsoft Docs"
3
-
description: "Understand the limits for API requests."
2
+
title: "Service Protection API Limits (Common Data Service) | Microsoft Docs"
3
+
description: "Understand the service protection limits for API requests."
4
4
ms.custom: ""
5
-
ms.date: 03/21/2019
5
+
ms.date: 11/23/2019
6
6
ms.reviewer: "kvivek"
7
7
ms.service: powerapps
8
8
ms.topic: "article"
9
9
author: "JimDaly"
10
-
ms.author: "bsimons"
11
-
manager: "annbe"
10
+
ms.author: "jdaly"
11
+
manager: "ryjones"
12
12
search.audienceType:
13
13
- developer
14
14
search.app:
15
15
- PowerApps
16
16
- D365CE
17
17
---
18
-
# API Limits
18
+
# Service Protection API Limits
19
19
20
-
We limit the number of API requests made by each user, per organization instance, within a five minute sliding window. Additionally, we limit the number of concurrent requests that may come in at one time. When one of these limits is exceeded, an exception will be thrown by the platform.
20
+
To ensure consistent availability and performance for everyone we apply some limits to how APIs are used. We limit the number of concurrent connections per user account, the number of API requests per connection, and the amount of execution time that can be used for each connection. These are evaluated within a five minute sliding window. When one of these limits is exceeded, an exception will be thrown by the platform.
21
21
22
-
The limit will help ensure that users running applications cannot interfere with each other based on resource constraints. The limits will not affect normal users of the platform. Only applications that perform a large number of API requests may be affected. The limit will help provide a level of protection from random and unexpected surges in request volumes that threaten the availability and performance characteristics of the Common Data Service platform.
22
+
Service protection API limits help ensure that users running applications cannot interfere with each other based on resource constraints. The limits will not affect normal users of the platform. Only applications that perform a large number of API requests may be affected. The limits provide a level of protection from random and unexpected surges in request volumes that threaten the availability and performance characteristics of the Common Data Service platform.
23
23
24
-
Since plug-ins and custom workflow activities execute on the server independent of a logged on user, API calls made from plug-in code will not count against this external API request limit.
24
+
Since plug-ins and custom workflow activities execute on the server independent of a logged on user, API calls made from plug-in code will not count against service protection API limits.
25
25
26
-
If your application has the potential to exceed the limit, please consider the guidance given in the [What should I do if my application exceeds the limit?](#what-should-i-do-if-my-application-exceeds-the-limit) section below.
26
+
## Limits
27
+
28
+
> [!IMPORTANT]
29
+
> These limits are applied per web server. Each scale group has multiple web servers that may process each request depending on load balancing. These numbers represent a single web server and therefore the lowest possible level of throughput due to these limits. Your actual throughput should be higher.
30
+
>
31
+
> You will see significant differences between trial environments and production environments. Trial environments have fewer resources allocated to them so they will encounter these limits more easily than production environments.
32
+
>
33
+
> Don't focus too much on the numbers here. The important thing to understand is that applications which depend on high volume data operations should be designed to respond to signals that the server will send to indicate when limits are reached. Don't try to hard-code solutions based on the numbers here. Instead use the techniques described below to get the highest possible throughput by responding to the signals the service will send.
34
+
35
+
Service protection limits expect that the application uses multiple threads to maximize performance. Each thread represents a separate connection and each connection is evaluated on a 5 minute (300 second) sliding window.
36
+
37
+
Within that 5 minute sliding window, there are three aspects that are measured as described in the following table:
38
+
39
+
|Measure|Description|Limit per web server|
40
+
|--|--|--|
41
+
|Number of requests|The actual number of requests made per connection.|6000|
42
+
|Execution time|The combined duration for all connections using the same user account| 20 minutes (1200 seconds)|
43
+
|Number of connections|The number of connections using the same user account|52|
44
+
45
+
The combination of **Number of requests** and **Execution time** accounts for the fact that some operations require more system resources than others. Performing a complex query requires more system resources that creating or updating a single record.
46
+
47
+
While API calls made from plug-in code will not be counted against the number of requests, the execution time of those calls will be applied to the originating call.
48
+
49
+
Some known long-running system operations, such as ImportSolution, will not have the full execution time included in the calculation of the limit. The contribution of these calls towards the limit calculation is capped at 5 minutes if the actual execution time is greater.
50
+
51
+
If your application has the potential to exceed these limits, please apply the guidance given in the [What should I do if my application exceeds the limit?](#what-should-i-do-if-my-application-exceeds-the-limit) section below.
52
+
53
+
Depending on the nature of the data you are processing, you can adjust the number of concurrent connections to get the maximum throughput. If each operation is relatively quick, use more connections.
27
54
28
55
## What happens when the limit is exceeded?
29
56
30
-
When the limit is exceeded, all requests for the same user will return error responses.
57
+
When the limit is exceeded, all requests for the same connection will return error responses.
31
58
32
59
If you use the .NET SDK assemblies, the platform will respond with a `FaultException<OrganizationServiceFault>` WCF Fault.
|`-2147015902`|`Number of requests exceeded the limit of 4000, measured over time window of 300 seconds.`|
63
+
|`-2147015902`|`Number of requests exceeded the limit of 6000, measured over time window of 300 seconds.`|
37
64
|`-2147015903`|`Combined execution time of incoming requests exceeded limit of 1,200,000 milliseconds over time window of 300 seconds. Decrease number of concurrent requests or reduce the duration of requests and try again later.`|
38
-
|`-2147015898`|`Number of concurrent requests exceeded the limit of X`|
65
+
|`-2147015898`|`Number of concurrent requests exceeded the limit of 52`|
39
66
40
-
If you use HTTP requests, the response will include the same messages, but with:<br />
67
+
If you use HTTP requests with the Web API, the response will include the same messages, but with:<br />
41
68
`StatusCode` : `429`
42
69
43
70
All requests will return these error responses until the volume of API requests falls below the limit. If you get these responses, your application should stop sending API requests until the volume of requests is below the limit.
44
71
72
+
> [!TIP]
73
+
> If you are using HTTP requests with the Web API, you can track the remaining limit values with the following HTTP response headers:
74
+
>
75
+
> |Header |Value Description |
76
+
> |---------|---------|
77
+
> |`x-ms-ratelimit-burst-remaining-xrm-requests`|The remaining number of requests for this connection|
78
+
> |`x-ms-ratelimit-time-remaining-xrm-requests`|The remaining combined duration for all connections using the same user account|
79
+
45
80
## What should I do if my application exceeds the limit?
46
81
47
-
When your application exceeds the limit, the error response from the server may specify the amount of time you should wait before sending more requests. The response object is slightly different if you are using SDK assemblies or HTTP requests.
82
+
When your application exceeds the limit, the error response from the server may specify the amount of time you should wait before sending more requests. The response object is slightly different if you are using SDK assemblies or HTTP requests with the Web API.
48
83
49
84
For a discussion of best practices, see [Azure Architecture Best Practices Transient fault handling](/azure/architecture/best-practices/transient-faults)
50
85
51
86
[The Polly Project](https://www.thepollyproject.org/) is a library which includes capabilities for dealing with transient faults using execution policies.
52
87
53
-
### HTTP requests
88
+
### HTTP requests with the Web API
54
89
55
-
If you are using HTTP requests, you can look for the `Retry-After` HTTP header included in the error response. This will contain a value in seconds indicating how long you should wait before making a follow-up request. More information [MDN web docs Retry-After](https://developer.mozilla.org/docs/Web/HTTP/Headers/Retry-After)
90
+
If you encounter a 429 error code you can look for the `Retry-After` HTTP header included in the error response. This will contain a value in seconds indicating how long you should wait before making a follow-up request. More information [MDN web docs Retry-After](https://developer.mozilla.org/docs/Web/HTTP/Headers/Retry-After)
56
91
57
92
### SDK assemblies
58
93
59
-
If you are using the SDK assemblies, you can look for the `Retry-After` delay in the <xref:Microsoft.Xrm.Sdk.OrganizationServiceFault>.<xref:Microsoft.Xrm.Sdk.BaseServiceFault.ErrorDetails> property, using the key `"Retry-After"`. The value returned is a [TimeSpan](/dotnet/api/system.timespan) object.
94
+
> [!NOTE]
95
+
> You do not need to apply these patterns when:
96
+
>
97
+
> - Your code will run within a plug-in or custom workflow activity. You do not need to apply these patterns because service protection limits are not applied in these cases.
98
+
> - You use the <xref:Microsoft.Xrm.Tooling.Connector>.<xref:Microsoft.Xrm.Tooling.Connector.CrmServiceClient>. These patterns are built-in to that client. This is the recommended proxy class to use for client applications.
99
+
>
100
+
> You need to apply these patterns if you use the <xref:Microsoft.Xrm.Sdk.Client>.<xref:Microsoft.Xrm.Sdk.Client.OrganizationServiceProxy> or <xref:Microsoft.Xrm.Sdk.WebServiceClient>.<xref:Microsoft.Xrm.Sdk.WebServiceClient.OrganizationWebProxyClient> proxy classes.
101
+
102
+
If you are using the SDK assemblies with the <xref:Microsoft.Xrm.Sdk.Client.OrganizationServiceProxy> or <xref:Microsoft.Xrm.Sdk.WebServiceClient.OrganizationWebProxyClient> proxy classes, you can look for the `Retry-After` delay value in the <xref:Microsoft.Xrm.Sdk.OrganizationServiceFault>.<xref:Microsoft.Xrm.Sdk.BaseServiceFault.ErrorDetails> property, using the key `"Retry-After"`. The value returned is a [TimeSpan](/dotnet/api/system.timespan) object.
60
103
61
-
###.NET SDK Assembly Example
104
+
## .NET SDK Assembly Example
62
105
63
106
The following example uses the [Retry class](#retry-class) described below to retrieve one account using the <xref:Microsoft.Xrm.Sdk.IOrganizationService>.<xref:Microsoft.Xrm.Sdk.IOrganizationService.RetrieveMultiple*> method. If the request fails because an API limit has been exceeded, the `Retry` class will wait according to a delay specified by the server and try again.
64
107
@@ -67,7 +110,7 @@ var qe = new QueryExpression("account") { TopCount = 1 };
The `Retry` class demonstrates how to retry requests that fail with transient errors based on known <xref:Microsoft.Xrm.Sdk.OrganizationServiceFault> error codes. The `Retry` class waits before retrying. If the fault specifies a retry delay, wait according to the delay specified by the server. Else use exponential backoff to calculate the delay based on the number of retry attempts made.
73
116
@@ -133,7 +176,7 @@ public class Retry
133
176
134
177
### See also
135
178
179
+
[Administer Power Platform / Licensing and license management / Requests limits and allocations](/power-platform/admin/api-request-limits-allocations)<br />
180
+
[Common Data Service API limits overview](../../maker/common-data-service/api-limits-overview.md)<br />
136
181
[Use Common Data Service Web API](webapi/overview.md)<br />
137
-
[Use Common Data Service Organization Service](org-service/overview.md)<br />
138
-
[Execute batch operations using the Web API](webapi/execute-batch-operations-using-web-api.md)<br />
139
-
[Use ExecuteMultiple to improve performance for bulk data load](org-service/execute-multiple-requests.md)
182
+
[Use Common Data Service Organization Service](org-service/overview.md)
0 commit comments