-
Notifications
You must be signed in to change notification settings - Fork 702
Docs: describe diagnostics collection #19007
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from 3 commits
a09f70b
1ab0466
f8302eb
64ca1e2
94a9af6
ad16744
80d7567
6311e35
11ca1e5
a44eafa
1d0bbad
8daa7d9
e86312e
abb6043
66e25b1
ff59862
6b55eb9
d6fa1d3
7558cc2
437252c
39b7f69
f044cf2
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -29,6 +29,7 @@ | |
|| `--explain` | Выполнить explain-запрос, будет выведен логический план запроса. Сам запрос не будет выполнен, поэтому не затронет данные в базе. || | ||
|| `--explain-ast` | То же, что и `--explain`, но вдобавок к логическому плану выводит [AST (abstract syntax tree)](https://ru.wikipedia.org/wiki/Абстрактное_синтаксическое_дерево). Раздел с AST содержит представление на внутреннем языке [miniKQL](../../concepts/glossary.md#minikql). || | ||
|| `--explain-analyze` | Выполнить запрос в режиме `EXPLAIN ANALYZE`. Показывает план выполнения запроса. Возвращаемые в рамках запроса данные игнорируются.<br/>**Важное замечание: Запрос фактически выполняется, поэтому может внести изменения в базу**. || | ||
|| `--diagnostics-file` | Путь для сохранения файла с диагностикой. || | ||
|| `--format` | Формат вывода.<br/>Возможные значения: | ||
|
||
{% include notitle [format](./_includes/result_format_common.md) %} | ||
|
@@ -38,6 +39,61 @@ | |
|| | ||
|# | ||
|
||
### Сбор диагностики | ||
shnikd marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
Опция `--diagnostics-file <path_to_diagnostics>` позволяет сохранять расширенную информацию о выполнении SQL-запросов в отдельный JSON-файл. | ||
|
||
Диагностика формируется при сборе статистики (`--stats full` или `--stats profile`), а также при выполнении `EXPLAIN`-запросов. Для каждого запроса будет создан файл `<path_to_diagnostics>` со следующими полями: | ||
|
||
- **`plan`** — план выполнения запроса. | ||
- **`stats`** — статистика выполнения запроса. | ||
- **`meta`** — дополнительная информация о запросе в JSON-формате со следующими полями: | ||
- **`created_at`** — время начала запроса (timestamp). | ||
- **`query_cluster`** — название кластера или провайдера. | ||
- **`query_database`** — путь к базе данных. | ||
- **`query_id`** — уникальный идентификатор запроса. | ||
- **`query_syntax`** — используемый синтаксис запроса. | ||
- **`query_text`** — текст SQL-запроса. | ||
|
||
**Внимание!** Это поле может содержать чувствительные или личные данные пользователя, включая значения параметров в запросе. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. [nitpick] Use a consistent admonition style—either switch this Внимание! to Важно: to match the later section header or vice versa for uniformity. Copilot uses AI. Check for mistakes. Positive FeedbackNegative Feedback |
||
|
||
- **`query_type`** — тип запроса. | ||
- **`table_metadata`** — схемы, индексы и статистика по таблицам, участвующим в запросе (JSON-формат). | ||
- **`ast`** — абстрактное синтаксическое дерево (AST) запроса. | ||
|
||
shnikd marked this conversation as resolved.
Show resolved
Hide resolved
|
||
> **Важно:** | ||
> Файл диагностики может содержать конфиденциальные данные в полях **`meta.query_text`**, **`plan`** и **`ast`**. Перед передачей такого файла сторонним лицам (например, в техническую поддержку) рекомендуется вручную просмотреть и отредактировать содержимое файла, чтобы удалить или заменить чувствительную информацию. | ||
|
||
**Пример запроса с чувствительной информацией:** | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. сейчас сформулированно странно. Например, чтобы собрать диагностику в файл .. Чтобы прочитать ast запроса выполните команду и через инструмент jq получите доступ к ast. Что то похожее нужно и для explain , при этом в тексте нужно подчеркнуть, что вы хотите собрать диагностику относительно плана для запроса, но при этом не хотите его выполнять нужно выполнить команду. |
||
|
||
```bash | ||
ydb -e <endpoint> -d <database> sql -s "SELECT * FROM users WHERE email = 'alice@example.com';" --stats full --diagnostics-file diagnostics.json | ||
``` | ||
В диагностическом файле `diagnostics.json` в поле **`meta.query_text`** будет содержаться такая строка: | ||
```json | ||
"query_text": "INSERT INTO users (id, name, email) VALUES (1, 'Alice', 'alice@example.com');" | ||
shnikd marked this conversation as resolved.
Show resolved
Hide resolved
|
||
``` | ||
Здесь присутствует чувствительная информация — адрес электронной почты пользователя. | ||
|
||
Перед передачей диагностического файла рекомендуется заменить реальные значения на шаблонные: | ||
```json | ||
"query_text": "SELECT * FROM users WHERE email = '<EMAIL>';" | ||
``` | ||
Адрес электронной почты можно обнаружить в полях **`plan`** и **`ast`**, например: | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. это кстати мне кажется лишние детали. можно написать перед отправкой заметите важные данные любым удобным для вас способом и это достаточно информации для пользователя, кмк. Плюс, не факт что в других полях не появятся данные которые стоит заменить, поэтому я бы не уточнял конкретно что требуется менять. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Убрал примеры с планом и ast и уточнил, что именно в этом примере вхождение можно обнаружить здесь. |
||
```json | ||
"plan": | ||
... | ||
"Predicate" : "item.emails == \"alice@example.com\"", | ||
... | ||
``` | ||
Такие вхождения тоже нужно заменить, например: | ||
```json | ||
"plan": | ||
... | ||
"Predicate" : "item.emails == \"<EMAIL>\"", | ||
... | ||
``` | ||
|
||
### Работа с параметризованными запросами {#parameterized-query} | ||
|
||
Подробное описание работы с параметрами с примерами смотрите в статье [{#T}](parameterized-query-execution.md). | ||
|
Uh oh!
There was an error while loading. Please reload this page.