← Cloudflare D1 / d1 / observability
Metriky a analytika
D1 zpřístupňuje analytiku databází, díky které můžete sledovat objem dotazů, jejich latenci a velikost úložiště napříč všemi databázemi ve vašem účtu nebo u jednotlivých databází.
Metriky zobrazené v Cloudflare dashboard ↗ grafy se získávají prostřednictvím Cloudflare GraphQL Analytics API. K metrikám máte přístup přes programově přes GraphQL nebo HTTP klienta.
Metriky
D1 aktuálně exportuje tyto metriky:
| Metrika | Název pole GraphQL | Popis |
|---|---|---|
| Čtecí dotazy (qps) | readQueries |
Počet čtecích dotazů odeslaných na databázi. Jedná se o hrubý počet čtecích dotazů, který se nepoužívá pro fakturaci. |
| Zápisové dotazy (qps) | writeQueries |
Počet zápisových dotazů odeslaných na databázi. Jedná se o hrubý počet zápisových dotazů, který se nepoužívá pro fakturaci. |
| Přečtené řádky (počet) | rowsRead |
Počet řádků přečtených (skenovaných) ve vašich dotazech. Viz Ceny pro podrobnosti o tom, jak se počítají řádky. |
| Zapsané řádky (počet) | rowsWritten |
Počet řádků zapsaných ve vašich dotazech. |
| Odpověď dotazu (bajty) | queryBatchResponseBytes |
Celková velikost serializované odpovědi dotazu, včetně všech názvů sloupců, řádků a metadat. Uvádí se v bajtech. |
| Latence dotazu (ms) | queryBatchTimeMs |
Celková doba odezvy dotazu včetně serializace odpovědi na straně serveru. Uvádí se v milisekundách. |
| Úložiště (bajty) | databaseSizeBytes |
Maximální velikost databáze. Uvádí se v bajtech. |
Metriky lze dotazovat (a jsou uchovávány) po dobu posledních 31 dnů.
Počty řádků
D1 v odpovědi na každý jednotlivý dotaz vrací počet přečtených řádků, zapsaných řádků (nebo obojí) přes rozhraní Workers Binding API.
Počty řádků udávají přesný počet řádků, které byly daným dotazem přečteny (prohledány) nebo zapsány. Pomocí počtu řádků zjistíte výkon a náklady konkrétního dotazu, včetně toho, zda lze snížit počet přečtených řádků používání indexů. Podle počtu dotazů zjistíte celkový objem provozu vůči vašim databázím a poznáte, které databáze jsou aktivně používány.
Viz Dokumentace k cenám pro podrobnosti o tom, jak se počítají řádky.
Zobrazit metriky v dashboardu
Analytika pro jednotlivé databáze D1 je dostupná v Cloudflare dashboardu. Aktuální a historické metriky databáze zobrazíte takto:
-
V dashboardu Cloudflare přejděte na D1 stránce.
Přejděte na SQL databáze D1 ↗ -
Vyberte existující databázi D1.
-
Vyberte Metriky kartě.
Volitelně můžete vybrat časové okno pro dotaz. Výchozí hodnota je posledních 24 hodin.
Dotazování přes GraphQL API
Analytická data pro databáze D1 můžete programově dotazovat přes GraphQL Analytics API. Toto API dotazuje stejné datové sady jako dashboard Cloudflare a podporuje GraphQL introspekce.
Datové sady GraphQL D1 vyžadují accountTag filtr s ID vašeho účtu Cloudflare a zahrňte:
d1AnalyticsAdaptiveGroupsd1StorageAdaptiveGroupsd1QueriesAdaptiveGroups
Příklady
Pro dotaz na součet readQueries, writeQueries pro daný $databaseId, seskupení podle databaseId a 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
}
}
}
}
}Pro dotaz na průměrnou i queryBatchTimeMs a 90. percentil queryBatchTimeMs na databázi:
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
}
}
}
}
}Pro dotaz na celkové hodnoty za váš účet readQueries a 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
}
}
}
}
}Dotaz insights
D1 poskytuje metriky, které vám pomohou pochopit a ladit výkon dotazů. K těmto údajům můžete přistupovat prostřednictvím GraphQL d1QueriesAdaptiveGroups nebo wrangler d1 insights příkazu.
D1 zaznamenává řetězce vašich dotazů, aby bylo snazší analyzovat metriky napříč prováděním dotazů. Navázané parametry se nezaznamenávají, aby se odstranily veškeré citlivé informace.
| Možnost | Popis |
|---|---|
--timePeriod |
Načtěte data od aktuálního okamžiku po zadané časové období (výchozí: 1d). |
--sort-type |
Operace, podle které chcete přehledy řadit. Vyberte mezi sum a avg (výchozí: sum). |
--sort-by |
Pole, podle kterého chcete přehledy řadit. Vyberte mezi time, reads, writes, a count (výchozí: time). |
--sort-direction |
Směr řazení. Vyberte mezi ASC a DESC (výchozí: DESC). |
--json |
Booleovská hodnota určující, zda se má výsledek vrátit jako čistý JSON (výchozí: false). |
--limit |
Maximální počet dotazů, které se mají načíst. |
Nalezení 3 nejlepších dotazů podle počtu provedení:
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
}
]Nalezení 3 nejlepších dotazů podle průměrné doby provedení:
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
}
]Nalezení 10 nejlepších dotazů podle počtu zapsaných řádků za posledních 7 dní:
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
}
]