277 lines
7.3 KiB
Markdown
277 lines
7.3 KiB
Markdown
# Performance Optimization Configuration Guide
|
|
|
|
## Overview
|
|
|
|
This document describes the configuration options for the UploadInspectionTaskResult performance optimization feature.
|
|
|
|
## Configuration Location
|
|
|
|
Add the following configuration section to your `appsettings.json` file:
|
|
|
|
```json
|
|
{
|
|
"PerformanceOptimization": {
|
|
"EnableCache": true,
|
|
"CacheExpirationHours": 1,
|
|
"MaxDegreeOfParallelism": 4,
|
|
"BatchSize": 100,
|
|
"MaxConcurrentRequests": 50,
|
|
"RequestTimeoutSeconds": 30,
|
|
"MaxFileSizeMB": 50,
|
|
"MaxFilesPerItem": 100,
|
|
"AllowedFileExtensions": ".jpg,.jpeg,.png,.bmp,.gif",
|
|
"EnablePerformanceMonitoring": true,
|
|
"PerformanceWarningThresholdMs": 5000,
|
|
"EnableRetry": true,
|
|
"MaxRetryAttempts": 3,
|
|
"RetryBaseDelayMs": 1000
|
|
}
|
|
}
|
|
```
|
|
|
|
## Configuration Options
|
|
|
|
### Cache Settings
|
|
|
|
#### EnableCache
|
|
- **Type**: Boolean
|
|
- **Default**: `true`
|
|
- **Description**: Enable or disable Redis caching for preset points and video devices
|
|
- **Recommendation**: Keep enabled for production environments to reduce database load
|
|
|
|
#### CacheExpirationHours
|
|
- **Type**: Integer
|
|
- **Default**: `1`
|
|
- **Description**: Cache expiration time in hours
|
|
- **Recommendation**:
|
|
- Use 1-2 hours for frequently changing data
|
|
- Use 4-8 hours for relatively stable data
|
|
- Monitor cache hit rates to optimize
|
|
|
|
### Parallelism Settings
|
|
|
|
#### MaxDegreeOfParallelism
|
|
- **Type**: Integer
|
|
- **Default**: `4`
|
|
- **Description**: Maximum number of concurrent file processing operations
|
|
- **Recommendation**:
|
|
- Set to number of CPU cores for CPU-bound operations
|
|
- Set to 2-4x CPU cores for I/O-bound operations
|
|
- Monitor CPU and I/O utilization to tune
|
|
|
|
### Batch Operation Settings
|
|
|
|
#### BatchSize
|
|
- **Type**: Integer
|
|
- **Default**: `100`
|
|
- **Description**: Number of items to insert in a single MongoDB batch operation
|
|
- **Recommendation**:
|
|
- Use 50-100 for small documents
|
|
- Use 20-50 for large documents
|
|
- Adjust based on document size and memory constraints
|
|
|
|
### Concurrency Settings
|
|
|
|
#### MaxConcurrentRequests
|
|
- **Type**: Integer
|
|
- **Default**: `50`
|
|
- **Description**: Maximum number of concurrent upload requests the system can handle
|
|
- **Recommendation**:
|
|
- Start with 50 and monitor system resources
|
|
- Increase if CPU/memory utilization is low
|
|
- Decrease if experiencing resource exhaustion
|
|
|
|
### Timeout Settings
|
|
|
|
#### RequestTimeoutSeconds
|
|
- **Type**: Integer
|
|
- **Default**: `30`
|
|
- **Description**: Maximum time allowed for processing a single upload request
|
|
- **Recommendation**:
|
|
- Set based on expected upload size and network speed
|
|
- Monitor timeout occurrences and adjust accordingly
|
|
- Consider 30-60 seconds for typical scenarios
|
|
|
|
### File Validation Settings
|
|
|
|
#### MaxFileSizeMB
|
|
- **Type**: Long
|
|
- **Default**: `50`
|
|
- **Description**: Maximum file size allowed for upload in megabytes
|
|
- **Recommendation**:
|
|
- Balance between user needs and system capacity
|
|
- Consider storage and bandwidth constraints
|
|
- Typical range: 10-100 MB
|
|
|
|
#### MaxFilesPerItem
|
|
- **Type**: Integer
|
|
- **Default**: `100`
|
|
- **Description**: Maximum number of files allowed per inspection item
|
|
- **Recommendation**:
|
|
- Set based on business requirements
|
|
- Consider processing time and storage implications
|
|
|
|
#### AllowedFileExtensions
|
|
- **Type**: String (comma-separated)
|
|
- **Default**: `.jpg,.jpeg,.png,.bmp,.gif`
|
|
- **Description**: Allowed file extensions for upload
|
|
- **Recommendation**:
|
|
- Restrict to necessary image formats
|
|
- Add video formats if needed: `.mp4,.avi,.mov`
|
|
|
|
### Performance Monitoring Settings
|
|
|
|
#### EnablePerformanceMonitoring
|
|
- **Type**: Boolean
|
|
- **Default**: `true`
|
|
- **Description**: Enable performance monitoring and detailed logging
|
|
- **Recommendation**:
|
|
- Keep enabled in development and staging
|
|
- Consider disabling in production if logging overhead is significant
|
|
|
|
#### PerformanceWarningThresholdMs
|
|
- **Type**: Long
|
|
- **Default**: `5000`
|
|
- **Description**: Operations exceeding this threshold (in milliseconds) will log warnings
|
|
- **Recommendation**:
|
|
- Set based on SLA requirements
|
|
- Typical values: 3000-10000 ms
|
|
|
|
### Retry Settings
|
|
|
|
#### EnableRetry
|
|
- **Type**: Boolean
|
|
- **Default**: `true`
|
|
- **Description**: Enable automatic retry for transient database errors
|
|
- **Recommendation**: Keep enabled for production resilience
|
|
|
|
#### MaxRetryAttempts
|
|
- **Type**: Integer
|
|
- **Default**: `3`
|
|
- **Description**: Maximum number of retry attempts for transient errors
|
|
- **Recommendation**:
|
|
- Use 2-3 retries for most scenarios
|
|
- Increase for highly unreliable networks
|
|
|
|
#### RetryBaseDelayMs
|
|
- **Type**: Integer
|
|
- **Default**: `1000`
|
|
- **Description**: Base delay in milliseconds for exponential backoff retry strategy
|
|
- **Recommendation**:
|
|
- Use 500-1000ms for typical scenarios
|
|
- Actual delay = BaseDelay * 2^(attempt-1)
|
|
|
|
## Environment-Specific Recommendations
|
|
|
|
### Development Environment
|
|
```json
|
|
{
|
|
"PerformanceOptimization": {
|
|
"EnableCache": false,
|
|
"EnablePerformanceMonitoring": true,
|
|
"MaxDegreeOfParallelism": 2,
|
|
"BatchSize": 50
|
|
}
|
|
}
|
|
```
|
|
|
|
### Staging Environment
|
|
```json
|
|
{
|
|
"PerformanceOptimization": {
|
|
"EnableCache": true,
|
|
"CacheExpirationHours": 1,
|
|
"EnablePerformanceMonitoring": true,
|
|
"MaxDegreeOfParallelism": 4,
|
|
"BatchSize": 100
|
|
}
|
|
}
|
|
```
|
|
|
|
### Production Environment
|
|
```json
|
|
{
|
|
"PerformanceOptimization": {
|
|
"EnableCache": true,
|
|
"CacheExpirationHours": 2,
|
|
"EnablePerformanceMonitoring": true,
|
|
"PerformanceWarningThresholdMs": 5000,
|
|
"MaxDegreeOfParallelism": 8,
|
|
"BatchSize": 100,
|
|
"MaxConcurrentRequests": 100
|
|
}
|
|
}
|
|
```
|
|
|
|
## Monitoring and Tuning
|
|
|
|
### Key Metrics to Monitor
|
|
|
|
1. **Cache Hit Rate**: Should be > 80% for effective caching
|
|
2. **Average Request Duration**: Should be < PerformanceWarningThresholdMs
|
|
3. **Concurrent Request Count**: Should be < MaxConcurrentRequests
|
|
4. **Retry Rate**: Should be < 5% of total requests
|
|
5. **File Processing Time**: Monitor per-file processing duration
|
|
|
|
### Performance Tuning Steps
|
|
|
|
1. **Start with default values**
|
|
2. **Monitor system metrics** (CPU, memory, I/O, network)
|
|
3. **Identify bottlenecks** using performance logs
|
|
4. **Adjust relevant settings** incrementally
|
|
5. **Test and validate** improvements
|
|
6. **Repeat** until performance targets are met
|
|
|
|
### Common Issues and Solutions
|
|
|
|
#### High CPU Usage
|
|
- Reduce `MaxDegreeOfParallelism`
|
|
- Reduce `MaxConcurrentRequests`
|
|
|
|
#### High Memory Usage
|
|
- Reduce `BatchSize`
|
|
- Reduce `MaxConcurrentRequests`
|
|
- Reduce `CacheExpirationHours`
|
|
|
|
#### Slow Database Operations
|
|
- Enable caching if disabled
|
|
- Increase `BatchSize` (if not memory-constrained)
|
|
- Check database indexes
|
|
|
|
#### Frequent Timeouts
|
|
- Increase `RequestTimeoutSeconds`
|
|
- Reduce `MaxFileSizeMB`
|
|
- Increase `MaxDegreeOfParallelism` for file processing
|
|
|
|
## Redis Configuration
|
|
|
|
Ensure Redis is properly configured in your connection strings:
|
|
|
|
```json
|
|
{
|
|
"ConnectionStrings": {
|
|
"RedisSetting:Host": "localhost",
|
|
"RedisSetting:Port": "6379",
|
|
"RedisSetting:DefaultDatabaseIndex": "0",
|
|
"RedisSetting:Name": "SOMS",
|
|
"RedisSetting:Auth": ""
|
|
}
|
|
}
|
|
```
|
|
|
|
## Validation
|
|
|
|
After configuration changes:
|
|
|
|
1. Restart the application
|
|
2. Check logs for configuration loading messages
|
|
3. Verify settings are applied correctly
|
|
4. Run performance tests to validate improvements
|
|
|
|
## Support
|
|
|
|
For issues or questions about configuration:
|
|
- Check application logs for configuration errors
|
|
- Review performance monitoring logs
|
|
- Consult the design document for detailed architecture information
|