pingcap/tidb
Ver no GitHubAvoid double-copy buffer when responding MySQL packets
Open
#32.097 aberto em 3 de fev. de 2022
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:
- Prepare the packet and serialize it to a buffer allocated by the area.Allocator
- Write this data through packetIO.WritePacket, in the WritePacket, the data will be cached in a buffer writer
- 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.