Sessions and Requests

  • Hi all

    I am just trying to understand the relationship between sessions and requests. If I understand correctly then a request has to run in a session and can only have a 1 to 1 relationship with that session at runtime i.e. the request can not run across multiple session IDs.

    In trying to understand this I have been using the following queries, the first pulls information about a session, while the second is about a request.

    SELECTdes.session_id,

    des.status,

    des.login_name,

    des.[HOST_NAME],

    der.blocking_session_id,

    DB_NAME(der.database_id) AS database_name,

    der.command,

    des.cpu_time,

    des.reads,

    des.writes,

    dec.last_write,

    des.[program_name],

    der.wait_type,

    der.wait_time,

    der.last_wait_type,

    der.wait_resource,

    CASE des.transaction_isolation_level

    WHEN 0 THEN 'Unspecified'

    WHEN 1 THEN 'Readuncommitted'

    WHEN 2 THEN 'ReadCommitted'

    WHEN 3 THEN 'Repeastable'

    WHEN 4 THEN 'Serializable'

    WHEN 5 THEN 'Snapshot'

    END AS transaction_isolation_level,

    OBJECT_NAME(dest.objectid, der.database_id) AS [OBJECT_NAME],

    SUBSTRING(dest.text, der.statement_start_offset / 2,

    (CASE WHEN der.statement_end_offset = -1

    THEN DATALENGTH(dest.text)

    ELSE der.statement_end_offset

    END - der.statement_start_offset) / 2)

    AS [executing statement],

    deqp.query_plan

    FROMsys.dm_exec_sessions des

    LEFT JOIN sys.dm_exec_requests der

    ON des.session_id = der.session_id

    LEFT JOIN sys.dm_exec_connections dec

    ON des.session_id = dec.session_id

    CROSS APPLY sys.dm_exec_sql_text(der.sql_handle) dest

    CROSS APPLY sys.dm_exec_query_plan(der.plan_handle) deqp

    WHEREdes.session_id <> @@spid

    ORDER BYdes.session_id

    SELECTdest.dbid,

    dest.objectid,

    dest.number,

    dest.text AS Full_Statement,

    --Offset code to pull back actual statement executing.

    SUBSTRING(dest.text, der.statement_start_offset/2,

    (CASEWHEN der.statement_end_offset = -1

    THEN DATALENGTH(dest.text)

    ELSE der.statement_end_offset

    END - der.statement_start_offset) /2) AS Statement_executing,

    deqp.query_plan,

    session_id,

    start_time,

    status,

    command,

    --sql_handle,

    plan_handle,

    DB_NAME(database_id) AS DBName,

    user_id,

    blocking_session_id,

    wait_type,

    wait_time,

    last_wait_type,

    wait_resource,

    cpu_time,

    total_elapsed_time,

    reads,

    writes,

    logical_reads

    FROM sys.dm_exec_requests der

    CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS dest

    CROSS APPLY sys.dm_exec_query_plan(plan_handle) AS deqp --could alos use sys.dm_exec_text_query for text version fo plan

    --WHERE status NOT IN ('Background')

    --AND database_id <> 1 --Filter out Master DB

    --AND session_id <> @@SPID --Filter out this query

    WHERE session_id <> @@SPID

    My question is why when I run these queries to I sometime see requests with a session_id but no corresponding session in the session query?

    Thanks

Viewing 0 posts

You must be logged in to reply to this topic. Login to reply