INTEGRITY Документация

Метрики и аналитика

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. Чтобы просмотреть текущие и исторические метрики базы данных:

  1. На панели управления Cloudflare перейдите к разделу D1 страницу.

    Перейдите в SQL-база данных D1 ↗
  2. Выберите существующую базу данных D1.

  3. Выберите Метрики на вкладке.

При необходимости можно выбрать временной интервал для запроса. По умолчанию используются последние 24 часа.

Запрос через GraphQL API

Аналитику баз данных D1 можно запрашивать программно через GraphQL Analytics API. Этот API запрашивает те же наборы данных, что и панель управления Cloudflare, и поддерживает GraphQL интроспекция.

Наборы данных GraphQL D1 требуют accountTag фильтр с идентификатором вашего аккаунта Cloudflare и включите:

Примеры

Чтобы запросить сумму 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
  }
]