Python MySQL Connector远程数据库连接带宽消耗计算咨询
计算Python-MySQL短连接的单次流量及总流量
你的脚本每次运行都会新建MySQL连接、执行INSERT操作后断开连接,整个过程的流量由TCP连接开销、MySQL握手认证开销、SQL执行请求/响应开销、TCP断开开销四部分组成,不能仅以SQL语句的130字节作为参考。
单次操作的流量构成估算
- TCP连接建立(三次握手):双向流量约240字节(3个数据包,每个包含IP+TCP头部共40字节,发送、接收各占120字节)
- MySQL握手认证:
- 服务器发送初始握手包:约50-80字节
- 客户端发送认证包:约80-150字节(取决于用户名、密码长度,
mysql_native_password认证包包含加密后的密码) - 服务器返回认证成功包:约20字节
这部分双向流量合计约150-250字节
- SQL执行交互:
- 客户端发送
COM_QUERY包:1字节命令码 + 2字节长度标识 + 130字节SQL = 133字节,加上TCP/IP头部,实际发送约173字节 - 服务器返回
OK结果包:约15字节,加上头部实际接收约55字节
这部分双向流量合计约228字节
- 客户端发送
- TCP连接断开(四次握手):双向流量约320字节(4个数据包,每个包头部40字节,发送、接收各占160字节)
单次总流量估算
将各部分相加,单次完整操作的双向总流量约在500-800字节之间(环境不同会有小幅波动,比如用户名密码更长时,认证包会更大)。
总流量计算
按14880次执行次数计算:
- 最低估算:14880 × 500字节 = 7,440,000字节 ≈ 7.1MB
- 最高估算:14880 × 800字节 = 11,904,000字节 ≈ 11.3MB
大幅减少流量的优化方案
当前脚本使用短连接(每次操作新建/断开连接),连接开销占总流量的比例很高。改成长连接(保持连接不关闭,每3分钟复用连接执行INSERT)可省去每次的TCP连接/断开、MySQL握手认证开销,单次操作流量会降到200-300字节,总流量仅2.9-4.4MB,能节省约60%的流量。
优化后的代码片段:
import mysql.connector import time # 初始化长连接 mydb = mysql.connector.connect( host="remote_IP", user="", password="", database="", auth_plugin='mysql_native_password', autocommit=True ) mycursor = mydb.cursor() # 循环执行14880次,每3分钟一次 for _ in range(14880): # 检测连接有效性,无效则重新连接 if not mydb.is_connected(): mydb.reconnect() mycursor = mydb.cursor() sql='INSERT INTO table (col1,col2,col3,col4) VALUES(123456789,123456789,"example text here....","example column here test test test")' mycursor.execute(sql) print(mycursor.rowcount) time.sleep(180) # 3分钟间隔 # 最后关闭连接 mydb.close()
精确测量流量的方法
如果需要完全准确的数值,可通过抓包工具统计:
- 在客户端机器运行
tcpdump命令,过滤目标MySQL服务器IP:tcpdump -i any host remote_IP -w mysql_traffic.pcap - 运行一次脚本后停止
tcpdump - 用Wireshark打开
mysql_traffic.pcap,统计整个会话的发送、接收字节数,两者之和即为单次操作的总流量
内容的提问来源于stack exchange,提问作者wuqn yqow
相关产品推荐
相关产品推荐

