pingcap/tidb
Voir sur GitHubAvoid double-copy buffer when responding MySQL packets
Open
#32 097 ouverte le 3 févr. 2022
help wantedtype/enhancementtype/performance
Métriques du dépôt
- Stars
- (40 090 stars)
- Métriques de merge PR
- (Merge moyen 14j 4h) (346 PRs mergées en 30 j)
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.