Как дебажить медленную работу БД

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

Ответ

Для дебага медленной работы БД в Go можно использовать:

  1. Логирование запросов с помощью database/sql:
db.SetConnMaxLifetime(0)
db.SetMaxIdleConns(50)
db.SetMaxOpenConns(50)
db.SetConnMaxIdleTime(time.Hour)
  1. EXPLAIN ANALYZE для анализа запросов:
rows, err := db.Query("EXPLAIN ANALYZE SELECT * FROM users WHERE age > $1", 30)
  1. pprof для профилирования:
import _ "net/http/pprof"
go func() {
    log.Println(http.ListenAndServe("localhost:6060", nil))
}()
  1. Метрики через Prometheus или OpenTelemetry.

  2. Кэширование частых запросов (Redis, Memcached).

Ключевые моменты:

  • Проверяйте индексы
  • Избегайте N+1 запросов
  • Оптимизируйте сложные JOIN
  • Мониторьте нагрузку на соединения