Is it possible to capture all queries sent to an MS SQL Server, without third-party tooling and without using deprecated features?
I'm looking for something similar to the "general query log" in MySQL.
Here's an example using a third-party tool:
Here's an alternative using deprecated features:
Is there a non-deprecated, native solution?
Best Answer
You could use Extended Events to capture this data. However, depending on how much traffic your server gets this could become a lot of data very quickly and could result in performance issues.
I would look at limiting the events that you track to something like
sqlserver.rpc_completed
orsqlserver.sql_statement_completed
, these only capture what was completed. Erin Stellato wrote a great piece on useing XEvent Profiler to capture queries in SQL Server.From SSMS, you would go to Management > Extended Events > Session and either use the
New Session Wizard
orNew Session
to start building your session to track data. The Microsoft Docs go into a lot of detail on how to set this up.Here is an example of something I implemented recently to capture queries on a specific server, you can add filters to remove queries that you don't want to see - like some server names or application names that execute queries as well:
This captures the details of what has been executed and puts it into a file for easy querying and analysis.