mysql利用show master status 计算一批数据量的大小

进行压测时需要创建一个事务包含数据的大小为1MB。如何计算事务中的数据大小?要是能够使用大字段,就好办使用lpad函数填充字段值,使其为1MB。但表中无大字段,表结构如下:
CREATE TABLE tstudent (
studentID int(15) NOT NULL,
Sname varchar(10) DEFAULT NULL,
sex char(1) DEFAULT NULL,
cardID varchar(20) DEFAULT NULL,
Birthday date DEFAULT NULL,
Email varchar(40) DEFAULT NULL,
Class varchar(20) DEFAULT NULL,## 标题
enterTime datetime DEFAULT NULL,
remarks mediumtext
PRIMARY KEY (studentID),
KEY pri_stuid (studentID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8`

造多少条数据能达到1MB?如果知道1000条数据占用的大小就知道总的数据条数。计算方式:
1MB/(1000条数据的大小)*1000
然后使用存储过程进行创建数据。

表建好后插入一千条数据,想到的是利用mysql自带的schema.tables表来计算。计算方式如下:
select sum(DATA_LENGTH)+sum(INDEX_LENGTH) from information_schema.tables
where table_schema=‘数据库名’ and table_name=‘表名’;。

本以为搞定,结果这样计算出来的大小比实际小。

发现过程:
另一个表中有一个text字段,利用LPAD函数进行填充,填充为1MB。
写法如下:
LPAD(CONVERT(“lipp3”,CHAR(1048576)),1048576,‘0’)。

利用上述计算方式计算出来的数据大小是16KB。把内容从mysql中copy出来放在text文档显示是1MB。

于是改写了计算方式。方式如下:
在插入数据之前,执行show master status;看一下position的位置。插入数据执行之后再执行一下show master status。利用第二次的position减去第一次的position得到的差值便是这么多条数据的大小(单位是B,一定确保此时的数据库没有其他人进行数据的增删改操作)。

注意事项:
①一定开启binlog日志。在my.ini配置增加
log-bin=mysql-bin
binlog-format = ROW
server_id=20190911
其中server_id是唯一的就行。
②若第一次show master status的file名与第二次的不一致。产生的原因是binlog文件大小已经达到设置的大小,需要另外产生一个binlog文件。解决办法如下:
方法一:
可再插入一批数据,再计算差值。
方法二:
此时需要查看binlog文件大小show variables like ‘max_binlog_size’。拿这个值加上第二次的position的值再减去第一次的position值,即是插入数据的大小。show matser status的格式如图:
在这里插入图片描述
③如果mysql的用户不具有root权限。即用户只能对某些库某些表有操作权限。在执行show master status时会报错,报错如图:
在这里插入图片描述
需要用root用户执行下面两条语句。赋给用户获取binlog的权限。
grant replication client on . TO ‘用户名’@‘localhost’ identified by ‘密码’;
flush PRIVILEGES;

每篇一语

走自己的忍道,循序渐进地寻找问题的答案。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值