**Describe the situation**
https://markify.dev/p/zfrQMV2/text

**How to reproduce**
On aws `c5ad.24xlarge` run a query:

```
SET max_memory_usage = '100G', max_threads = 1000, max_insert_threads = 96

INSERT INTO wikistat WITH
    parseDateTimeBestEffort(extract(toLowCardinality(_path), 'pageviews-([\\d\\-]+)\\.gz$')) AS time,
    splitByChar(' ', line) AS values,
    splitByChar('.', values[1]) AS projects
SELECT
    time,
    projects[1] AS project,
    projects[2] AS subproject,
    values[2] AS path,
    CAST(values[3], 'UInt64') AS hits
FROM s3('https://....s3.eu-central-1.amazonaws.com/wikistat/original/*.gz', '...', '...', LineAsString, auto)
WHERE length(values) >= 3
```

Performance is not bad (22 million rows are inserted per second) but can be better.
{
    if (!buf.eof()
        && buf.position() + 3 < buf.buffer().end()
        && buf.position()[0] == '\xEF'
        && buf.position()[1] == '\xBB'
        && buf.position()[2] == '\xBF')
    {
        buf.position() += 3;
    }
}
void skipToNextLineOrEOF(ReadBuffer & buf);
void skipToCarriageReturnOrEOF(ReadBuffer & buf);
void skipToUnescapedNextLineOrEOF(ReadBuffer & buf);
/** This function just copies the data from buffer's internal position (in.position())
  * to current position (from arguments) into memory.
  */
void saveUpToPosition(ReadBuffer & in, Memory<Allocator<false>> & memory, char * current);
/** This function is negative to eof().
  * In fact it returns whether the data was loaded to internal ReadBuffers's buffer or not.
  * And saves data from buffer's position to current if there is no pending data in buffer.
  * Why we have to use this strange function? Consider we have buffer's internal position in the middle
  * of our buffer and the current cursor in the end of the buffer. When we call eof() it calls next().
  * And this function can fill the buffer with new data, so we will lose the data from previous buffer state.
  */
bool loadAtPosition(ReadBuffer & in, Memory<Allocator<false>> & memory, char * & current);
void skipToNextRowOrEof(PeekableReadBuffer & buf, const String & row_after_delimiter, const String & row_between_delimiter, bool skip_spaces);
struct PcgDeserializer
{
    static void deserializePcg32(pcg32_fast & rng, ReadBuffer & buf)