This is the ninth installment in the 12 day series for SQL tidbits during this holiday season.
Previous articles in this mini-series on quick tidbits:
- SQL Sat LV announcement
- Burning Time
- Reviewing Peers
- Broken Broker
- Peer Identity
- Lost in Space
- Command ‘n Conquer
- Ring in The New
Ever see an error like this??
The query processor ran out of internal resources and could not produce a query plan. This is a rare event and only expected for extremely complex queries or queries that reference a very large number of tables or partitions. Please simplify the query. If you believe you have received this message in error, contact Customer Support Services for more information.
That is a beautiful error. The message is replete with information and gives you everything needed to fix the problem, right? More than a handful of DBAs have been frustrated by this error. It’s not just DBAs that this message seems to bother. I have seen plenty of clients grumble about it too.
The obvious problem is that we have no real information as to what query caused the error to pop. The frustrating part is that the error may not be a persistent or consistent issue.
Thanks to the super powers of XE (extended events), we can trap that information fairly easily now. Bonus is that to trap that information, it is pretty lightweight as far as resource requirements go.
Without further ado, here is a quick XE session that could be setup to help trap this bugger.
CREATE EVENT SESSION overly_complex_queries ON SERVER ADD EVENT sqlserver.error_reported ( ACTION (sqlserver.sql_text, sqlserver.tsql_stack, sqlserver.database_id, sqlserver.username) WHERE ([severity] = 16 AND [error_number] = 8623) ) ADD TARGET package0.asynchronous_file_target (SET filename = 'C:\Database\XE\overly_complex_queries.xel' , metadatafile = 'C:\Database\XE\overly_complex_queries.xem', max_file_size = 10, max_rollover_files = 5) WITH (MAX_DISPATCH_LATENCY = 5SECONDS) GO -- Start the session ALTER EVENT SESSION overly_complex_queries ON SERVER STATE = START GO
And now for the caveats. This session will only work on SQL 2012. The second caveat is that there are two file paths defined in this session that must be changed to match your naming and directory structure for the output files etc.
Should you try to create this session on SQL Server 2008 (or 2008 R2) instead of SQL Server 2012, you will get the following error.
Msg 25706, Level 16, State 8, Line 1
The event attribute or predicate source, “error_number”, could not be found.
Now that you have the session, you have a tool to explore and troubleshoot the nuisance “complex query” error we have all grown to love. From here, the next step would be to explore the output.