Skip to content

Commit be86418

Browse files
committed
Add row count and affected rows to Trilogy spans
Identifying queries that return/update many rows is very useful for improving database performance. Queries that return many rows can cause applications to use excess memory (or in some cases like Vitess) could be blocked altogether. Queries that update many rows can cause replication lag and generally put more pressure on a database. This commit adds both of these values (row_count and affected_rows) to spans created from Trilogy#query to help identify these problematic queries. Trilogy::Result#count will always return a value (0 for mutations), but #affected_rows only returns values for mutations (nil for SELECTs).
1 parent 45d0a54 commit be86418

File tree

2 files changed

+13
-2
lines changed

2 files changed

+13
-2
lines changed

instrumentation/trilogy/lib/opentelemetry/instrumentation/trilogy/patches/client.rb

+7-2
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ def query(sql)
4949
OpenTelemetry::Instrumentation::Trilogy.attributes
5050
),
5151
kind: :client
52-
) do |_span, context|
52+
) do |span, context|
5353
if propagator && sql.frozen?
5454
sql = +sql
5555
propagator.inject(sql, context: context)
@@ -58,7 +58,12 @@ def query(sql)
5858
propagator.inject(sql, context: context)
5959
end
6060

61-
super
61+
result = super
62+
63+
span.set_attribute('db.response.returned_rows', result.count)
64+
span.set_attribute('db.response.affected_rows', result.affected_rows) unless result.affected_rows.nil?
65+
66+
result
6267
end
6368
end
6469

instrumentation/trilogy/test/opentelemetry/instrumentation/trilogy/instrumentation_test.rb

+6
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,12 @@
164164
_(span.attributes[OpenTelemetry::SemanticConventions::Trace::DB_SYSTEM]).must_equal 'mysql'
165165
_(span.attributes[OpenTelemetry::SemanticConventions::Trace::DB_STATEMENT]).must_equal 'DESELECT ?'
166166
end
167+
168+
it 'includes row count' do
169+
client.query('SELECT 1')
170+
171+
_(span.attributes['db.response.returned_rows']).must_equal(1)
172+
end
167173
end
168174

169175
describe 'when connecting' do

0 commit comments

Comments
 (0)