2026-01-06 22:59:58 +08:00

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