SQL-Top

Live Query Monitor

v0.1.0
Go 1.25+ · TUI
GitHub →
sql-top — live monitoring session
$ sql-top postgres://admin@db-prod-1:5432/mydb
PID User DB State WaitEvent Duration Query
87342 app_user PG active ClientRead 2.3s SELECT u.id, u.name, o.total FROM users u JOIN orders o …
87341 replicator PG idle 15.8s COPY analytics_events FROM '/data/export.csv'
87338 ml_user PG active ExtendedQuery 8.1s WITH features AS (SELECT …) UPDATE predictions SET score = …
87335 analytics MY locked Lock 22.7s UPDATE inventory SET quantity = quantity - 1 WHERE id = …
87330 etl_user CH active IO 45.2s SELECT toDate(timestamp), count(*), uniq(user_id) FROM events …
87328 app_user PG idle 0.4s COMMIT
87295 batch_user PG error PgSleep 120.0s SELECT pg_sleep(120) — killed
▸ EXPLAIN ANALYZE
Node Type
Actual Rows
Total Cost
Planning Time
Execution Time

SQL-Top — TUI-профайлер для мониторинга PostgreSQL, MySQL и ClickHouse в реальном времени. Single binary на Go 1.25+ (~21MB, zero deps), запуск за 70ms. Diff Engine, EXPLAIN без ANALYZE, Kill Query, кольцевой буфер на 5000 запросов, Hexagonal Architecture.

01 В цифрах

SQL-Top в сухих метриках — производительность, покрытие и совместимость.

🧪
0
Unit-тестов
Покрытие критичных путей ~50%. 6 — sanitize, 8 — diff, 17 — UI, 4×3 — конструкторы адаптеров.
🗄️
0
Поддерживаемых СУБД
PostgreSQL 12+, MySQL 5.7+/8.0+, ClickHouse 21.8+. Единый интерфейс через Hexagonal Architecture.
0
Время запуска
Среднее из 5 запусков на Windows (Go 1.25.0). Single binary, zero deps — без JVM, без интерпретаторов.
📦
0
Размер бинарника
Без сжатия UPX. Go 1.25+ с TinyGo-дружественной кодобазой. ~21MB для всех трёх адаптеров БД.

02 Установка

Go 1.25+ и доступ к целевой БД — всё, что нужно. Single binary, zero dependencies.

Через go install
go install github.com/turkprogrammer/sql-top/cmd/sql-top@latest
Из исходников
git clone https://github.com/turkprogrammer/sql-top.git

03 Возможности

12 ключевых функций, которые делают SQL-Top незаменимым инструментом для DBA и разработчика.

🔍
01

Live Monitoring

Активные запросы обновляются каждую секунду. PID, пользователь, БД, состояние, длительность — вся информация в реальном времени.

Real-time
🔄
02

Diff Engine

Отслеживание новых и завершённых запросов. Delta Highlighting — изменения подсвечиваются цветом: зелёный (новый), оранжевый (завершён), голубой (изменён).

Delta
📋
03

EXPLAIN Query

Просмотр плана выполнения запроса без выхода из TUI. Safe EXPLAIN без ANALYZE — не выполняет запрос, только показывает план.

Profiling
🛑
04

Kill Query

Завершение долгих запросов по PID с подтверждением. Timeout настраивается через SQLTOP_KILL_TIMEOUT (по умолчанию 5s).

Safety
📜
05

Ring Buffer

Кольцевой буфер на 5000 запросов — полная история активностей. Ни один запрос не потеряется, даже при высокой нагрузке.

History
📎
06

Copy to Clipboard

Копирование текста запроса в буфер обмена одной клавишей (y). Подтверждение копирования с таймаутом 2 секунды.

UX
🎨
07

Adaptive TUI

Адаптивная вёрстка под размер терминала. Bubbletea с модальными окнами для EXPLAIN, Kill confirmation и Copy notification.

Bubbletea
🏗️
08

Hexagonal Architecture

Ports & Adapters + Dependency Injection. Интерфейсы в domain, реализация в infrastructure. Легко добавлять новые СУБД.

Architecture
📊
09

Multi-DB Support

PostgreSQL 12+, MySQL 5.7+/8.0+, ClickHouse 21.8+. Единый DSN-формат, общий интерфейс, специфичные для каждой СУБД детали.

3-in-1
💚
10

Graceful Shutdown

Context cancellation + signal handling. Корректное завершение всех соединений с БД при Ctrl+C или q.

Reliability
📡
11

Ping Monitoring

Пинг-мониторинг подключения к БД каждые 5 секунд (настраивается через SQLTOP_PING_INTERVAL). Визуальный индикатор статуса.

Health
🛡️
12

Safe EXPLAIN

EXPLAIN без ANALYZE — план выполнения без риска модификации данных. Безопасность на первом месте, в отличие от GUI-инструментов с ANALYZE по умолчанию.

Security

04 Горячие клавиши

Всё управление — с клавиатуры. Минимум движений, максимум эффективности.

Клавиша Действие Описание
k Navigation Up Переместиться вверх по списку запросов
j Navigation Down Переместиться вниз по списку запросов
Enter Show EXPLAIN Показать план выполнения для выбранного запроса
k Kill Query Завершить выбранный запрос (с подтверждением)
y Copy Query Скопировать текст запроса в буфер обмена
ESC Close Modal Закрыть модальное окно (EXPLAIN / Kill confirmation)
q Quit Выход из приложения
Ctrl+C Graceful Shutdown Корректное завершение: закрытие соединений, освобождение ресурсов

05 Архитектура

Hexagonal Architecture (Ports & Adapters) с Dependency Injection и композицией через BaseAdapter.

Composition Root
cmd/sql-top
DI · Graceful Shutdown
TUI Layer
internal/ui
Bubbletea · Lipgloss
Domain Layer
internal/domain
Interfaces (Ports)
BaseAdapter
internal/infrastructure/base
Composition · Sub-interfaces
🐘
PostgreSQL
pgx/v5 · 12+
🐬
MySQL
go-sql-driver · 5.7+
🧊
ClickHouse
clickhouse-go/v2 · 21.8+
Каждый адаптер встраивает *base.BaseAdapter и реализует порты:
DBConnector QueryFetcher QueryExplainer QueryKiller Pinger
Logger DI: *slog.Logger через конструктор

06 Сравнение

SQL-Top vs альтернативы: почему Go single binary выигрывает у Python-зависимостей и тяжёлых IDE.

Критерий 🚀 SQL-Top 🐍 pg_activity 🐘 DBeaver / DataGrip
Тип инструмента TUI (Terminal UI) TUI (Terminal UI) GUI (Desktop IDE)
Язык / Стек Go (Single Binary) Python (pip deps) Java / Eclipse
Портативность ✅ Отличная (~21MB, zero deps) ⚠️ Средняя (нужен Python) 📦 Низкая (500MB+ installer)
Время запуска ⏱️ Мгновенно (~70ms) ⏱️ Быстро (<500ms) ⏳ Долго (5–15 сек)
Поддержка СУБД 🔌 PG, MySQL, ClickHouse ❌ Только PostgreSQL ✅ Все популярные
Безопасность 🛡️ Safe EXPLAIN (No ANALYZE) ❌ Нет EXPLAIN в TUI ⚠️ Опасно (ANALYZE по умолчанию)
Нагрузка на БД 📉 Минимальная (оптимизирован) Минимальная 📊 Зависит от плагинов
Киллер-фича 💡 Delta Highlighting Simple Monitor Визуальный конструктор

07 Часто задаваемые вопросы (FAQ)

Что такое SQL-Top и для чего он нужен?
SQL-Top — это терминальный TUI-профайлер для мониторинга активных запросов к базам данных в реальном времени. Поддерживает PostgreSQL, MySQL и ClickHouse. Позволяет видеть все выполняющиеся запросы, анализировать их через EXPLAIN (без ANALYZE), завершать проблемные запросы (Kill Query) и отслеживать изменения через Diff-движок. Написан на Go 1.25+ и распространяется как single binary (~21MB) без внешних зависимостей.
Какие базы данных поддерживает SQL-Top?
SQL-Top поддерживает три СУБД: PostgreSQL (через pgx/v5), MySQL (через go-sql-driver/mysql) и ClickHouse (через clickhouse-go/v2). Вы можете переключаться между ними через флаг -dsn или DSN в аргументе командной строки. Разные СУБД можно мониторить в разных сессиях терминала.
Чем SQL-Top лучше pg_activity или DBeaver?
В отличие от pg_activity (работает только с PostgreSQL, требует Python), SQL-Top поддерживает MySQL и ClickHouse, распространяется как single binary на Go, запускается за ~70ms и не требует установки интерпретатора. По сравнению с DBeaver/DataGrip — SQL-Top не занимает 500MB+ диска, работает в терминале (удобно для серверов), и включает встроенные функции EXPLAIN без риска ANALYZE и Kill Query с подтверждением.
Как установить SQL-Top?
Установка одной командой: go install github.com/turkprogrammer/sql-top/cmd/sql-top@latest. Требуется Go 1.25+. После установки бинарник будет доступен как sql-top. Также можно скачать готовый бинарник со страницы релизов на GitHub.
Безопасно ли использовать EXPLAIN в SQL-Top?
Да. SQL-Top использует Safe EXPLAIN без ANALYZE — запрос не выполняется физически, только анализируется план выполнения. Это исключает риск модификации данных, блокировок или случайного DROP/INSERT/UPDATE при анализе. Подтверждения на Kill Query также требуют подтверждения перед отправкой.
Какие горячие клавиши поддерживаются в SQL-Top?
SQL-Top поддерживает полное управление с клавиатуры: q/Esc — выход, / — навигация по запросам, e — EXPLAIN выбранного запроса, k — Kill Query с подтверждением, c — копирование запроса в буфер обмена, d — переключение режима Diff, p — Ping-мониторинг подключения к БД. Также поддерживается выделение цветом статусов запросов: активные (зелёный), ожидающие (жёлтый), заблокированные (красный).

08 Конфигурация

Настройка через константы в domain/config.go и переменные окружения.

Подключение к БД
DefaultMaxConns2
DefaultMinConns1
DefaultConnMaxLifetime5 мин
Polling
DefaultPollInterval1 сек
DefaultRingBufferCapacity5000
UI
DefaultModalWidth80
DefaultModalHeight30
DefaultQueryTruncateLength60
Timeout
ClipboardConfirmTimeout2 сек
PingInterval5 сек
KillQueryTimeout5 сек
ExplainQueryTimeout10 сек
Переменные окружения
SQLTOP_DEBUG0 (по умолчанию)
SQLTOP_KILL_TIMEOUT5s
SQLTOP_EXPLAIN_TIMEOUT10s
SQLTOP_PING_INTERVAL5s
SQLTOP_CLIPBOARD_TIMEOUT2s

09 Примеры подключения

DSN как positional аргумент или через флаг -dsn. Работает из коробки.

PG

PostgreSQL

sql-top postgres://postgres:***@localhost:5432/mydb
Удалённое с SSL: postgres://user:***@db.example.com:5432/prod?sslmode=require
Со схемой: postgres://user:***@localhost:5432/db?search_path=analytics
MY

MySQL

sql-top mysql://root:***@localhost:3306/mydb
Удалённое: mysql://app:***@db.example.com:3306/production
С TLS: mysql://user:***@localhost:3306/db?tls=preferred
CH

ClickHouse

sql-top clickhouse://default:***@localhost:9000/mydb
Удалённое: clickhouse://admin:***@clickhouse.example.com:9000/analytics
С флагом -dsn: sql-top -dsn postgres://user:***@host:5432/db

10 Стандарты качества

KISS, YAGNI, SOLID, Hexagonal Architecture — каждый принцип соблюдается на всех уровнях кода.

Принципы
KISS
YAGNI
SOLID
Hexagonal Architecture
No Globals / Singletons
Functions ≤50 LOC
Технологии
ЯзыкGo 1.25+
TUI FrameworkBubbletea
StylingLipgloss
PG Driverpgx/v5
MySQL Drivergo-sql-driver/mysql
CH Driverclickhouse-go/v2
Error Handling
Error wrapping✅ %w
errors.Is() сравнения
Defensive Coding
DSN Masking в логах
Structured Logginglog/slog

11 Автор

Юсупов Роберт Рахимович
Senior Backend Engineer

Production-проекты: Fraud Detection Engine, LogT, MT, Geo-mapping, Stable ID. 18+ лет в разработке, Go/PHP, AI и high-load backend.