跳转到内容
搜索文档

指标和分析

最后更新 查看 MarkdownAgent 设置

D1 提供数据库分析功能,允许您检查账户中所有和/或每个数据库的查询量、查询延迟和存储大小。

Cloudflare 仪表板 图表中显示的指标从 Cloudflare 的 GraphQL Analytics API 查询。您可以通过 GraphQL 或 HTTP 客户端以编程方式访问这些指标。

指标

D1 目前导出以下指标:

指标 GraphQL 字段名 描述
Read Queries (qps) readQueries 针对数据库发出的读取查询数量。这是原始读取查询数量,不用于计费。
Write Queries (qps) writeQueries 针对数据库发出的写入查询数量。这是原始写入查询数量,不用于计费。
Rows read (count) rowsRead 查询中读取(扫描)的行数。有关行计数方式的更多详情,请参阅定价
Rows written (count) rowsWritten 查询中写入的行数。
Query Response (bytes) queryBatchResponseBytes 序列化查询响应的总响应大小,包括所有/任何列名、行和元数据。以字节为单位报告。
Query Latency (ms) queryBatchTimeMs 服务器端总查询响应时间,包括响应序列化。以毫秒为单位报告。
Storage (Bytes) databaseSizeBytes 数据库的最大大小。以字节为单位报告。

指标可查询(并保留)过去 31 天的数据。

行计数

D1 通过 Workers Binding API 为每个独立查询返回读取行数、写入行数(或两者)。

行计数是对该查询读取(扫描)或写入的行数的精确计数。 检查行计数以了解给定查询的性能和成本,包括是否可以通过使用索引减少读取行数。使用查询计数了解数据库的总流量,并判断哪些数据库处于活跃使用状态。

有关行计数方式的更多详情,请参阅定价文档

在仪表板中查看指标

D1 的每个数据库分析可在 Cloudflare 仪表板中查看。要查看数据库的当前和历史指标:

  1. 在 Cloudflare 仪表板中,前往 D1 页面。

    Go to D1 SQL database ↗
  2. 选择一个现有 D1 数据库。

  3. 选择 Metrics(指标) 选项卡。

您可以选择要查询的时间窗口。默认为过去 24 小时。

通过 GraphQL API 查询

您可以通过 GraphQL Analytics API 以编程方式查询 D1 数据库的分析数据。此 API 查询与 Cloudflare 仪表板相同的数据集,并支持 GraphQL 内省

D1 的 GraphQL 数据集需要带有 Cloudflare 账户 ID 的 accountTag 过滤器,包括:

  • d1AnalyticsAdaptiveGroups
  • d1StorageAdaptiveGroups
  • d1QueriesAdaptiveGroups

示例

要查询给定 $databaseIdreadQuerieswriteQueries 总和,按 databaseIddate 分组:

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
				}
			}
		}
	}
}

要查询账户范围的 readQuerieswriteQueries

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 的 d1QueriesAdaptiveGroupswrangler d1 insights 命令访问这些指标。

D1 捕获您的查询字符串,以便更轻松地分析跨查询执行的指标。绑定参数不会被捕获,以移除任何敏感信息。

选项 描述
--timePeriod 从现在到提供的时间范围获取数据(默认:1d)。
--sort-type 您想要排序 insights 的操作。在 sumavg 之间选择(默认:sum)。
--sort-by 您想要排序 insights 的字段。在 timereadswritescount 之间选择(默认:time)。
--sort-direction 排序方向。在 ASCDESC 之间选择(默认:DESC)。
--json 布尔值,指定是否以干净的 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
  }
]

查找过去 7 天内写入行数最多的前 10 个查询:

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
  }
]

这篇文档对您有帮助吗?