Skip to content

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

Merged
irfansharif merged 2 commits intocockroachdb:release-21.1from
irfansharif:backport21.1-61777
Mar 15, 2021
Merged

release-21.1: sql: only create real spans when session tracing/sampling#61965
irfansharif merged 2 commits intocockroachdb:release-21.1from
irfansharif:backport21.1-61777

Conversation

@irfansharif
Copy link
Copy Markdown
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
Copy Markdown
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