Какие основные методы оптимизации производительности баз данных?

«Какие основные методы оптимизации производительности баз данных?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Оптимизация БД — комплексный процесс, включающий индексацию, настройку запросов, кэширование и мониторинг.

1. Индексация

-- Создание составного индекса
CREATE INDEX idx_user_email_active 
ON users(email, is_active) 
WHERE is_active = true; -- Частичный индекс в PostgreSQL

В JPA/Hibernate:

@Entity
@Table(indexes = {
    @Index(name = "idx_email", columnList = "email", unique = true),
    @Index(name = "idx_status_created", columnList = "status, created_at")
})
public class User {
    @Id
    private Long id;
    private String email;
    private String status;
    private LocalDateTime createdAt;
}

2. Оптимизация запросов

  • N+1 проблема: Используйте JOIN FETCH или @EntityGraph
    
    // Плохо: N+1 запрос
    List<Order> orders = entityManager.createQuery(
    "SELECT o FROM Order o", Order.class).getResultList();
    // Для каждого order: order.getItems() — отдельный запрос

// Решение: JOIN FETCH List orders = entityManager.createQuery( "SELECT DISTINCT o FROM Order o JOIN FETCH o.items", Order.class).getResultList();


- **Анализ плана выполнения:** `EXPLAIN ANALYZE SELECT ...`

### 3. Кэширование
- **Уровень приложения:** Redis, Memcached
- **Уровень ORM:** Hibernate Second-Level Cache
```xml
<!-- persistence.xml -->
<property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.cache.region.factory_class" 
          value="org.hibernate.cache.ehcache.EhCacheRegionFactory"/>

4. Настройка пула соединений (HikariCP)

# application.yml
spring:
  datasource:
    hikari:
      maximum-pool-size: 20
      minimum-idle: 5
      connection-timeout: 30000
      idle-timeout: 600000
      max-lifetime: 1800000

5. Мониторинг и анализ

  • Метрики: Query execution time, cache hit ratio, lock contention
  • Инструменты: Prometheus + Grafana, PostgreSQL pg_stat_statements
  • Процесс: 1) Измерение, 2) Выявление узких мест, 3) Оптимизация, 4) Валидация