No prob. I find whenever I'm stuck its either sleep or documentation I am missing myself ;) On Jul 14, 2015 9:00 AM, "Daniel Price" <danprice...@gmail.com> wrote:
> I'd been using an explicit call to executeBatch() based on a tutorial I > found somewhere, but when I removed that call, not only did I get the > expected return, but row insert performance increased by an incredible > amount--180k rows used to take about 200s, but now about 10s. No hangs > yet... Thanks, Owen, for directing me to look at method implementation, > which had me seek guidance right from the source. > > Regards, > D > > On Tue, Jul 14, 2015 at 11:23 AM, Daniel Price <danprice...@gmail.com> > wrote: > >> I've implemented withTransaction() now, and I'm running continually >> waiting for another hang. If there were an error, wouldn't it crash the >> script--or does hang == crash? I still can't get a return from withBatch() >> with an actual input list, which consists of many different datatypes, only >> with 'sanitized' input lists of Strings and ints... >> >> Regards, >> D >> >> On Tue, Jul 14, 2015 at 11:02 AM, Owen Rubel <oru...@gmail.com> wrote: >> >>> The hangs are probably a result of: >>> >>> For integrity and performance reasons, you may wish to consider >>> executing your batch command(s) within a transaction: >>> >>> sql.withTransaction { >>> def result1 = sql.withBatch { ... } >>> ... >>> } >>> >>> >>> Owen Rubel >>> 415-971-0976 >>> oru...@gmail.com >>> >>> On Tue, Jul 14, 2015 at 7:28 AM, Dinko Srkoč <dinko.sr...@gmail.com> >>> wrote: >>> >>>> On 14 July 2015 at 15:20, Daniel Price <danprice...@gmail.com> wrote: >>>> > [...] >>>> > I'm wondering why I'm not seeing a non-empty return from my batch >>>> code: >>>> > >>>> > myList = [['a','b'],['c','d']] >>>> > >>>> > def result = sql.withBatch(someInt, "insert into myDB.dbo.myTable >>>> (column1, >>>> > column2) values (?,?)"){ ps -> >>>> > myList.each{ >>>> > ps.addBatch(it) >>>> > } >>>> > ps.executeBatch() >>>> ^^^^^^^^^^^^^^^^ >>>> > } >>>> > println "result: " + result >>>> > >>>> > prints: >>>> > result: [] >>>> > >>>> > Shouldn't result == [1] * myList.size()? >>>> >>>> The reason for `[]` result might be the explicit call to >>>> `ps.executeBatch()`. That method is actually called implicitly by >>>> `sql.withBatch`, after the Closure parameter is invoked, and it resets >>>> the internal results storage. >>>> >>>> So, your explicit call to `executeBatch` executes whatever is left to >>>> execute, then resets the internal results storage and returns the >>>> collected result. Unfortunately, that result is lost, as >>>> `sql.withBatch` calls `executeBatch` again, but this time there is >>>> nothing left to execute, so the final result is empty array of ints >>>> that is added to the emptied internal results storage. >>>> >>>> tl;dr; >>>> Remove the `ps.executeBatch()` from your code. >>>> >>>> I can't say anything about the hangs, sorry. >>>> >>>> Cheers, >>>> Dinko >>>> >>>> > >>>> > Hangs always happen upon completion of the batch... >>>> > >>>> > Regards, >>>> > D >>>> > >>>> > >>>> > >>>> > On Mon, Jul 13, 2015 at 4:06 PM, Daniel Price <danprice...@gmail.com> >>>> wrote: >>>> >> >>>> >> Good Afternoon, >>>> >> >>>> >> I'm experiencing infrequent (1/20) hangs with a Groovy script >>>> that >>>> >> uses withBatch() to insert and update a SQL Server DB using stored >>>> >> procedures. In each case (insert or update), the batch completes as >>>> >> indicated by database content, but the script hangs and does not >>>> continue >>>> >> until I ctrl-c it. This script is the only user of the table, so DB >>>> locking >>>> >> isn't involved. The batches are only about 200k rows, but I set the >>>> >> withBatch() parameter to 25k to be nice to the DB. Has anybody seen >>>> this >>>> >> before? Any suggestions? Thanks! >>>> >> >>>> >> D >>>> > >>>> > >>>> >>> >>> >> >