framework/skills/tool-usage/diagnostics/db-performance/SKILL.md
Use for диагностики производительности БД и запросов 1С. Helps выявить slow query, план СУБД, блокировки, deadlock, TEMPDB/WAL, размеры таблиц и СКД на больших данных.
npx skillsauth add steelmorgan/1c-agent-based-dev-framework db-performanceInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Навык работает на двух уровнях одновременно: платформа 1С (запрос, метаданные, СКД) и СУБД (план, локи, ожидания, temp storage). Диагноз без обоих уровней — неполный.
| Симптом | Первый шаг |
|---------|-----------|
| Медленный отчёт / проведение / обмен | Шаг 1: назвать сценарий |
| SQL в ТЖ с большим Duration | Шаг 2: извлечь запрос + метаданные |
| Блокировки TLOCK / TDEADLOCK | Шаг 3: собрать СУБД-evidence |
| TEMPDB/WAL растёт при «только чтение» | Шаги 3-4: red flags + причины |
| Таблица выросла — отчёт стал медленнее | Полный алгоритм (шаги 1-5) |
Этот навык — нижний доказательный слой. Для переписывания текста запроса или СКД — передать в query-optimize.
| Задача | Инструмент |
|--------|-----------|
| Поиск запроса в коде | rg (ripgrep) по тексту BSL |
| Навигация к символу / процедуре | code-navigation |
| Получить SQL из ТЖ | tech-log-analysis → search_tech_log с name: DBMSSQL / DBPOSTGRS |
| Прогон теста / синтаксис | v8-runner |
| Информация о метаданных | code-navigation → структура регистра / справочника |
Нет прямого доступа к EXPLAIN ANALYZE, pg_stat_statements, sys.dm_exec_query_stats — инструкции по получению передаются пользователю/администратору.
Точно определить: что делает пользователь / какой фоновый процесс / какой шаг обмена / какой отчёт с какими отборами. Без конкретного сценария диагностика невозможна.
Зафиксировать: название, ожидаемое время, фактическое время, условия (объём данных, организация, период).
Платформенный слой:
rg "Запрос.Текст\s*=" --type-add "bsl:*.bsl" -t bsl.xml схемы компоновки данных через code-navigationТребование: текст запроса 1С обязательно в паре с хотя бы одним СУБД-артефактом (шаг 3). Анализ только текста запроса без СУБД-evidence не даёт доказательной базы.
Категории доказательств (нужна хотя бы одна):
| Категория | PostgreSQL | MS SQL Server | Что доказывает |
|-----------|-----------|---------------|----------------|
| План запроса | EXPLAIN (ANALYZE, BUFFERS) | SET STATISTICS IO, TIME ON + actual plan | Seq scan vs index scan, hash join cost, actual rows |
| Блокировки / ожидания | pg_locks, pg_stat_activity | sys.dm_exec_requests, sys.dm_os_waiting_tasks | Lock holder, waiter, тип блокировки |
| Temp storage | WAL size, pg_stat_bgwriter | TEMPDB usage, VLF count | Скрытая запись при «только чтение» |
| Статистика таблиц | pg_stat_user_tables | sys.dm_db_index_usage_stats | Seq scans vs index seeks, stale stats |
| ТЖ-артефакты | DBPOSTGRS events | DBMSSQL events | Duration, SQL текст, context |
Файловая ИБ — отдельная модель: нет СУБД-плана, производительность определяется структурой dbf-файлов, блокировки через платформенный менеджер.
Правило missing evidence: если СУБД-артефакт получить невозможно — зафиксировать явно: «СУБД-evidence отсутствует, причина: <...>». Не заменять предположениями.
Классифицировать причину по категории:
| Категория | Признаки |
|-----------|---------|
| Неэффективный запрос | Seq scan на большой таблице, отсутствие фильтра в виртуальной таблице, dot-dereference без ВЫРАЗИТЬ |
| Пропущенный / вредный индекс | Full table scan по полю без индекса; или индекс есть, но не используется из-за типа условия |
| Широкое чтение виртуальной таблицы | Остатки() без параметров периода / измерений |
| Query-in-loop | N запросов на N строк: Duration * N в ТЖ, повторяющийся SQL с разными параметрами |
| Lock contention | TLOCK / TDEADLOCK в ТЖ; блокирующий запрос в pg_locks / sys.dm_exec_requests |
| СУБД-обслуживание | Autovacuum, index rebuild, статистика устарела — план деградировал |
| Рост данных | Запрос корректен, но объём таблицы вырос — план поменялся |
Одна причина на итерацию. Если причин несколько — начать с наиболее вероятной по evidence.
v8-runnerРАЗРЕШЕННЫЕ и не отключать RLS/фильтры прав ради производительности без явного согласования безопасности.EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT)rows=, высокий shared hit при малом actual rowswork_mem переполнен → temp file в плане → WAL pressurepg_stat_activity.wait_event_type = 'Lock'SET STATISTICS IO ONtempdb.sys.dm_db_task_space_usagesys.dm_exec_requests.blocking_session_idTLOCK)## Сценарий и evidence
<Сценарий: ...>
<СУБД-evidence: план / ТЖ / отсутствует (причина)>
## Корневая причина (по убыванию вероятности)
1. <Категория> — <факт из evidence>
2. ...
## Изменение
<Одно конкретное изменение: текст / индекс / параметр>
<Ожидаемый измеримый эффект>
## Верификация
<Как измерить: команда / сценарий / сравнение ТЖ>
## Остаточные риски
<Объём данных / блокировки / СУБД-специфика>
depends_on:
testing
MUST use BEFORE making a judgment about the cause of a conflict, a test failure, or an artifact dispute. Defines the end-to-end verification method L1→L6 and the classification of the first broken link.
development
MUST use AFTER a work cycle with ≥2 iterations (wrote → error → fixed → success). Provides the retrospective procedure and the format for recording practice/anti-patterns in references/learned-patterns.md or {project}/.context/learned-patterns.md.
tools
MUST use WHEN you are writing reusable knowledge into RLM (pattern / architectural decision / stable domain fact) OR reading it before a non-trivial task/solution in the domain. Provides the breakdown of native-push vs RLM-pull, tools for writing and reading RLM, H-MEM levels, and hygiene.
testing
MUST use WHEN the task is classified as simple (< 20 lines, 1 file, no new metadata objects, no architectural decisions). Provides a short cycle of 3 steps with a guard on the self path and mandatory verify.