← Cloudflare D1 / d1 / observability
Метрики и аналитика
D1 предоставляет аналитику баз данных, которая позволяет отслеживать объём запросов, их задержку и размер хранилища по всем базам данных в вашем аккаунте или для отдельных баз данных.
Метрики, отображаемые в Панель управления Cloudflare ↗ графики запрашиваются из Cloudflare GraphQL Analytics API. Вы можете получить доступ к метрикам программно через GraphQL или HTTP-клиент.
Метрики
D1 в настоящее время экспортирует следующие метрики:
| Метрика | Имя поля GraphQL | Описание |
|---|---|---|
| Запросы на чтение (qps) | readQueries |
Количество запросов на чтение, выполненных к базе данных. Это необработанное количество запросов на чтение, оно не используется для тарификации. |
| Запросы на запись (qps) | writeQueries |
Количество запросов на запись, выполненных к базе данных. Это необработанное количество запросов на запись, оно не используется для тарификации. |
| Прочитанные строки (count) | rowsRead |
Количество строк, прочитанных (просканированных) в ходе выполнения запросов. См. Цены с подробностями о том, как подсчитываются строки. |
| Записанные строки (count) | rowsWritten |
Количество строк, записанных в ходе выполнения запросов. |
| Ответ на запрос (байт) | queryBatchResponseBytes |
Общий размер сериализованного ответа на запрос, включая названия столбцов, строки и метаданные. Указывается в байтах. |
| Задержка запроса (мс) | queryBatchTimeMs |
Общее время ответа на запрос, включая сериализацию ответа, на стороне сервера. Указывается в миллисекундах. |
| Хранилище (байты) | databaseSizeBytes |
Максимальный размер базы данных. Указывается в байтах. |
Метрики можно запрашивать (и они хранятся) за последние 31 день.
Количество строк
D1 в ответ на каждый отдельный запрос возвращает количество прочитанных строк, записанных строк (или обоих) через Workers Binding API.
Количество строк показывает точное число строк, которые были прочитаны (просканированы) или записаны при выполнении запроса. Анализируйте количество строк, чтобы понять производительность и стоимость запроса, а также определить, можно ли сократить количество прочитанных строк использование индексов. Используйте количество запросов, чтобы оценить общий объём трафика к вашим базам данных и определить, какие базы данных активно используются.
См. Документация по тарификации с подробностями о том, как подсчитываются строки.
Просмотр метрик в панели управления
Аналитика D1 в разрезе отдельных баз данных доступна в панели управления Cloudflare. Чтобы просмотреть текущие и исторические метрики базы данных:
-
На панели управления Cloudflare перейдите к разделу D1 страницу.
Перейдите в SQL-база данных D1 ↗ -
Выберите существующую базу данных D1.
-
Выберите Метрики на вкладке.
При необходимости можно выбрать временной интервал для запроса. По умолчанию используются последние 24 часа.
Запрос через GraphQL API
Аналитику баз данных D1 можно запрашивать программно через GraphQL Analytics API. Этот API запрашивает те же наборы данных, что и панель управления Cloudflare, и поддерживает GraphQL интроспекция.
Наборы данных GraphQL D1 требуют accountTag фильтр с идентификатором вашего аккаунта Cloudflare и включите:
d1AnalyticsAdaptiveGroupsd1StorageAdaptiveGroupsd1QueriesAdaptiveGroups
Примеры
Чтобы запросить сумму readQueries, writeQueries для заданного $databaseId, группируя по databaseId и date:
query D1ObservabilitySampleQuery(
$accountTag: string!
$start: Date
$end: Date
$databaseId: string
) {
viewer {
accounts(filter: { accountTag: $accountTag }) {
d1AnalyticsAdaptiveGroups(
limit: 10000
filter: { date_geq: $start, date_leq: $end, databaseId: $databaseId }
orderBy: [date_DESC]
) {
sum {
readQueries
writeQueries
}
dimensions {
date
databaseId
}
}
}
}
}Чтобы одновременно запросить среднее queryBatchTimeMs и 90-й процентиль queryBatchTimeMs на базу данных:
query D1ObservabilitySampleQuery2(
$accountTag: string!
$start: Date
$end: Date
$databaseId: string
) {
viewer {
accounts(filter: { accountTag: $accountId }) {
d1AnalyticsAdaptiveGroups(
limit: 10000
filter: { date_geq: $start, date_leq: $end, databaseId: $databaseId }
orderBy: [date_DESC]
) {
quantiles {
queryBatchTimeMsP90
}
dimensions {
date
databaseId
}
}
}
}
}Чтобы запросить общеаккаунтные readQueries и writeQueries:
query D1ObservabilitySampleQuery3(
$accountTag: string!
$start: Date
$end: Date
$databaseId: string
) {
viewer {
accounts(filter: { accountTag: $accountTag }) {
d1AnalyticsAdaptiveGroups(
limit: 10000
filter: { date_geq: $start, date_leq: $end, databaseId: $databaseId }
) {
sum {
readQueries
writeQueries
}
}
}
}
}Запрос insights
D1 предоставляет метрики, которые помогают понять и отладить производительность запросов. Получить доступ к этим данным можно через GraphQL d1QueriesAdaptiveGroups или wrangler d1 insights команда.
D1 записывает строки ваших запросов, чтобы упростить анализ метрик по всем выполнениям запросов. Привязанные параметры не записываются, чтобы исключить попадание конфиденциальной информации.
| Опция | Описание |
|---|---|
--timePeriod |
Получение данных за период от текущего момента до заданного (по умолчанию: 1d). |
--sort-type |
Операция, по которой нужно сортировать статистику. Выберите одно из sum и avg (по умолчанию: sum). |
--sort-by |
Поле, по которому нужно сортировать статистику. Выберите одно из time, reads, writes, а также count (по умолчанию: time). |
--sort-direction |
Направление сортировки. Выберите одно из ASC и DESC (по умолчанию: DESC). |
--json |
Значение типа boolean, указывающее, следует ли возвращать результат в виде «чистого» JSON (по умолчанию: false). |
--limit |
Максимальное количество запросов для получения. |
Чтобы найти 3 запроса с наибольшим количеством выполнений:
npx wrangler d1 insights <database_name> --sort-type=sum --sort-by=count --limit=3 ⛅️ wrangler 3.95.0
-------------------
-------------------
🚧 `wrangler d1 insights` is an experimental command.
🚧 Flags for this command, their descriptions, and output may change between wrangler versions.
-------------------
[
{
"query": "SELECT tbl_name as name,\n (SELECT ncol FROM pragma_table_list(tbl_name)) as num_columns\n FROM sqlite_master\n WHERE TYPE = \"table\"\n AND tbl_name NOT LIKE \"sqlite_%\"\n AND tbl_name NOT LIKE \"d1_%\"\n AND tbl_name NOT LIKE \"_cf_%\"\n ORDER BY tbl_name ASC;",
"avgRowsRead": 2,
"totalRowsRead": 4,
"avgRowsWritten": 0,
"totalRowsWritten": 0,
"avgDurationMs": 0.49505,
"totalDurationMs": 0.9901,
"numberOfTimesRun": 2,
"queryEfficiency": 0
},
{
"query": "SELECT * FROM Customers",
"avgRowsRead": 4,
"totalRowsRead": 4,
"avgRowsWritten": 0,
"totalRowsWritten": 0,
"avgDurationMs": 0.1873,
"totalDurationMs": 0.1873,
"numberOfTimesRun": 1,
"queryEfficiency": 1
},
{
"query": "SELECT * From Customers",
"avgRowsRead": 0,
"totalRowsRead": 0,
"avgRowsWritten": 0,
"totalRowsWritten": 0,
"avgDurationMs": 1.0225,
"totalDurationMs": 1.0225,
"numberOfTimesRun": 1,
"queryEfficiency": 0
}
]Чтобы найти 3 запроса с наибольшим средним временем выполнения:
npx wrangler d1 insights <database_name> --sort-type=avg --sort-by=time --limit=3⛅️ wrangler 3.95.0
-------------------
-------------------
🚧 `wrangler d1 insights` is an experimental command.
🚧 Flags for this command, their descriptions, and output may change between wrangler versions.
-------------------
[
{
"query": "SELECT * From Customers",
"avgRowsRead": 0,
"totalRowsRead": 0,
"avgRowsWritten": 0,
"totalRowsWritten": 0,
"avgDurationMs": 1.0225,
"totalDurationMs": 1.0225,
"numberOfTimesRun": 1,
"queryEfficiency": 0
},
{
"query": "SELECT tbl_name as name,\n (SELECT ncol FROM pragma_table_list(tbl_name)) as num_columns\n FROM sqlite_master\n WHERE TYPE = \"table\"\n AND tbl_name NOT LIKE \"sqlite_%\"\n AND tbl_name NOT LIKE \"d1_%\"\n AND tbl_name NOT LIKE \"_cf_%\"\n ORDER BY tbl_name ASC;",
"avgRowsRead": 2,
"totalRowsRead": 4,
"avgRowsWritten": 0,
"totalRowsWritten": 0,
"avgDurationMs": 0.49505,
"totalDurationMs": 0.9901,
"numberOfTimesRun": 2,
"queryEfficiency": 0
},
{
"query": "SELECT * FROM Customers",
"avgRowsRead": 4,
"totalRowsRead": 4,
"avgRowsWritten": 0,
"totalRowsWritten": 0,
"avgDurationMs": 0.1873,
"totalDurationMs": 0.1873,
"numberOfTimesRun": 1,
"queryEfficiency": 1
}
]Чтобы найти 10 самых частых запросов по количеству записанных строк за последние 7 дней:
npx wrangler d1 insights <database_name> --sort-type=sum --sort-by=writes --limit=10 --timePeriod=7d⛅️ wrangler 3.95.0
-------------------
-------------------
🚧 `wrangler d1 insights` is an experimental command.
🚧 Flags for this command, their descriptions, and output may change between wrangler versions.
-------------------
[
{
"query": "SELECT * FROM Customers",
"avgRowsRead": 4,
"totalRowsRead": 4,
"avgRowsWritten": 0,
"totalRowsWritten": 0,
"avgDurationMs": 0.1873,
"totalDurationMs": 0.1873,
"numberOfTimesRun": 1,
"queryEfficiency": 1
},
{
"query": "SELECT * From Customers",
"avgRowsRead": 0,
"totalRowsRead": 0,
"avgRowsWritten": 0,
"totalRowsWritten": 0,
"avgDurationMs": 1.0225,
"totalDurationMs": 1.0225,
"numberOfTimesRun": 1,
"queryEfficiency": 0
},
{
"query": "SELECT tbl_name as name,\n (SELECT ncol FROM pragma_table_list(tbl_name)) as num_columns\n FROM sqlite_master\n WHERE TYPE = \"table\"\n AND tbl_name NOT LIKE \"sqlite_%\"\n AND tbl_name NOT LIKE \"d1_%\"\n AND tbl_name NOT LIKE \"_cf_%\"\n ORDER BY tbl_name ASC;",
"avgRowsRead": 2,
"totalRowsRead": 4,
"avgRowsWritten": 0,
"totalRowsWritten": 0,
"avgDurationMs": 0.49505,
"totalDurationMs": 0.9901,
"numberOfTimesRun": 2,
"queryEfficiency": 0
}
]