# Tối Ưu Hiệu Suất (Performance Optimization)

Performance optimization patterns for GoodGo microservices including database query optimization, memory leak detection, profiling, connection pooling, and caching strategies.
> Các patterns tối ưu hiệu suất cho GoodGo microservices bao gồm tối ưu database queries, phát hiện memory leaks, profiling, connection pooling, và caching strategies.

## Tổng Quan

Performance optimization patterns help identify and fix performance bottlenecks, optimize database queries, detect memory leaks, and improve overall application performance.

Các patterns tối ưu hiệu suất giúp xác định và sửa các nút cổ chai hiệu suất, tối ưu database queries, phát hiện memory leaks, và cải thiện hiệu suất ứng dụng tổng thể.

## Khi Nào Sử Dụng

Use this skill when optimizing performance, profiling applications, or detecting bottlenecks.

Sử dụng skill này khi tối ưu hiệu suất, profiling ứng dụng, hoặc phát hiện bottlenecks.

## Quy Trình Tối Ưu Hiệu Suất

Quy trình tối ưu hiệu suất tuân theo phương pháp có hệ thống để xác định, phân tích và giải quyết các nút cổ chai hiệu suất.

The performance optimization process follows a systematic approach to identify, analyze, and resolve performance bottlenecks.

```mermaid
flowchart TD
    Start([Start Optimization]) --> Identify[Identify Performance Issue]
    Identify --> Monitor[Monitor Metrics]
    Monitor --> Profiling[Profile Application]
    Profiling --> Analyze[Analyze Results]
    Analyze --> IdentifyBottleneck{Identify Bottleneck}
    
    IdentifyBottleneck -->|Database| OptimizeDB[Optimize Queries]
    IdentifyBottleneck -->|Memory| OptimizeMem[Fix Memory Leaks]
    IdentifyBottleneck -->|Network| OptimizeNet[Optimize Connections]
    IdentifyBottleneck -->|Cache| OptimizeCache[Improve Caching]
    
    OptimizeDB --> Implement[Implement Optimization]
    OptimizeMem --> Implement
    OptimizeNet --> Implement
    OptimizeCache --> Implement
    
    Implement --> Test[Test Changes]
    Test --> Verify{Performance Improved?}
    Verify -->|Yes| Monitor
    Verify -->|No| Analyze
    Monitor --> Threshold{Meets Targets?}
    Threshold -->|Yes| Complete([Optimization Complete])
    Threshold -->|No| Profiling
```

## Quy Trình Tối Ưu Query

Tối ưu database query là một khía cạnh quan trọng của hiệu suất. Quy trình này cho thấy cách tối ưu query một cách có hệ thống.

Database query optimization is a critical aspect of performance. This flow shows how to systematically optimize queries.

```mermaid
flowchart TD
    Start([Query Performance Issue]) --> Analyze[Analyze Query Performance]
    Analyze --> CheckIndexes[Check Indexes]
    CheckIndexes --> Explain[Run EXPLAIN ANALYZE]
    Explain --> IdentifyIssues{Identify Issues}
    
    IdentifyIssues -->|N+1 Queries| FixN1[Use Include/Join]
    IdentifyIssues -->|Missing Index| AddIndex[Add Database Index]
    IdentifyIssues -->|Slow Query| OptimizeQuery[Rewrite Query]
    IdentifyIssues -->|Unbounded| AddPagination[Add Pagination]
    
    FixN1 --> VerifyQuery[Verify Query Performance]
    AddIndex --> VerifyQuery
    OptimizeQuery --> VerifyQuery
    AddPagination --> VerifyQuery
    
    VerifyQuery --> TestQuery{Query Time < 50ms?}
    TestQuery -->|Yes| Complete([Optimization Complete])
    TestQuery -->|No| Analyze
    
    style FixN1 fill:#e1f5e1
    style AddIndex fill:#e1f5e1
    style OptimizeQuery fill:#e1f5e1
    style AddPagination fill:#e1f5e1
```

## Quy Trình Profiling

Quy trình profiling giúp xác định các nút cổ chai hiệu suất thông qua việc thu thập và phân tích dữ liệu có hệ thống.

The profiling process helps identify performance bottlenecks through systematic data collection and analysis.

```mermaid
flowchart TD
    Start([Start Profiling]) --> Setup[Setup Profiling Tools]
    Setup --> ChooseTool{Choose Profiling Type}
    
    ChooseTool -->|CPU| CPUProf[CPU Profiling]
    ChooseTool -->|Memory| MemProf[Memory Profiling]
    ChooseTool -->|Database| DBProf[Database Query Profiling]
    
    CPUProf --> CollectCPU[Collect CPU Metrics]
    MemProf --> CollectMem[Collect Memory Metrics]
    DBProf --> CollectDB[Collect Query Metrics]
    
    CollectCPU --> Analyze[Analyze Profiling Data]
    CollectMem --> Analyze
    CollectDB --> Analyze
    
    Analyze --> IdentifyHotspots[Identify Hotspots]
    IdentifyHotspots --> Prioritize[Prioritize Issues]
    Prioritize --> Optimize[Optimize Critical Paths]
    Optimize --> ReProfile[Re-run Profiling]
    ReProfile --> Compare{Performance Improved?}
    Compare -->|Yes| Complete([Profiling Complete])
    Compare -->|No| IdentifyHotspots
    
    style CPUProf fill:#e3f2fd
    style MemProf fill:#e3f2fd
    style DBProf fill:#e3f2fd
```

## Các Patterns Chính

### Database Query Optimization / Tối Ưu Database Queries

```typescript
// EN: Avoid N+1 queries
// VI: Tránh N+1 queries
const users = await userRepository.findAll({
  include: { orders: true }, // EN: Single query / VI: Single query
});
```

### Memory Profiling / Memory Profiling

```typescript
// EN: Monitor memory usage
// VI: Giám sát memory usage
const profiler = new MemoryProfiler();
profiler.start();
```

## Best Practices / Thực Hành Tốt

1. Use indexes, avoid N+1 queries / Sử dụng indexes, tránh N+1 queries
2. Monitor memory usage / Giám sát memory usage
3. Cache frequently accessed data / Cache dữ liệu thường truy cập

## Skills Liên Quan

- [Caching Patterns](./caching-patterns.md) - Caching strategies / Chiến lược caching
- [Observability & Monitoring](./observability-monitoring.md) - Monitoring / Giám sát

## Tài Nguyên

- Skill Source: `.cursor/skills/performance-optimization/SKILL.md`
