On 2018-06-07 17:01:47 +1200, David Rowley wrote: > On 7 June 2018 at 16:13, Andres Freund <and...@anarazel.de> wrote: > > in PortalRun(). That's actually fairly trivial to optimize - we don't > > need the full blown snprintf machinery here. A quick benchmark > > replacing it with: > > > > memcpy(completionTag, "SELECT ", sizeof("SELECT ")); > > pg_lltoa(nprocessed, completionTag + 7); > > I'd also noticed something similar with some recent benchmarks I was > doing for INSERTs into partitioned tables. In my case I saw as high as > 0.7% of the time spent building the INSERT tag. So I think it's worth > fixing this.
I'm kinda surprised that I never noticed this until recently. I wonder if there's a glibc or compiler regression causing this. There's some string optimization passes, it could be that it now does less. > I think it would be better to invent a function that accepts a > CmdType, int64 and Oid that copies the tag into the supplied buffer, > then make a more generic change that also replaces the code in > ProcessQuery() which builds the tag. I'm sure there must be some way > to get the CmdType down to the place you've patched so we can get rid > of the if (strcmp(portal->commandTag, "SELECT") == 0) line too. Generally sounds reasonable, I'm not sure it's worth to do the surgery to avoid the strcmp(). That's a larger change that's somewhat independent... Greetings, Andres Freund