Omg it’s sooo daammmn slooow it takes around 30 seconds to bulk - insert 15000 rows

Disabling indices doesn’t help. Database log is at SIMPLE. My table is 50 columns wide, and from what i understand the main reason is the stupid limit of 2100 parameters in query in ODBC driver. I am using the . NET SqlBulkCopy. I only open the connection + transaction once per ~15000 inserts

I have 50 millions rows to insert, it takes literally days, please send help, i can fucking write with a pen and paper faster than damned Microsoft driver inserts rows

  • aMockTie@beehaw.org
    link
    fedilink
    arrow-up
    2
    ·
    3 months ago

    Been a little while since I worked on ODBC stuff, but I have a couple of thoughts:

    • Would it be possible to use something like a table function on the DB side to simplify the query from the ODBC side?

    • I could be misremembering, but I feel like looping through individual inserts with an open connection was faster than trying to submit data in bulk when inserting that much data in one shot. Might be worth doing a benchmark in a test DB and table to confirm.

    I know I was able to insert more than 50M rows in a manner of single digit hours, but unfortunately don’t have access to that codebase anymore to double check the specifics.

    • deegeese@sopuli.xyz
      link
      fedilink
      arrow-up
      1
      ·
      3 months ago

      Looping single inserts over an open connection is far far slower than a bulk insert because every row is another transaction.

      Only thing it’s faster than is if you opened and closed a connection for each row.