Hyperdrive 提供分析功能,可查看账户中每个 Hyperdrive 配置的查询量、查询延迟、缓存命中率和连接池指标。
Hyperdrive 目前通过 hyperdriveQueriesAdaptiveGroups 和 hyperdrivePoolSizesAdaptiveGroups GraphQL 数据集导出指标。
hyperdriveQueriesAdaptiveGroups 数据集包含以下指标:
| 指标 | GraphQL 字段名 | 说明 |
|---|---|---|
| 查询 | count |
给定时间段内发往 Hyperdrive 的查询数。 |
| 缓存状态 | cacheStatus |
查询是否被缓存。可为 disabled、hit、miss、uncacheable、multiplestatements、notaquery、oversizedquery、oversizedresult、parseerror、transaction 和 volatile。 |
| 查询字节 | queryBytes |
查询大小(字节)。 |
| 结果字节 | resultBytes |
查询_结果_大小(字节)。 |
| 连接延迟 | connectionLatency |
从 Hyperdrive 连接池建立到数据库新连接所需时间(毫秒)。 |
| 查询延迟 | queryLatency |
从 Hyperdrive 连接池查询数据库并接收结果所需时间(毫秒)。 |
| 事件状态 | eventStatus |
查询是否成功响应(complete)或失败(error)。 |
volatile 缓存状态表示查询包含 PostgreSQL 标记为 STABLE 或 VOLATILE 的函数(例如 NOW()、RANDOM())。有关哪些函数影响可缓存性,请参阅查询缓存。
hyperdrivePoolSizesAdaptiveGroups 数据集包含以下连接池指标:
| 指标 | GraphQL 字段名 | 说明 |
|---|---|---|
| 平均打开连接数 | avg.currentPoolSize |
池中当前打开连接的平均数。 |
| 平均可用槽位 | avg.availablePoolSlots |
可用于签出的池连接平均数。 |
| 平均等待客户端 | avg.waitingClients |
等待池中连接的平均客户端数。 |
| 池大小上限 | max.maxPoolSize |
配置的连接池最大大小。 |
| 峰值打开连接数 | max.currentPoolSize |
池中打开连接的峰值。 |
| 峰值等待客户端 | max.waitingClients |
等待池中连接的峰值客户端数。 |
连接争用表现为等待客户端激增,或打开连接持续接近池大小上限。若打开连接经常接近此限制,可考虑提高 Hyperdrive 连接限制。
指标可查询(并保留)过去 31 天。
Hyperdrive 的按数据库分析可在 Cloudflare 仪表板中查看。查看 Hyperdrive 配置的当前和历史指标:
-
在 Cloudflare 仪表板中,前往 Hyperdrive 页面。
Go to Hyperdrive ↗ -
选择现有 Hyperdrive 配置。
-
选择 Metrics(指标) 选项卡。
可选择时间窗口查询,默认为过去 24 小时。
仪表板包含 Pool connections(池连接) 图表,显示等待连接、打开连接和池大小上限。可使用位置选择器按特定 Cloudflare 位置筛选。
可通过 GraphQL Analytics API 以编程方式查询 Hyperdrive 配置的分析。该 API 查询与 Cloudflare 仪表板相同的数据集,并支持 GraphQL 内省。
Hyperdrive 的 GraphQL 数据集需要带有 Cloudflare 账户 ID 的 accountTag 过滤器。Hyperdrive 暴露 hyperdriveQueriesAdaptiveGroups 和 hyperdrivePoolSizesAdaptiveGroups 数据集。
探索 Hyperdrive 指标的示例。
query HyperdriveQueries(
$accountTag: string!
$configId: string!
$datetimeStart: Time!
$datetimeEnd: Time!
) {
viewer {
accounts(filter: { accountTag: $accountTag }) {
hyperdriveQueriesAdaptiveGroups(
limit: 10000
filter: {
configId: $configId
datetime_geq: $datetimeStart
datetime_leq: $datetimeEnd
}
) {
count
dimensions {
cacheStatus
}
}
}
}
}query AverageHyperdriveLatencies(
$accountTag: string!
$configId: string!
$datetimeStart: Time!
$datetimeEnd: Time!
) {
viewer {
accounts(filter: { accountTag: $accountTag }) {
hyperdriveQueriesAdaptiveGroups(
limit: 10000
filter: {
configId: $configId
eventStatus: "complete"
datetime_geq: $datetimeStart
datetime_leq: $datetimeEnd
}
) {
avg {
connectionLatency
queryLatency
}
}
}
}
}query HyperdriveQueryAndResultBytesForSuccessfulQueries(
$accountTag: string!
$configId: string!
$datetimeStart: Date!
$datetimeEnd: Date!
) {
viewer {
accounts(filter: { accountTag: $accountTag }) {
hyperdriveQueriesAdaptiveGroups(
limit: 10000
filter: {
configId: $configId
datetime_geq: $datetimeStart
datetime_leq: $datetimeEnd
}
) {
sum {
queryBytes
resultBytes
}
}
}
}
}query HyperdrivePoolSizes(
$accountTag: string!
$configId: string!
$datetimeStart: Time!
$datetimeEnd: Time!
) {
viewer {
accounts(filter: { accountTag: $accountTag }) {
hyperdrivePoolSizesAdaptiveGroups(
limit: 10000
filter: {
configId: $configId
datetime_geq: $datetimeStart
datetime_leq: $datetimeEnd
}
) {
avg {
currentPoolSize
availablePoolSlots
waitingClients
}
max {
maxPoolSize
currentPoolSize
waitingClients
}
dimensions {
coloCode
}
}
}
}
}