To find the OS thread of a session, join sys.dm_os_tasks to sys.dm_os_threads on the worker address. This post reads the map for your own session and for every user session. It explains why idle sessions have no row, why parallel queries have several, and how to follow a thread in Performance Monitor.
sys.dm_exec_valid_use_hints: Every USE HINT Your Server Knows
sys.dm_exec_valid_use_hints lists every USE HINT name that your SQL Server accepts. This post groups the 35 names on SQL Server 2025 and shows the compile error for a misspelled hint. It applies two hints and reads the plan to prove each one worked, then compares USE HINT with QUERYTRACEON.
Threads With Zero Rows in a Parallel Plan, Measured
A parallel plan can show threads with zero rows, and that is normal. This post reads the per-thread row counters of two real plans on SQL Server 2025 and shows where the empty threads come from. It also says when an empty thread points to a real problem.
When Did SQL Server Last Restart? Four Ways to Check
Find SQL Server’s last restart using startup metadata, tempdb, logs, and sessions, then interpret reset counters correctly.
Cached Data Per Object in Memory: Read the Buffer Pool
Cached data per object tells you which tables and indexes fill the buffer pool. This post builds two demo tables, empties their cache and reads part of the data. A query then lists the pages, megabytes and share of each index in memory. It also explains why the view is costly on a big server.
Which Tables Are Huge: Rows Versus Size in SQL Server
Rows versus size decides which tables are huge in SQL Server. One query reads sys.dm_db_partition_stats and ranks every table twice, by rows and by size. A demo shows 300 rows that outweigh 300,000 rows, and why the older join misleads.
Finding the Indexes Behind Lock Waits With Operational Stats
Rank indexes behind lock waits with operational stats, separate latches from locks, and test targeted access or row versioning fixes.







