Support traffic replay
@djshow832 is already working on this.
Since Aug 26, 2024.
- Dominant language
- Go
- Stars
- 73
- Forks
- 41
- Avg merge
- 21h 3m
- Merged PRs (30d)
- 21
Description
Feature Request
Describe your feature request related problem
There are some cases when users want to capture the traffic on the production cluster and replay the traffic on a testing cluster:
- A new TiDB version may have compatibility breakers, such as the statements failing, running slower, or resulting in different query results.
- When the cluster runs unexpectedly, users want to capture the traffic so that they can investigate it later by replaying the traffic.
- Test the maximum throughput of a scaled-up or scaled-down cluster using the real workload instead of Sysbench or TPCC.
Some traffic replay tools are widely used, including tcpcopy, mysql-replay, and query-playback. Tcpcopy and mysql-replay capture data like tcpdump, while query-playback is based on slow logs. Although some of them are built for MySQL, deploying them on the proxy instance also works.
However, they have some limitations:
- Users need to learn the deployment and usage of these tools.
- Tcpcopy only captures new connections, which is unfriendly for persistent connections. Mysql-replay can capture existing connections but it loses session states such as prepared statements and session variables, which may make replay fail.
- The tools replay the traffic with one username and one current schema, which requires modification to the testing cluster.
- Tcpcopy and mysql-replay don't support TLS because they can't decode the encrypted data.
- Users need to verify the results and performance manually.
Describe the feature you'd like
Capturing traffic on one TiDB cluster and replaying the traffic on a new TiDB cluster to verify the SQL compatibility and performance of the new TiDB cluster.
Tasks
Design
- #643
Traffic Capture
P1:
- #645
- #647
- #674
- #676
- #672
- #681
P2:
- #726
- #717
- #719
- #729
- #722
P3:
- Support more command types
Traffic Replay
P1:
- #652
- #654
- #657
- #659
- #678
- #687
- #700
P2:
- #711
P3:
- Streaming reading and sending large commands
- Track and limit the memory of pending commands
- Support more auth plugins
- Support replaying as fast as possible
- #866
- Support reading from MySQL slow logs
- Support reading from tcpdump files
- Support reading from TiDB statements summary tables
- Support reading from MySQL statements summary tables
Comparison and Report
P1:
- #661
- #683
User Interface
P1:
- #665
- #667
- #669
- #685
P2:
- #723
- #735
- #737
- #740
- #744
- #742
- #748
P3:
- Show the estimated disk usage of the traffic files
- Run as a replayer client
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.