Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 39849
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 10, 20262026-05-10T14:55:47+00:00 2026-05-10T14:55:47+00:00

I have an ETL process that involves a stored procedure that makes heavy use

  • 0

I have an ETL process that involves a stored procedure that makes heavy use of SELECT INTO statements (minimally logged and therefore faster as they generate less log traffic). Of the batch of work that takes place in one particular stored the stored procedure several of the most expensive operations are eager spools that appear to just buffer the query results and then copy them into the table just being made.

The MSDN documentation on eager spools is quite sparse. Does anyone have a deeper insight into whether these are really necessary (and under what circumstances)? I have a few theories that may or may not make sense, but no success in eliminating these from the queries.

The .sqlplan files are quite large (160kb) so I guess it’s probably not reasonable to post them directly to a forum.

So, here are some theories that may be amenable to specific answers:

  • The query uses some UDFs for data transformation, such as parsing formatted dates. Does this data transformation necessitate the use of eager spools to allocate sensible types (e.g. varchar lengths) to the table before it constructs it?
  • As an extension of the question above, does anyone have a deeper view of what does or does not drive this operation in a query?
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. 2026-05-10T14:55:47+00:00Added an answer on May 10, 2026 at 2:55 pm

    My understanding of spooling is that it’s a bit of a red herring on your execution plan. Yes, it accounts for a lot of your query cost, but it’s actually an optimization that SQL Server undertakes automatically so that it can avoid costly rescanning. If you were to avoid spooling, the cost of the execution tree it sits on will go up and almost certainly the cost of the whole query would increase. I don’t have any particular insight into what in particular might cause the database’s query optimizer to parse the execution that way, especially without seeing the SQL code, but you’re probably better off trusting its behavior.

    However, that doesn’t mean your execution plan can’t be optimized, depending on exactly what you’re up to and how volatile your source data is. When you’re doing a SELECT INTO, you’ll often see spooling items on your execution plan, and it can be related to read isolation. If it’s appropriate for your particular situation, you might try just lowering the transaction isolation level to something less costly, and/or using the NOLOCK hint. I’ve found in complicated performance-critical queries that NOLOCK, if safe and appropriate for your data, can vastly increase the speed of query execution even when there doesn’t seem to be any reason it should.

    In this situation, if you try READ UNCOMMITTED or the NOLOCK hint, you may be able to eliminate some of the Spools. (Obviously you don’t want to do this if it’s likely to land you in an inconsistent state, but everyone’s data isolation requirements are different). The TOP operator and the OR operator can occasionally cause spooling, but I doubt you’re doing any of those in an ETL process…

    You’re right in saying that your UDFs could also be the culprit. If you’re only using each UDF once, it would be an interesting experiment to try putting them inline to see if you get a large performance benefit. (And if you can’t figure out a way to write them inline with the query, that’s probably why they might be causing spooling).

    One last thing I would look at is that, if you’re doing any joins that can be re-ordered, try using a hint to force the join order to happen in what you know to be the most selective order. That’s a bit of a reach but it doesn’t hurt to try it if you’re already stuck optimizing.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Ask A Question

Stats

  • Questions 259k
  • Answers 259k
  • Best Answers 0
  • User 1
  • Popular
  • Answers
  • Editorial Team

    How to approach applying for a job at a company ...

    • 7 Answers
  • Editorial Team

    How to handle personal stress caused by utterly incompetent and ...

    • 5 Answers
  • Editorial Team

    What is a programmer’s life like?

    • 5 Answers
  • Editorial Team
    Editorial Team added an answer The problem is that by definition (of XML) a double… May 13, 2026 at 11:14 am
  • Editorial Team
    Editorial Team added an answer It's double negation. The first ! converts it to false… May 13, 2026 at 11:14 am
  • Editorial Team
    Editorial Team added an answer Turns out pressing the STOP button in the debugger leaves… May 13, 2026 at 11:14 am

Related Questions

I have a web site which I download 2-3 MB of raw data from
I am investigating an issue relating to a large log expansion during an ETL
We are working on a datawarehouse for a bank and have pretty much followed
I don't know the first thing about Informatica but I am looking for ways

Trending Tags

analytics british company computer developers django employee employer english facebook french google interview javascript language life php programmer programs salary

Top Members

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.