pingcap/tidb

Avoid double-copy buffer when responding MySQL packets

Open

#32.097 aberto em 3 de fev. de 2022

Ver no GitHub
 (3 comments) (0 reactions) (1 assignee)Go (6.186 forks)batch import
help wantedtype/enhancementtype/performance

Métricas do repositório

Stars
 (40.090 stars)
Métricas de merge de PR
 (Mesclagem média 14d 4h) (346 fundiu PRs em 30d)

Description

Enhancement

When we want to return the packages to the client, our logic is:

  1. Prepare the packet and serialize it to a buffer allocated by the area.Allocator
  2. Write this data through packetIO.WritePacket, in the WritePacket, the data will be cached in a buffer writer
  3. Flush the buffer writer to the connection

Mostly, e.g, for write ok https://github.com/pingcap/tidb/blob/0c19f927419f6b043a345e4a2af5336272830229/server/conn.go#L1442, we can see that we don't need to double copy the buffer, we can serialize the data and write it directly to the connection.

Guia do colaborador