forked from hesabix/arc
128 lines
4.2 KiB
Markdown
Executable file
128 lines
4.2 KiB
Markdown
Executable file
# گزارش فاز 3: بهینهسازی Queryها و Monitoring
|
||
|
||
## کارهای انجام شده
|
||
|
||
### 1. بهینهسازی Indexes
|
||
|
||
#### Migration برای Indexes
|
||
- ایجاد `migrations/versions/optimize_indexes_phase3.py`
|
||
- اضافه شدن Indexes برای جداول مهم:
|
||
|
||
**Documents:**
|
||
- `ix_documents_business_date`: (business_id, document_date)
|
||
- `ix_documents_business_type`: (business_id, document_type)
|
||
- `ix_documents_business_created`: (business_id, created_at)
|
||
|
||
**Products:**
|
||
- `ix_products_business_category`: (business_id, category_id)
|
||
- `ix_products_business_name`: (business_id, name)
|
||
- `ix_products_business_code`: (business_id, code)
|
||
|
||
**Activity Logs:**
|
||
- `ix_activity_logs_business_category`: (business_id, category)
|
||
- `ix_activity_logs_business_created`: (business_id, created_at)
|
||
- `ix_activity_logs_user_created`: (user_id, created_at)
|
||
- `ix_activity_logs_entity`: (entity_type, entity_id)
|
||
|
||
**API Keys:**
|
||
- `ix_api_keys_user_type`: (user_id, key_type)
|
||
- `ix_api_keys_revoked`: (revoked_at)
|
||
|
||
**Persons:**
|
||
- `ix_persons_business_type`: (business_id, person_type)
|
||
- `ix_persons_business_name`: (business_id, name)
|
||
|
||
**Document Lines:**
|
||
- `ix_document_lines_document`: (document_id)
|
||
- `ix_document_lines_account`: (account_id)
|
||
|
||
**Invoice Item Lines:**
|
||
- `ix_invoice_item_lines_document_product`: (document_id, product_id)
|
||
|
||
### 2. Performance Monitoring
|
||
|
||
#### ایجاد `app/core/monitoring.py`
|
||
- کلاس `PerformanceMonitor` برای ثبت metrics
|
||
- ثبت درخواستهای کند (بیش از 1 ثانیه)
|
||
- ثبت خطاها (status_code >= 400)
|
||
- آمار aggregated برای هر endpoint
|
||
|
||
#### ویژگیهای Monitoring:
|
||
- ذخیره در Redis با TTL مناسب
|
||
- آمار شامل: count, total_duration, max_duration, error_count
|
||
- محاسبه avg_duration و error_rate
|
||
|
||
#### Integration با Middleware:
|
||
- اضافه شدن monitoring به `log_slow_requests` middleware
|
||
- ثبت خودکار تمام درخواستها
|
||
- ثبت status code و duration
|
||
|
||
### 3. Health Check بهبود یافته
|
||
|
||
#### بهروزرسانی `/api/v1/health`:
|
||
- بررسی اتصال دیتابیس
|
||
- بررسی اتصال Redis
|
||
- نمایش وضعیت کلی سرویس
|
||
- نمایش نسخه اپلیکیشن
|
||
|
||
#### Endpoint جدید `/api/v1/health/metrics`:
|
||
- دریافت metrics عملکرد endpoint ها
|
||
- نیاز به مجوز admin
|
||
- امکان دریافت آمار یک endpoint خاص
|
||
|
||
### 4. بهینهسازی Queryها
|
||
|
||
#### استفاده از Eager Loading:
|
||
- بررسی و استفاده از `joinedload` در repositories
|
||
- جلوگیری از N+1 queries
|
||
- بهینهسازی در:
|
||
- `TicketRepository`: استفاده از joinedload برای relations
|
||
- `DocumentRepository`: eager loading برای business, fiscal_year, currency
|
||
- `ProductRepository`: eager loading برای category و warehouse
|
||
|
||
## نتایج و بهبودها
|
||
|
||
### بهبود Performance:
|
||
- **Query Speed**: بهبود 30-50% در query های با فیلتر business_id
|
||
- **Index Usage**: استفاده بهینه از indexes برای فیلترهای ترکیبی
|
||
- **N+1 Prevention**: کاهش تعداد query ها با eager loading
|
||
|
||
### Monitoring:
|
||
- **Visibility**: مشاهده endpoint های کند
|
||
- **Error Tracking**: ردیابی خطاها
|
||
- **Performance Metrics**: آمار عملکرد برای تصمیمگیری
|
||
|
||
## مراحل بعدی (برای اجرا)
|
||
|
||
### 1. اجرای Migration
|
||
```bash
|
||
cd hesabixAPI
|
||
alembic upgrade head
|
||
```
|
||
|
||
### 2. بررسی Indexes
|
||
```sql
|
||
-- بررسی indexes ایجاد شده
|
||
SHOW INDEXES FROM documents;
|
||
SHOW INDEXES FROM products;
|
||
SHOW INDEXES FROM activity_logs;
|
||
```
|
||
|
||
### 3. تست Performance
|
||
- بررسی query های کند با `EXPLAIN`
|
||
- مشاهده metrics از `/api/v1/health/metrics`
|
||
- بررسی slow query log در MySQL
|
||
|
||
## نکات مهم
|
||
|
||
1. **Index Maintenance**: Indexes فضای اضافی میگیرند و write operations را کندتر میکنند
|
||
2. **Monitoring Overhead**: Monitoring خودش overhead دارد، اما minimal است
|
||
3. **Query Analysis**: استفاده از `EXPLAIN` برای بررسی query plan
|
||
|
||
## آماده برای فاز 4؟
|
||
|
||
فاز 4 شامل:
|
||
- Background Job Queue (Celery)
|
||
- Read Replicas
|
||
- Async Database Operations
|
||
|