pingcap/tidb

Avoid double-copy buffer when responding MySQL packets

Open

#32,097 创建于 2022年2月3日

在 GitHub 查看
 (3 评论) (0 反应) (1 负责人)Go (6,186 fork)batch import
help wantedtype/enhancementtype/performance

仓库指标

Star
 (40,090 star)
PR 合并指标
 (平均合并 14天 4小时) (30 天内合并 346 个 PR)

描述

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.

贡献者指南