Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

release-21.1: sql: only create real spans when session tracing/sampling #61965

Merged
merged 2 commits into from
Mar 15, 2021

Conversation

irfansharif
Copy link
Contributor

@irfansharif irfansharif commented Mar 13, 2021

Backport 2/2 commits from #61777. Fixes #61710. Fixes #61696. Fixes #61718.

/cc @cockroachdb/release


This drastically reduces the memory overhead for tracing we're observing
in #59424. This commit does a few disparate things to make it happen:

  1. We now access the tracing span through txnState.Ctx exclusively. This
    gives us a single point to hijack, which we'll later do. By default
    txn's are initialized with a no-op span. If later on session tracing is
    enabled, we'll create a real (verbose) span and swap it out with the
    txn's no-op one. This gives us the same semantics as earlier, and on the
    plus side, we're not re-using the same tracing span when session tracing
    is toggled.
  2. Hard tracing methods to work with no-op spans. Specifically
    GetRecording and TraceID.
  3. Remove a crash vector through crdb_internal.trace_id. It was
    previously reaching into the first recording to retrieve a trace ID. But
    it's not guaranteed that recordings are non-empty. This could be used to
    induce panics in the server.

This PR will need to get backported to 21.1. Fixes #59424.

Release note: None


+cc @cockroachdb/kv-east.

This is a "by-hand" revert of 842d79b and motivates the next commit.
The only "by-hand" bits comes from wanting to retain the comments
added in that commit.

To reduce the memory overhead for tracing, statements will stop using
real spans unless absolutely required (for e.g. when SET TRACING = on).
The intent behind cockroachdb#61532 was to reduce the overhead of sampled
statements by not creating an additional new span when one was already
available (the statement's span). Well, with the next commit, the
statement's span will be a no-op one, so when we know that we're
sampling we'll want create a new span.

In the end, with respect to spans created, we'll be doing no worse for
sampled statements relative to cockroachdb#61532.

Release note: None
This drastically reduces the memory overhead for tracing we're observing
in cockroachdb#59424. This commit does a few disparate things to make it happen:

1. We now access the tracing span through txnState.Ctx exclusively. This
   gives us a single point to hijack, which we'll later do. By default
   txn's are initialized with a no-op span. If later on session tracing is
   enabled, we'll create a real (verbose) span and swap it out with the
   txn's no-op one. This gives us the same semantics as earlier, and on the
   plus side, we're not re-using the same tracing span when session tracing
   is toggled.
2. Hard tracing methods to work with no-op spans. Specifically
   GetRecording and TraceID.
3. Remove a crash vector through crdb_internal.trace_id. It was
   previously reaching into the first recording to retrieve a trace ID. But
   it's not guaranteed that recordings are non-empty. This could be used to
   induce panics in the server.

This PR will need to get backported to 21.1. Fixes cockroachdb#59424.

Release note: None
@cockroach-teamcity
Copy link
Member

This change is Reviewable

@irfansharif irfansharif merged commit bf704ed into cockroachdb:release-21.1 Mar 15, 2021
@irfansharif irfansharif deleted the backport21.1-61777 branch March 15, 2021 13:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
3 participants