Skip to content

Commit 2a6a96a

Browse files
Revert "Add option for sampling idle recently active sessions (#19479)" (#19492)
This reverts commit 06d858a.
1 parent 5150864 commit 2a6a96a

File tree

6 files changed

+16
-75
lines changed

6 files changed

+16
-75
lines changed

sqlserver/assets/configuration/spec.yaml

-8
Original file line numberDiff line numberDiff line change
@@ -609,14 +609,6 @@ files:
609609
value:
610610
type: number
611611
example: 10
612-
- name: sample_recently_active_idle_sessions
613-
description: |
614-
This option enables the sampling of idle sessions that were active since the last collection.
615-
Recommended for APM customers to boost the APM/DBM correlation.
616-
value:
617-
type: boolean
618-
example: true
619-
620612
- name: stored_procedure_characters_limit
621613
description: |
622614
Limit the number of characters of the text of a stored procedure that is collected.

sqlserver/changelog.d/19479.added

-1
This file was deleted.

sqlserver/datadog_checks/sqlserver/activity.py

+16-48
Original file line numberDiff line numberDiff line change
@@ -91,11 +91,11 @@
9191
).strip()
9292

9393
# Turns out sys.dm_exec_requests does not contain idle sessions.
94-
# Inner joining dm_exec_sessions with dm_exec_requests will not return any idle sessions.
95-
# This prevent us reusing the same ACTIVITY_QUERY for regular activities and idle sessions.
94+
# Inner joining dm_exec_sessions with dm_exec_requests will not return any idle blocking sessions.
95+
# This prevent us reusing the same ACTIVITY_QUERY for regular activities and idle blocking sessions.
9696
# The query below is used for idle sessions and does not join with dm_exec_requests.
9797
# The last query execution on the connection is fetched from dm_exec_connections.most_recent_sql_handle.
98-
IDLE_SESSIONS_QUERY = re.sub(
98+
IDLE_BLOCKING_SESSIONS_QUERY = re.sub(
9999
r'\s+',
100100
' ',
101101
"""\
@@ -114,25 +114,17 @@
114114
c.client_net_address as client_address,
115115
sess.host_name as host_name,
116116
sess.program_name as program_name,
117-
sess.is_user_process as is_user_process,
118-
sess.context_info as context_info
117+
sess.is_user_process as is_user_process
119118
FROM sys.dm_exec_sessions sess
120119
INNER JOIN sys.dm_exec_connections c
121120
ON sess.session_id = c.session_id
122121
CROSS APPLY sys.dm_exec_sql_text(c.most_recent_sql_handle) lqt
123-
WHERE
122+
WHERE sess.status = 'sleeping'
123+
AND sess.session_id IN ({blocking_session_ids})
124+
AND c.session_id IN ({blocking_session_ids})
124125
""",
125126
).strip()
126127

127-
IDLE_BLOCKERS_FILTER = """(sess.status = 'sleeping'
128-
AND sess.session_id IN ({blocking_session_ids})
129-
AND c.session_id IN ({blocking_session_ids}))"""
130-
131-
IDLE_RECENTLY_ACTIVE_FILTER = (
132-
"(sess.status = 'sleeping' AND sess.last_request_start_time > DATEADD(SECOND, - ?, GETDATE()))"
133-
)
134-
135-
136128
# enumeration of the columns we collect
137129
# from sys.dm_exec_requests
138130
DM_EXEC_REQUESTS_COLS = [
@@ -203,10 +195,6 @@ def __init__(self, check, config: SQLServerConfig):
203195
self._conn_key_prefix = "dbm-activity-"
204196
self._activity_payload_max_bytes = MAX_PAYLOAD_BYTES
205197
self._exec_requests_cols_cached = None
206-
self._sample_recently_active_idle_sessions = is_affirmative(
207-
self._config.activity_config.get('sample_recently_active_idle_sessions', False)
208-
)
209-
self._time_since_last_activity_event = 0
210198

211199
self._collect_raw_query_statement = self._config.collect_raw_query_statement.get("enabled", False)
212200
self._raw_statement_text_cache = RateLimitingTTLCache(
@@ -231,34 +219,15 @@ def _get_active_connections(self, cursor):
231219
self.log.debug("loaded sql server current connections len(rows)=%s", len(rows))
232220
return rows
233221

234-
def _is_sample_idle_recently_active_sessions(self) -> bool:
235-
return self._sample_recently_active_idle_sessions and self._time_since_last_activity_event
236-
237222
@tracked_method(agent_check_getter=agent_check_getter, track_result_length=True)
238-
def _get_idle_sessions(self, cursor, blocking_session_ids):
239-
query = IDLE_SESSIONS_QUERY.format(
223+
def _get_idle_blocking_sessions(self, cursor, blocking_session_ids):
224+
# The IDLE_BLOCKING_SESSIONS_QUERY contains minimum information on idle blocker
225+
query = IDLE_BLOCKING_SESSIONS_QUERY.format(
226+
blocking_session_ids=",".join(map(str, blocking_session_ids)),
240227
proc_char_limit=self._config.stored_procedure_characters_limit,
241228
)
242-
idle_filter = None
243-
244-
# a stateful closure that appends filters to the query
245-
def _append_filter(filter: str) -> str:
246-
if idle_filter:
247-
return f"{idle_filter} OR {filter}"
248-
return filter
249-
250-
if blocking_session_ids:
251-
idle_filter = _append_filter(
252-
IDLE_BLOCKERS_FILTER.format(blocking_session_ids=",".join(map(str, blocking_session_ids)))
253-
)
254-
if self._is_sample_idle_recently_active_sessions():
255-
idle_filter = _append_filter(IDLE_RECENTLY_ACTIVE_FILTER)
256-
query += idle_filter
257229
self.log.debug("Running query [%s]", query)
258-
if self._is_sample_idle_recently_active_sessions():
259-
cursor.execute(query, (int(time.time() - self._time_since_last_activity_event),))
260-
else:
261-
cursor.execute(query)
230+
cursor.execute(query)
262231
columns = [i[0] for i in cursor.description]
263232
rows = [dict(zip(columns, row)) for row in cursor.fetchall()]
264233
return rows
@@ -284,9 +253,9 @@ def _get_activity(self, cursor, exec_request_columns, input_buffer_columns, inpu
284253
blocking_session_ids = {r['blocking_session_id'] for r in rows if r['blocking_session_id']}
285254
# if there are blocking sessions and some of the session(s) are not captured in the activity query
286255
idle_blocking_session_ids = blocking_session_ids - session_ids
287-
if idle_blocking_session_ids or self._is_sample_idle_recently_active_sessions():
288-
idle_sessions = self._get_idle_sessions(cursor, idle_blocking_session_ids)
289-
rows.extend(idle_sessions)
256+
if idle_blocking_session_ids:
257+
idle_blocking_sessions = self._get_idle_blocking_sessions(cursor, idle_blocking_session_ids)
258+
rows.extend(idle_blocking_sessions)
290259
return rows
291260

292261
def _normalize_queries_and_filter_rows(self, rows, max_bytes_limit):
@@ -464,7 +433,6 @@ def _get_estimated_row_size_bytes(row):
464433
return len(str(row))
465434

466435
def _create_activity_event(self, active_sessions, active_connections):
467-
self._time_since_last_activity_event = time.time()
468436
event = {
469437
"host": self._check.resolved_hostname,
470438
"ddagentversion": datadog_agent.get_version(),
@@ -485,7 +453,7 @@ def _create_activity_event(self, active_sessions, active_connections):
485453
@tracked_method(agent_check_getter=agent_check_getter)
486454
def collect_activity(self):
487455
"""
488-
Collects all current activity for the SQLServer instance.
456+
Collects all current activity for the SQLServer intance.
489457
:return:
490458
"""
491459

sqlserver/datadog_checks/sqlserver/config_models/instance.py

-1
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,6 @@ class QueryActivity(BaseModel):
311311
)
312312
collection_interval: Optional[float] = None
313313
enabled: Optional[bool] = None
314-
sample_recently_active_idle_sessions: Optional[bool] = None
315314

316315

317316
class QueryMetrics(BaseModel):

sqlserver/datadog_checks/sqlserver/data/conf.yaml.example

-6
Original file line numberDiff line numberDiff line change
@@ -419,12 +419,6 @@ instances:
419419
#
420420
# collection_interval: 10
421421

422-
## @param sample_recently_active_idle_sessions - boolean - optional - default: true
423-
## This option enables the sampling of idle sessions that were active since the last collection.
424-
## Recommended for APM customers to boost the APM/DBM correlation.
425-
#
426-
# sample_recently_active_idle_sessions: true
427-
428422
## @param stored_procedure_characters_limit - integer - optional - default: 500
429423
## Limit the number of characters of the text of a stored procedure that is collected.
430424
## The characters limit is applicable to both query metrics and query samples.

sqlserver/tests/test_activity.py

-11
Original file line numberDiff line numberDiff line change
@@ -57,17 +57,6 @@ def dbm_instance(instance_docker):
5757
return copy(instance_docker)
5858

5959

60-
@pytest.mark.usefixtures('dd_environment')
61-
def test_idle_sessions_sampling(dbm_instance, dd_run_check):
62-
check = SQLServer(CHECK_NAME, {}, [dbm_instance])
63-
assert (
64-
not check.activity._sample_recently_active_idle_sessions
65-
), "Sample recently active idle sessions switched off by default"
66-
check.activity._sample_recently_active_idle_sessions = True
67-
check.activity._time_since_last_activity_event = 10
68-
dd_run_check(check)
69-
70-
7160
@pytest.mark.flaky
7261
@pytest.mark.integration
7362
@pytest.mark.usefixtures('dd_environment')

0 commit comments

Comments
 (0)