|
| 1 | +--- |
| 2 | +title: Automatic Go Execution Tracer |
| 3 | +summary: The automatic Go execution tracer can be used to gain fine-grained insight into goroutine scheduling, blocking events, garbage collection, and runtime activity. |
| 4 | +keywords: go execution trace, go execution tracing, execution tracer, automatic execution tracer |
| 5 | +toc: true |
| 6 | +--- |
| 7 | + |
| 8 | +The automatic Go execution tracer allows operators and support engineers to investigate internal system behavior over time. Use this feature to gain fine-grained insight into goroutine scheduling, blocking events, garbage collection, and runtime activity. |
| 9 | + |
| 10 | +{{site.data.alerts.callout_info}} |
| 11 | +Execution tracing introduces a performance overhead. This feature is primarily intended for use under the guidance of [Cockroach Labs Support](https://support.cockroachlabs.com/). |
| 12 | +{{site.data.alerts.end}} |
| 13 | + |
| 14 | +When enabled, the automatic Go execution tracer captures runtime execution traces on a recurring schedule and stores them in the node's log directory. These traces are collected in the background and can be analyzed using Go’s standard tooling (e.g., [`go tool trace`](https://pkg.go.dev/runtime/trace)). |
| 15 | + |
| 16 | +To prevent disk overuse, older traces are automatically garbage collected based on a configurable storage limit. |
| 17 | + |
| 18 | +## Configuration |
| 19 | + |
| 20 | +You can configure automatic Go execution trace capture with the following [cluster settings]({% link {{ page.version.version }}/cluster-settings.md %}): |
| 21 | + |
| 22 | +Cluster Setting | Description | Default Value |
| 23 | +----------------|-------------|--------------- |
| 24 | +`obs.execution_tracer.interval` | Enables periodic execution tracing on each node and defines how often traces are collected. Set to a positive duration (e.g., `10m`, `1h`) to enable. Set to `0` to disable (default). | `0` |
| 25 | +`obs.execution_tracer.duration` | Sets how long each execution trace runs. Use short durations (e.g., 5-15 seconds) to produce traces that are easier to analyze. | `10s` |
| 26 | +`obs.execution_tracer.total_dump_size_limit` | Sets a soft limit on the total disk space used by execution trace files. When the limit is exceeded, the oldest files are deleted. | `4GiB` |
| 27 | + |
| 28 | +## Accessing Go execution traces |
| 29 | + |
| 30 | +- The automatic Go execution tracer saves the captured traces to disk on each node's file system in the [logging directory]({% link {{ page.version.version }}/configure-logs.md %}#logging-directory). The default path is `cockroach-data/logs/executiontrace_dump`. |
| 31 | +- To access these Go execution traces, you must use the node file system. |
| 32 | +- Each file represents a single trace session, includes the `executiontrace.` prefix and `.out` extension, and is timestamped with the session end time to support correlation with other logs and profiles. For example, the trace file could be named `executiontrace.2025-07-14T18_41_22.216.out`. |
| 33 | +- Enabling the automatic Go execution tracer does add Go execution traces to [debug zips]({% link {{ page.version.version }}/cockroach-debug-zip.md %}) in the `nodes/*/executiontrace` paths. |
| 34 | + |
| 35 | +## Best Practices |
| 36 | + |
| 37 | +- Trace duration should be short (e.g., 5s–15s). Shorter trace files are easier to parse and load into external tools. |
| 38 | +- Storage limit should be generous to allow sufficient trace history. Avoid overly tight disk caps unless necessary. |
| 39 | +- Enable tracing temporarily when troubleshooting runtime behavior or under [support guidance](https://support.cockroachlabs.com), as it may slightly impact performance. |
| 40 | + |
| 41 | +## Performance Impact |
| 42 | + |
| 43 | +Enabling execution tracing incurs a low overhead, estimated at 1–2% based on upstream Go benchmarks ([Go blog, 2024](https://go.dev/blog/execution-traces-2024#low-overhead-tracing)). No additional CockroachDB-specific benchmarks are available at this time. |
| 44 | + |
| 45 | +## Example |
| 46 | + |
| 47 | +To enable 10-second traces every 15 minutes with a storage limit of `8GiB`, configure the following settings: |
| 48 | + |
| 49 | +```sql |
| 50 | +SET CLUSTER SETTING obs.execution_tracer.interval = '15m'; |
| 51 | +SET CLUSTER SETTING obs.execution_tracer.duration = '10s'; |
| 52 | +SET CLUSTER SETTING obs.execution_tracer.total_dump_size_limit = '8GiB'; |
| 53 | +``` |
| 54 | + |
| 55 | +## See also |
| 56 | + |
| 57 | +- [Automatic CPU Profiler]({% link {{ page.version.version }}/automatic-cpu-profiler.md %}) |
0 commit comments