Prepare and test your skills

Prepare and test your skills

Resource quotas (opens in a new tab) in Google Cloud are per-project maximums for a specific resource, such as API calls, concurrent virtual machines (VMs), load balancers, or projects that can be created. All projects start with the same quotas, which protect the user community from unforeseen spikes and keep free-tier exploration within trial bounds. Quotas can increase automatically with use, and enabling billing for a project increases quotas for most services.
Required permissions for quotas separate read-only checking from quota changes through Identity and Access Management (IAM). A principal needs a viewer role to see usage and an administrator role to modify values or request increases. Possession of a quota-management role does not override other service permissions needed to create the underlying resource.
| Task | Required role |
|---|---|
| Check quotas for a project | Project Owner (roles/owner), Project Editor (roles/editor), or Quota Viewer (roles/servicemanagement.quotaViewer) |
| Modify quotas or request additional quota | Project Owner (roles/owner), Project Editor (roles/editor), Quota Administrator (roles/servicemanagement.quotaAdmin), or a custom role with the serviceusage.quotas.update permission |
Checking quota usage means comparing configured maximums against consumed resources in the Google Cloud console and the Google Cloud CLI (gcloud) before workloads fail. In the console, go to the Quotas page and use Filter table to find the service-specific quota, such as BigQuery slots or Cloud Storage API requests. In gcloud, run gcloud compute project-info describe --project PROJECT_ID for project-wide quotas and gcloud compute regions describe example-region for used quota in a region.
Failure signals differ by access path and must be read to identify the exhausted quota. A gcloud command that exceeds quota outputs a quota exceeded message and returns exit code 1, while an API request returns HTTP 413 Request Entity Too Large. A BigQuery operation that exceeds quota returns HTTP 403 Forbidden with a JSON body containing reason of rateLimitExceeded or quotaExceeded and a message field naming the limit, such as too many table update operations. For diagnosis at scale, query region-REGION_NAME.INFORMATION_SCHEMA.JOBS for jobs where creation_time is within the last day and error_result.reason is rateLimitExceeded or quotaExceeded, and use Cloud Monitoring to track average and peak utilization against capacity.
BigQuery quota errors fall into two categories defined by the reason field, and the category determines whether to retry quickly or redesign the workload. Some messages describe limits that can be increased through support or sales, while other messages describe hard system limits that cannot be increased and require temporary or permanent architectural workarounds even when an increase is possible.
| Error reason | Meaning | Response |
|---|---|---|
rateLimitExceeded | Short-term rate limit reached | Retry after a few seconds with exponential backoff, exponentially increasing the delay between attempts |
quotaExceeded | Longer-term quota reached | Wait 10 minutes or longer, then analyze the workload for optimization or a quota increase if failures persist |
Daily quotas, such as load jobs per table, replenish incrementally over a 24-hour period, so recovery does not require waiting a full 24 hours. Consistently reaching a quotaExceeded limit means the project quota, organizational constraints, and underlying system limit must be treated as separate layers: project quotas may be raised, while system limits require reducing request rate, batching operations, spreading load across regions, or scheduling work outside peak windows.
Exam tip: Retry rateLimitExceeded after seconds with exponential backoff, but wait 10 minutes or longer for quotaExceeded — quota does not guarantee that the physical resource is actually available.
Requesting a quota adjustment moves a project quota toward forecasted need through the Google Cloud console, a support case with live chat, or directly with the account team or Technical Account Manager (TAM). Most requests are evaluated by automated systems based on resource availability, length of time using Google Cloud, and other factors; denied requests can be pursued through a support case or account team. For event readiness, evaluate average and peak utilization, run load tests against latency targets with fixed resources, and submit increases before traffic spikes so quotas match requirements.
Proactive capacity tools reduce manual requests and separate quota from physical availability. The quota adjuster monitors resource consumption and proactively submits quota adjustment requests on behalf of the project. Capacity Planner shows historical and forecasted usage for VM instances, Persistent Disk volumes, and graphics processing units (GPUs), shows reservations, and supports automatic quota increase requests when usage nears a limit. A quota is only a maximum that can be created if the resource exists, so available quota does not guarantee creation when regional or zonal capacity is depleted; zonal depletion occurs from time to time without necessarily affecting the service level agreement (SLA), while entire-region unavailability is rare. An on-demand reservation for Compute Engine provisions requested VM hardware, memory, virtual CPUs (vCPUs), GPUs, and Local SSD disks at request time if capacity is available, ensuring capacity is held for peak events.
Interpreting and responding to GCP error messages and logs is the practice of tracing a failure from its structured error payload through job telemetry and platform logs to a corrective action. In BigQuery (opens in a new tab), errors surface in API responses, job metadata, INFORMATION_SCHEMA views, Cloud Audit Logs, and Cloud Monitoring metrics, and each layer adds who called what, which limit or permission blocked it, and whether the failure is transient or systemic.
A structured BigQuery error response carries an HTTP status code, a reason string, and a human-readable message field that together identify the root cause. A quota failure returns HTTP 403 Forbidden with domain: global and a message such as Quota exceeded: or Exceeded rate limits: too many table update operations for this table. The reason field separates short-term pressure from sustained exhaustion, the message field names the specific limit reached, and job execution logs add request IDs, slot consumption, spilled bytes, and queue time to confirm whether one job or many jobs triggered the condition.
The two quota reasons differ by duration and retry behavior:
| Reason | Meaning | Response |
|---|---|---|
| rateLimitExceeded | Short-term burst limit reached | Retry after a few seconds with exponential backoff, increasing delay between each attempt |
| quotaExceeded | Longer-term quota exhausted | Wait 10 minutes or longer, then analyze workload; daily quotas replenish incrementally over 24 hours and do not require a full-day wait |
Exam tip: Retry rateLimitExceeded after seconds with exponential backoff, but wait 10 minutes or longer for quotaExceeded and investigate the workload before retrying.
The bq command-line tool exposes the full error structure, request ID, and job metadata for a failed BigQuery job. Data flows from the BigQuery API to the tool output when an operator runs bq show -j JOB_ID or adds --format=prettyjson to a query command, which reveals nested error details that the console may summarize. The gcpdiag tool runs automated checks from the command line and reports common Google Cloud misconfigurations, including Identity and Access Management (IAM) permission gaps, network restrictions, and service account errors. Choose the bq tool when the failure is tied to one job ID that needs payload-level inspection, and choose gcpdiag when many jobs fail in ways that suggest project-level configuration drift.
INFORMATION_SCHEMA views let operators query real-time and historical metadata about BigQuery jobs, capacity, ingestion, and storage with standard SQL. Telemetry flows from BigQuery execution into regional views that must be qualified with region-REGION_NAME, such as region-us.INFORMATION_SCHEMA.JOBS, so analysis stays scoped to the region where the workload ran. A diagnostic query selects job_id, creation_time, and error_result from INFORMATION_SCHEMA.JOBS and filters for error_result.reason IN ('rateLimitExceeded', 'quotaExceeded') over the past day to separate isolated bursts from repeating systemic failures.
The views divide diagnostic work by subsystem:
INFORMATION_SCHEMA.JOBS and INFORMATION_SCHEMA.JOBS_TIMELINE expose slot-millisecond consumption, spilled bytes, queue times, and error codes across jobs to diagnose resourcesExceeded, out-of-memory conditions, shuffle spill, and concurrency bottlenecks.INFORMATION_SCHEMA.RESERVATIONS and INFORMATION_SCHEMA.CAPACITY_COMMITMENTS expose slot allocation, reservation limits, and autoscaling behavior to diagnose slot starvation, assignment mismatches, and baseline shortfalls.INFORMATION_SCHEMA.STREAMING_TIMELINE exposes ingestion latency and streaming rate limits to diagnose Storage Write API, legacy streaming, and row-level insertion failures.INFORMATION_SCHEMA.TABLE_STORAGE exposes physical table sizes, active versus long-term storage, and partition distribution to diagnose cost and skew tied to storage layout.Cloud Audit Logs record who initiated each BigQuery operation and are the authoritative source for access failures. Admin Activity and Data Access audit logs flow from BigQuery control-plane and data-plane events into Logs Explorer, where caller identity, dataset, and job fields explain PERMISSION_DENIED errors and policy blocks. A Logs Explorer filter such as resource.type = ("bigquery_project" OR "bigquery_dataset") with protoPayload.status.code ="7" and protoPayload.status.message: ("Quota exceeded" OR "limit") isolates quota-related denials across projects and datasets, while VPC Service Controls, row-level security, and column-level security logs show perimeter violations and policy-tag denials on the other side of the trust boundary.
Cloud Monitoring (formerly Stackdriver Monitoring) tracks quantitative pressure that logs alone do not show. Metrics for slot usage, query execution duration, and uploaded bytes flow from BigQuery into dashboards, custom charts, and alert policies that notify operators when thresholds or quotas are exceeded. The Monitoring dashboard shows incidents, datasets, tables, projects, query times, and slot utilization, and the Workload management page shows capacity commitments and reservation assignments. Choose Audit Logs when the question is who was denied and why, and choose Monitoring when the question is whether usage is trending toward a quota, reservation, or cost limit before jobs begin to fail.
Corrective actions depend on whether the error payload, telemetry, and logs point to transient pressure, systemic overload, or invalid data and access. Transient rateLimitExceeded and short queue delays resolve with delayed retry, while persistent quotaExceeded, slot starvation, and repeated transfer or streaming failures require workload changes such as staggering table updates, reducing concurrency, requesting a quota increase, or reassigning reservations. IAM denials require granting the missing role or fixing Policy Troubleshooter findings, VPC Service Controls blocks require ingress or egress rule changes, and federated-query failures require fixing Cloud SQL connectivity, instance configuration, or credentials.
Defensive SQL controls prevent runtime data errors from failing pipelines before downstream steps execute. SAFE expressions such as SAFE_CAST(), SAFE_DIVIDE(), SAFE_OFFSET(), and SAFE_ORDINAL() return NULL instead of raising a runtime error when types or array bounds do not match, and most scalar functions support the SAFE. prefix. The ASSERT statement enforces validation conditions in multi-statement scripts and fails with a custom message before downstream operations run, so bad partitions, null keys, or out-of-range values stop early with context. Together, structured error decoding, telemetry queries, log correlation, and defensive checks turn unstructured job logs into a repeatable path from symptom to root cause to fix.
Investigating billing anomalies and cost attribution is the practice of tracing unexpected Google Cloud charges to a specific project, service, or resource and then preventing recurrence through budgets, anomaly detection, and chargeback. Usage from all linked projects flows into a single Cloud Billing (opens in a new tab) account, and from that account the same cost data flows to Billing Reports, the Anomalies dashboard, and BigQuery export for different kinds of analysis. Reports show what was spent and what is forecast, anomalies flag what deviates from history, and budgets warn when spend approaches a plan.
Billing Reports are the primary console view for tracing an unexpected charge to its source within the linked billing account. The reports page opens after selecting Billing and Go to linked billing account, and filters in the right pane slice gross cost by project, service such as Compute Engine or BigQuery, SKU, label, and time range. Complementary views break the same data into other shapes: cost table reports show invoice-level tabular detail, cost breakdown reports show a waterfall from on-demand price to net cost after credits and contract pricing, and the Transactions page shows payment history and invoices. When a spike appears, the investigation order is first isolate the project, then the service, then the resource or label, because only that order separates a workload-wide increase from a single runaway job.
| Tool | What it answers | How it signals |
|---|---|---|
| Billing Reports | Where did cost occur by project, service, and label, and how is it trending | Visual trend and forecast, no automatic signal |
| Anomalies dashboard | Which spend deviates from historical patterns | Automatically detected anomaly with cost impact and deviation percent |
| Cloud Billing budgets (opens in a new tab) | How is actual or forecast spend tracking against a planned amount | Email and Pub/Sub alert when a threshold percent is crossed |
The table makes the handoff explicit: reports attribute the charge, anomalies surface the deviation, and budgets enforce the plan.
The Anomalies dashboard automatically detects spikes or deviations in usage costs by comparing current spend against historical spending patterns for projects in the billing account. Usage costs for detection are calculated at applicable on-demand rates, including list prices and contracted or negotiated pricing, as gross costs that include spend-based committed use discounts but exclude legacy spend-based credits, resource-based committed use credits, promotional credits, sustained use discounts, and other savings. For AI workloads such as Gemini API and Vertex AI, early anomalies use near-real-time cost estimates to give daily, service-level insight before billing finalizes. A sudden, unexplained spike without a clear deployment or query-volume cause must be investigated as both a cost issue and a possible security compromise, since attackers using resources for unauthorized activity often appear first as a billing spike.
Access to anomalies follows an ownership boundary. With billing-account-level permissions, the console path Billing > Cost management > Anomalies shows anomalies for all projects linked to the selected billing account. With project-scoped permissions only, the same page shows anomalies for one project at a time and no billing-account permission is required. Full-account visibility requires billing.accounts.get, billing.accounts.getIamPolicy, billing.anomalies.get, and billing.anomalies.list, granted through roles such as Billing Account Costs Manager, Billing Account Administrator, or Billing Account Viewer, while single-project visibility requires resourcemanager.projects.get plus billing.anomalies.get and billing.anomalies.list on that project. Reseller and subaccount visibility additionally depends on project-based cost visibility, and additional permissions are required to send anomaly notifications to Pub/Sub.
Once an anomaly is open, the dashboard supports root-cause analysis, threshold tuning, notification management, and feedback to improve accuracy. Thresholds for standard anomalies filter the view by cost-impact amount and percent of deviation, which lets a central team ignore low-value noise and focus on material deviations. Providing feedback on whether a detection was useful improves future detection, and automated alerts forward detections to responders instead of relying on manual dashboard checks.
Cloud Billing budgets are alerts-only controls that track actual and forecasted Google Cloud costs against a planned amount and send notifications when a threshold is crossed. A budget defines a time period of monthly, quarterly, yearly, or custom range, a scope, an amount set as a specified total or based on the previous period's spend, and threshold rules such as 50%, 100%, and 120% of the budget for actual or forecasted spend. The enterprise pattern is a single billing account for all projects, a per-project budget, and a central alert such as forecasted spend on track to reach 120% of budget, with more granular thresholds delegated to workload owners for day-to-day monitoring. Budget alerts are different from Essential Contacts billing notifications: budget alerts report consumption against a budget the team defines, while Essential Contacts billing notifications report pricing updates, errors, and credits.
Budget scope determines which costs flow into the comparison:
Alert delivery separates who is told from what is automated. Role-based email sends to billing administrators and users on the account, single-project budgets can send to Project Owners, and Cloud Monitoring channels extend email to others such as project managers. The same threshold event can also publish to a Pub/Sub topic, where the message flows from the budget to automation such as forwarding to Slack or programmatically disabling billing on a project. The Cloud Billing Budget API creates and manages these budgets programmatically at scale, which matters when dozens of data projects each need consistent scope, amount, and thresholds.
A new alerts-only budget is created in an ordered flow:
Google Cloud quotas provide the hard-side complement to budgets by limiting how much of a resource can be used. Quotas ensure fair use of shared resources and protect against runaway costs, such as an unbounded BigQuery job or VM creation loop, by blocking or throttling use after the limit. Usage against quota-limited resources can be viewed in the console and a higher quota requested when legitimate growth requires it. In practice, quotas contain blast radius while budgets provide early warning, so both are needed to prevent overspend.
Exam tip: An alerts-only budget only sends email and Pub/Sub notifications and does not automatically cap usage or spending; use a spend cap budget where supported if the project must stop accruing cost.
Cost allocation attributes shared-account spend to internal cost centers using labels and exported billing records. The recommended foundation assigns each project a billingcode metadata label that identifies its cost center, keeps all projects under one billing account, and exports billing data to a BigQuery dataset in the billing-export project. Prebuilt console reports support slicing and forecasting in multiple dimensions, but exported records support custom grouping that the console cannot express. A standard attribution query selects the billingcode label value as cost center, groups by cost center and service.description, and sums cost as charges and nested credits.amount as credits, ordered by cost center and service. That result flows from BigQuery into internal accounting or chargeback processes, which remain the team's responsibility to build and operate.
This design creates a clear dependency chain: the label must be applied to projects and resources before spend occurs, the export must be configured to a BigQuery dataset before custom analysis is possible, and the query depends on both the label key and the export table. For ongoing optimization, FinOps hub guidance helps review the attributed costs, identify inefficient services or projects, and adjust budgets, quotas, reservations, and workload configuration. Central finance keeps the account-wide view and the 120%-of-forecast safety net, while workload owners own granular budgets and label hygiene for the projects they operate.
rateLimitExceeded for short-term burst limits and quotaExceeded for longer-term quota exhaustion.rateLimitExceeded is retried after seconds with exponential backoff, while quotaExceeded requires waiting 10 minutes or longer and workload analysis.serviceusage.quotas.update.billingcode label before spend occurs and exporting billing data to a BigQuery dataset for custom grouping by cost center and service.rateLimitExceeded means a short-term burst limit was reached and should be retried after a few seconds with exponential backoff, while quotaExceeded means longer-term quota was exhausted and requires waiting 10 minutes or longer and then analyzing the workload. Daily quotas replenish incrementally over a 24-hour period, so recovery does not require waiting a full 24 hours.
Checking quotas for a project requires Project Owner, Project Editor, or Quota Viewer, while modifying quotas or requesting additional quota requires Project Owner, Project Editor, Quota Administrator, or a custom role with the serviceusage.quotas.update permission. Possession of a quota-management role does not override other service permissions needed to create the underlying resource.
No, Cloud Billing budgets are alerts-only controls that track actual and forecasted costs against a planned amount and send email and Pub/Sub notifications when a threshold such as 50 percent, 100 percent, or 120 percent is crossed. They do not automatically cap usage or spending, while Google Cloud quotas provide the hard-side complement by limiting how much of a resource can be used.
An enterprise data engineering team operates a multi-tenant Google Kubernetes Engine (GKE) cluster and several automated data pipelines distributed across multiple projects linked to a single Cloud Billing account. During the last billing cycle, the finance department detected an unexpected cost spike in compute and persistent storage resources.
The team must implement a solution that satisfies the following operational requirements:
Which combination of actions should the team implement?
Last updated