本文へ移動
cccskills
無料GitHub で公開

query-perf-review

Revisa cambios de performance de queries ClickHouse y Postgres (vambe-datascience, CRM, réplicas) contra los errores y aprendizajes de la ronda

インストール方法を見る

含まれるファイル(3)

  • SKILL.md6.6 KB
  • references/clickhouse.md3.1 KB
  • references/postgres.md5.2 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Query perf review

Revisa un cambio de performance de queries buscando lo que los benchmarks no ven.

En la ronda de septiembre 2026 (17 PRs, #865–#882) los tres bugs que llegaron a dev pasaron todos los benchmarks:

  • una llamada quedó fuera de su timeout;
  • un caché usaba el contacto como llave cuando hacía falta el ticket;
  • un orden implícito cambió qué tipo ve el cliente.

Los encontró una revisión que razonó el flujo, no los tiempos. Esta skill es esa revisión.

Fuente completa (250 queries, mediciones y descartes): https://claude.ai/artifact/P5xJSsnXocAe1AicvnoatR

Entrada

  • PR: gh pr view <N> --json title,body y gh pr diff <N>.
  • Rama local: git diff origin/dev...HEAD.
  • Query suelta o archivo: leer la función y sus llamadores.

Leer el body del PR entero: ahí están las mediciones que hay que auditar.

Pasos

  1. Clasificar el cambio. Para cada archivo del diff, anotar el motor (ClickHouse, CRM Postgres o datascience Postgres) y qué tipo de cambio hace:

    • agrupa llamadas ("una vez por ventana / día / corrida");
    • agrega o cambia un caché;
    • reescribe SQL para el planner (barreras, EXISTS, INTERSECT, CTE);
    • cambia el orden (collation, DISTINCT → GROUP BY, quita un ORDER BY o un sort);
    • toca índices o escrituras;
    • cita números en un docstring o en el body.

    Si el diff es grande, revisar primero los cambios de orden y de caché: ahí estuvieron los bugs que llegaron a dev.

  2. Leer la referencia del motor. Si toca ClickHouse, leer references/clickhouse.md; si toca Postgres, references/postgres.md. Cada una trae las palancas que funcionaron, las que no, y los errores reales con su PR.

  3. Revisar la correctness según el tipo de cambio. Es la parte que el benchmark no cubre:

    • Agrupa llamadas. ¿La llamada nueva sigue dentro del mismo asyncio.timeout y del mismo fallback que la vieja? ch_query devuelve None ante excepciones, pero no corta un await colgado. ¿Hay un test de cuelgue para el camino nuevo? ¿Se sigue respetando el corte temprano por cupo (fetch_limit)?
    • Caché. ¿La llave tiene la granularidad que necesita el consumidor (ticket, no contacto)? ¿Qué pasa si aparece una fila nueva entre la lectura cacheada y su uso? La réplica cambia entre páginas. Al re-leer, ¿reemplaza lo cacheado o lo anexa?
    • Orden. Buscar todos los consumidores del resultado (find_referencing_symbols) y preguntar si alguno dependía del orden. Sin ORDER BY no hay orden garantizado, y un desempate tiene que ser explícito y determinista.
    • Reescritura de SQL. ¿Se mantienen los filtros (borrados, tests, estados raros como ''), el desempate y el orden de salida? ¿Qué pasa con los NULL? Por ejemplo, INTERSECT equivale a IN solo si el lado izquierdo ya es DISTINCT y no tiene NULL.
  4. Auditar la evidencia de medición del body contra el método de abajo. Marcar lo que falta. No inventar números ni correr queries pesadas para completarlos.

  5. Reportar con el formato de abajo.

Método de medición esperado

  • Tres clientes por query: el peor (más volumen), el de más historia y el mediano. Se reporta el p50 (mediana) del peor. Un cambio que mejora al chico y empeora al grande no entra.
  • Corridas intercaladas entre original y variante (A B B A). Sin intercalar, un −13% resultó ser falso.
  • Mismo resultado = hash del output completo normalizado, medido donde lo consume el cliente, no en la función tocada ni contando filas. Así se escapó el bug de #878.
  • Flujo real, no solo SQL: correr el método real con settings de prod y contar las llamadas a la base. En un fetch, probar vacío, varios lotes, corte por cap y fallo de ClickHouse.
  • En frío, comparado contra el timeout de prod. Un número con caché caliente no sirve para decir "hay margen".
  • Un timeout no es una medición: "> 120 s" es un resultado incompleto, no un p50. Con N=1 no hay percentiles.
  • Contexto de prod replicado: statement_timeout, work_mem, enable_nestloop. Metabase deja correr 120 s; prod corta a 30 s.
  • Estimaciones calculadas con los caps reales y etiquetadas "estimado" hasta medirlas.
  • Test que falla en origin/dev, y un PR por cambio.
  • Métrica en prod para confirmar después del deploy. Si el camino no la tiene, instrumentar primero, como en #882.

Acceso a datos

Validar contra una base solo si el hallazgo no se puede confirmar leyendo el código. Hacerlo por Metabase (mcp__metabase__execute_query), con LIMIT y statement_timeout corto, y antes revisar que cada filtro y cada join usan índice. Si la query no es trivial (join, agregación sobre tabla grande, sin rango indexado), mostrarla al usuario antes de correrla.

La DB de datascience no está en Metabase: pedirle al usuario la vía antes de medir. Las escrituras se revisan solo con EXPLAIN plano, nunca ejecutadas.

No hacer

  • Recortar historia de mensajes para ganar velocidad.
  • Optimizar queries submilisegundo o agregados de decenas de ms que corren una vez por semana.
  • Borrar un índice por ser prefijo de otro sin mirar su tamaño y su uso.
  • Culpar a una query por seq_scan acumulados sin atribuirlos: el contador cuenta scans iniciados, no lecturas completas.
  • Copiar propuestas de otra revisión sin revisar la semántica.

Formato de salida

Veredicto: listo / listo con cambios / no listo, en una línea con el motivo principal.

Hallazgos, del más grave al menos grave: resultado incorrecto silencioso > cuelgue o timeout > evidencia insuficiente > estilo. Cada hallazgo lleva:

  • archivo:línea y qué pasa, con un escenario concreto (esta entrada produce este resultado incorrecto);
  • por qué importa, citando el aprendizaje o el PR previo que lo respalda;
  • cómo verificarlo, con un test o una medición concreta.

Evidencia de medición: una tabla corta con cada punto del método marcado ✅, ❌ o "no aplica", citando el body.

Fuera de alcance: si el PR hace algo de la lista "No hacer".

Si no hay hallazgos, decirlo en una línea y listar qué se revisó.

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Aplica el branding de Vambe a PPTX, DOCX, XLSX y HTML. Usa al crear presentaciones, Word, Excel o páginas con identidad visual de Vambe, o si pide "hacerlo bonito" / "estilo Vambe".

日本語の概要は準備中です。原文の説明を表示しています。

sebastianbreguel/dotfiles32026年10月8日 更新

Read this skill before the first step that uses the built-in browser, the browser pane inside the Claude desktop app (also called the in-app browser, the browser pane, Claude's browser, or "your own browser"), whose tools are named mcp__Claude_Browser__* when the session runs in the desktop app and mcp__remote-devices__Claude_Browser__* when a cloud session is linked to the person's computer; before those tools are turned on there may be a single enable__mcp__remote-devices__Claude_Browser tool instead. It covers the pane's persistent sign-ins, tabs and preview_start, reading pages as text, site approvals, what the pane cannot open, and what to do when it cannot be reached. It is not for Claude in Chrome (mcp__claude-in-chrome__* tools), which has its own skill, and it does not decide which browser to use.

日本語の概要は準備中です。原文の説明を表示しています。

sebastianbreguel/dotfiles32026年10月8日 更新

Read this skill before the first step that uses Claude in Chrome, the browser extension whose tools are named mcp__claude-in-chrome__* (also called Chrome, the browser extension, or the external browser) and which acts in the person's real Chrome with their own sign-ins; before those tools are turned on there may be a single enable__mcp__claude-in-chrome tool instead. It covers loading the tools in one ToolSearch call, checking the person's open tabs and working in a new tab, site permissions, GIF recordings, console logs, dialogs to avoid, and when to stop and ask. It is not for the built-in browser (mcp__Claude_Browser__* or mcp__remote-devices__Claude_Browser__* tools), which has its own skill, and it does not decide which browser to use.

日本語の概要は準備中です。原文の説明を表示しています。

sebastianbreguel/dotfiles32026年10月8日 更新

Shared vocabulary for designing deep modules. Use when the user wants to design or improve a module's interface, find deepening opportunities, decide where a seam goes, make code more testable or AI-navigable, or when another skill needs the deep-module vocabulary.

日本語の概要は準備中です。原文の説明を表示しています。

sebastianbreguel/dotfiles32026年10月8日 更新

Read this skill before the first step of any request to do something in an app on the person's own computer (Notes, Finder, System Settings, any desktop app), to look at their screen, or for "computer use". Computer use (desktop control) lets Claude take screenshots of the person's desktop and control it with clicks, typing and scrolling through the Claude desktop app; its tools are named mcp__computer-use__* when the session runs in the desktop app and mcp__remote-devices__computer_* when a cloud session is linked to the person's computer; before computer use is turned on for a conversation there may be no such tools, only an enable__mcp__remote-devices__computer tool, which turns it on. It covers turning it on, picking the right tool, the access flow, and the safety rules for tiered apps, links and financial actions. It is not for websites, which go through Claude in Chrome or the built-in browser and their own skills.

日本語の概要は準備中です。原文の説明を表示しています。

sebastianbreguel/dotfiles32026年10月8日 更新

Use this skill when the user's prompt requires (1) researching a topic across multiple sources, comparing options or alternatives, analyzing trends or history, understanding markets or industries, or reviewing literature or studies and (2) synthesizing that research into a comprehensive, narrative report. If you're planning to search the web or internal knowledge bases, consider using this skill. This skill coordinates research subagents, so use it only when you have a tool for spawning subagents (the Agent or Task tool); otherwise, research the question directly.

日本語の概要は準備中です。原文の説明を表示しています。

sebastianbreguel/dotfiles32026年10月8日 更新

sebastianbreguel のスキルをすべて見る

このスキルの問題を報告する