Watch
1
0
Fork
You've already forked Seyyed_arc
0
forked from hesabix/arc
Seyyed_arc/hesabixAPI/docs/PHASE3_OPTIMIZATION_REPORT.md
2026-04-14 19:34:55 +03:30

4.2 KiB
Executable file
Raw Permalink Blame History

گزارش فاز 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

cd hesabixAPI
alembic upgrade head

2. بررسی Indexes

-- بررسی 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