Что делать, если долго отвечает база

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

Ответ

Используйте контекст (context.Context) для установки таймаутов и отмены долгих запросов. Пример:

ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
defer cancel()

row := db.QueryRowContext(ctx, "SELECT * FROM users WHERE id = ?", userID)
if err := row.Scan(&user); err != nil {
    if errors.Is(err, context.DeadlineExceeded) {
        log.Println("Query timeout exceeded")
    }
    return err
}

Дополнительные меры:

  • Настройте connection pool с разумными лимитами
  • Добавьте индексы для медленных запросов
  • Разделяйте запросы на чанки при больших данных
  • Мониторьте и логируйте медленные запросы