:::mermaid
flowchart TD
A["🔵 Bắt đầu: analyze_workload_indexes"] --> B["Phân tích tham số:<br/>max_index_size_mb, method"]
B --> C["Kiểm tra pg_stat_statements Extension"]
C --> D{"Extension khả dụng?"}
D -->|"Không"| E["Trả về lỗi:<br/>pg_stat_statements cần thiết"]
D -->|"Có"| F["Query Top Queries theo Resources"]
F --> G["Lấy Queries với:<br/>- total_exec_time cao<br/>- calls nhiều<br/>- shared_blks_read cao"]
G --> H["Lọc Queries phân tích được:<br/>- Câu SELECT<br/>- Không phải system queries"]
H --> I{"method?"}
I -->|"dta"| J["Phân tích DTA"]
I -->|"llm"| K["Phân tích LLM"]
J --> J1["Với mỗi Query:"]
J1 --> J2["Phân tích cấu trúc Query"]
J2 --> J3["Xác định thao tác chậm:<br/>- Sequential Scans<br/>- Sort Operations<br/>- Hash Joins"]
J3 --> J4["Đề xuất Covering Indexes"]
J4 --> L
K --> K1["Gửi batch Queries tới LLM"]
K1 --> K2["AI nhận diện Pattern"]
K2 --> K3["Tối ưu Cross-Query"]
K3 --> L
L["Thu thập tất cả đề xuất Index"]
L --> M["Loại bỏ Indexes trùng lặp"]
M --> N["Ước tính kích thước"]
N --> O{"Tổng kích thước <= Ngân sách?"}
O -->|"Không"| P["Ưu tiên theo Impact"]
O -->|"Có"| Q["Bao gồm tất cả Indexes"]
P --> Q
Q --> R["Kiểm tra với HypoPG"]
R --> S["Tính ROI:<br/>Cải thiện / Kích thước Index"]
S --> T["Định dạng đề xuất:<br/>- Danh sách ưu tiên<br/>- Cải thiện dự kiến<br/>- Workload coverage"]
T --> U["Trả về kết quả"]
U --> V["🔴 Kết thúc"]
E --> V
style A fill:#4CAF50,color:white
style V fill:#f44336,color:white
style D fill:#FF9800,color:white
style I fill:#2196F3,color:white
style O fill:#FF9800,color:white