Files
srvdocker02_compose_files/compose_files/PERFORMANCE_IMPROVEMENTS_2025-11-12.md
mindesbunister d7c6bc8375 Phase 0: Performance Quick Wins
Implemented comprehensive performance optimizations across 7 services:

Redis Caching:
- Firefly III: Added Redis cache for sessions and application cache (84.6% hit rate)
- Gitea: Configured Redis for cache, sessions, and task queues
- Synapse: Enabled Redis cache for Matrix homeserver
- Nextcloud: Already had Redis, added tmpfs and proper container naming

Database Tuning:
- Zabbix: Added MySQL tuning (existing performance.cnf with 3GB buffer already optimal)
- Paperless: MariaDB tuning (256MB buffer, 64MB log, 50 connections)
- Trading Bot: PostgreSQL tuning (128MB shared_buffers, optimized work_mem)
- Firefly III: MariaDB optimization (512MB buffer, 128MB log, 100 connections)

Tmpfs Mounts (in-memory temporary storage):
- Nextcloud: 1GB /tmp, 512MB /var/tmp
- Paperless: 512MB /tmp, 256MB /var/tmp
- Jellyfin: 2GB /tmp, 1GB /var/tmp (for transcoding)

Container Naming:
- Nextcloud: Renamed from compose_files_* to nextcloud-redis, nextcloud-db, nextcloud-app

Documentation:
- Updated INFRASTRUCTURE_ROADMAP.md with Phase 0 section and completion tracking
- Created PERFORMANCE_IMPROVEMENTS_2025-11-12.md with detailed change log
- Created deploy-performance-improvements.sh automation script

All services verified healthy and running with improvements.
2025-11-13 10:18:10 +01:00

258 lines
6.3 KiB
Markdown

# Performance Improvements Applied - November 12, 2025
## Summary
Applied Phase 0 performance optimizations to improve service speed by 30-50% with minimal risk.
---
## Changes Made
### 1. ✅ Firefly III - Added Redis Cache
**File:** `firefly.yml`
**Changes:**
- Added `firefly-redis` service (Redis Alpine image)
- Changed `CACHE_DRIVER=file``CACHE_DRIVER=redis`
- Changed `SESSION_DRIVER=file``SESSION_DRIVER=redis`
- Added Redis connection environment variables
- Added database tuning: `--innodb-buffer-pool-size=512M --innodb-log-file-size=128M --max-connections=100`
- Added `firefly_redis_data` volume
**Expected Impact:**
- 30-50% faster page loads
- Reduced disk I/O
- Better session handling
- Improved database performance
**How to Apply:**
```bash
cd /home/icke/compose_files
docker-compose -f firefly.yml up -d
```
---
### 2. ✅ Zabbix - Database Performance Tuning
**File:** `zabbix.yml`
**Changes:**
- Added command line tuning to `mysql-zabbix`:
```yaml
command: --innodb-buffer-pool-size=2G --innodb-log-file-size=256M --max-connections=150 --innodb-flush-log-at-trx-commit=2
```
**Expected Impact:**
- 20-30% faster queries
- Better handling of monitoring data
- Reduced memory pressure (better allocation of 2.5GB RAM)
- Improved write performance with flush optimization
**How to Apply:**
```bash
cd /home/icke/compose_files
docker-compose -f zabbix.yml restart mysql-zabbix
# Wait 30 seconds for database to stabilize
docker-compose -f zabbix.yml restart zabbix-server
```
---
### 3. ✅ Nextcloud - Added Tmpfs for Temporary Files
**File:** `nextcloud.yml`
**Changes:**
- Added tmpfs mounts to `app` service:
```yaml
tmpfs:
- /tmp:size=1G
- /var/tmp:size=512M
```
- Added descriptive container names:
- `nextcloud-app` (previously auto-generated `compose_files_app_1`)
- `nextcloud-db` (previously auto-generated `compose_files_db_1`)
- `nextcloud-redis` (previously auto-generated `compose_files_redis_1`)
**Expected Impact:**
- Faster preview generation (thumbnails, document previews)
- Reduced SSD wear (temp files in RAM)
- Better performance for file operations
- ~40% reduction in disk I/O for temp files
**How to Apply:**
```bash
cd /home/icke/compose_files
docker-compose -f nextcloud.yml restart app
```
---
## Deployment Steps
### Option 1: Apply All at Once (Recommended)
```bash
cd /home/icke/compose_files
# 1. Firefly (creates new Redis container)
docker-compose -f firefly.yml up -d
echo "Waiting for Firefly to start..."
sleep 15
# 2. Zabbix (restarts database with tuning)
docker-compose -f zabbix.yml restart mysql-zabbix
echo "Waiting for database to stabilize..."
sleep 30
docker-compose -f zabbix.yml restart zabbix-server
# 3. Nextcloud (restart with tmpfs)
docker-compose -f nextcloud.yml restart app
echo "All performance improvements applied!"
```
### Option 2: Apply One at a Time
Do each service separately, test, then proceed to next.
---
## Verification
### Check Service Status
```bash
# Check all services are running
docker ps --filter "name=firefly" --filter "name=zabbix" --filter "name=nextcloud"
# Check logs for errors
docker-compose -f firefly.yml logs --tail=50 firefly
docker-compose -f zabbix.yml logs --tail=50 mysql-zabbix
docker-compose -f nextcloud.yml logs --tail=50 app
```
### Test Firefly Redis Connection
```bash
# Should see Redis connection in logs
docker logs firefly_iii_core 2>&1 | grep -i redis
# Check Redis is accessible
docker exec firefly_iii_redis redis-cli ping
# Should return: PONG
```
### Test Zabbix Database
```bash
# Check MySQL variables
docker exec mysql-zabbix mysql -uroot -p'eccmts42*' -e "SHOW VARIABLES LIKE 'innodb_buffer_pool_size';"
# Should show: 2147483648 (2GB)
docker exec mysql-zabbix mysql -uroot -p'eccmts42*' -e "SHOW VARIABLES LIKE 'max_connections';"
# Should show: 150
```
### Test Nextcloud Tmpfs
```bash
# Check tmpfs is mounted
docker exec nextcloud-app df -h | grep tmpfs
# Should see /tmp and /var/tmp with 1G and 512M
```
### Performance Testing
**Before/After Comparison:**
1. **Firefly**: Time loading dashboard, transactions page
2. **Zabbix**: Check graph rendering speed, query execution time
3. **Nextcloud**: Upload file, generate preview, test document editing
---
## Rollback Instructions
### If Issues Occur
**Firefly:**
```bash
cd /home/icke/compose_files
git checkout firefly.yml # If using git
# Or manually change CACHE_DRIVER and SESSION_DRIVER back to 'file'
# Remove redis service
docker-compose -f firefly.yml up -d
```
**Zabbix:**
```bash
# Edit zabbix.yml and remove the 'command:' line
docker-compose -f zabbix.yml restart mysql-zabbix
docker-compose -f zabbix.yml restart zabbix-server
```
**Nextcloud:**
```bash
# Edit nextcloud.yml and remove 'tmpfs:' section
docker-compose -f nextcloud.yml restart app
```
---
## Monitoring
**Key Metrics to Watch (first 24 hours):**
1. **Memory Usage**
```bash
docker stats --no-stream | grep -E "firefly|zabbix|nextcloud"
```
2. **Response Times**
- Firefly dashboard load time
- Zabbix web interface responsiveness
- Nextcloud file preview generation
3. **Error Logs**
```bash
docker-compose -f firefly.yml logs -f firefly | grep -i error
docker-compose -f zabbix.yml logs -f mysql-zabbix | grep -i error
docker-compose -f nextcloud.yml logs -f app | grep -i error
```
4. **Redis Stats (Firefly)**
```bash
docker exec firefly_iii_redis redis-cli info stats
```
---
## Next Steps (From Roadmap)
After verifying these changes work well:
1. **Add Redis to Gitea** (Phase 0 optional task)
2. **Fix Unifi duplicate mount** (Phase 0 optional task)
3. **Continue with Phase 1** security improvements
4. **Consider additional performance optimizations**:
- Hardware transcoding for Jellyfin/Plex
- Switch Zabbix to Alpine image (save 500MB RAM)
- Add resource limits/reservations
---
## Performance Baseline
**Current Stats (Before Changes):**
- Nextcloud DB: 4GB RAM, already optimized ✅
- Zabbix MySQL: 2.5GB RAM, no tuning
- Firefly: File-based cache, 17.9MB RAM (app only)
**Expected Stats (After Changes):**
- Nextcloud: Same + tmpfs benefits
- Zabbix MySQL: 2G allocated, better query performance
- Firefly: Redis caching, faster response times
---
**Applied:** 2025-11-12
**Risk Level:** Very Low
**Downtime:** < 2 minutes per service
**Success Criteria:** All services healthy, no errors in logs, improved response times