设为首页
收藏本站
开启辅助访问
繁体中文
提现
切换到宽版
用户名
Email
自动登录
找回密码
密码
登录
立即注册
资源网
商业源码
分享源码
零氪游戏
SEO学习网
VIP
永久服务器
快捷导航
搜索
搜索
本版
文章
帖子
用户
永久服务器
私密影视你懂得
戴尔服务器代理商
NK博客-SEO的天堂
阿里云宝宝
华为服务器代理商
快排狗SEO
猫先森SEO
破解游戏平台
精品域名任君选购
6/月、50/年、200/永久。
6/月、50/年、200/永久。
6/月、50/年、200/永久。
6/月、50/年、200/永久。
6/月、50/年、200/永久。
6/月、50/年、200/永久。
6/月、50/年、200/永久。
6/月、50/年、200/永久。
6/月、50/年、200/永久。
6/月、50/年、200/永久。
猫先森网络资源站
»
论坛
›
站长资讯
›
网站教程
›
MySQL5.6在线DDL更改表测试
返回列表
查看:
100
|
回复:
0
[PHP]
MySQL5.6在线DDL更改表测试
[复制链接]
程序猿
程序猿
当前离线
积分
34274
论坛元老
积分
34274
主题
17031
UID
1347
M币
67
贡献
17176
发消息
发表于 2018-7-11 04:05:00
|
显示全部楼层
|
阅读模式
先在这里普及下基础知识:在之前的版本,在线更改表,比如增加一个字段,其内部原理是这样的:1、createtabletmpliket1(创建一个临时表)2、insertintotmpselec
先在这里普及下基础知识:
在之前的版本,在线更改表,比如增加一个字段,其内部原理是这样的:
1、create table tmp like t1(创建一个临时表)
2、insert into tmp select * from t1(一行行的把原表数据拷贝到临时表里,且更新索引)
3、drop table t1;rename table tmp to t1(删除原表并把临时表改名为原表t1)
在这个过程中会对t1表加S锁(共享锁),所以这个代价是很高的。
而在MySQL5.6里,对其进行了优化,当会话一增加字段时,其他会话增,删,改,查,均不受影响,不会锁表。
比如这样测试,用Sysbench生成一张1000万行的数据,数据大一些,可以看出效果来。
然后在会话一,执行:
alter table sbtest add name varchar(10) after pad; 会话二,执行:
insert into sbtest values(1000,1,'abc','abc','abc');
这时你会发现并没有锁表,顺利执行完毕。
但在MySQL5.5里,香港空间,网站空间,这样的操作是会锁表的,如图所示:
那么MySQL5.6 在线DDL就一定不锁表吗?我们再这样测试:
在会话一:
select * from sbtest; 故意执行一条大结果的查询,然后再执行删除刚才增加的字段name
alter table sbtest drop name; 这时就会把表给锁了,香港空间,如图所示:
也就是说,在执行alter table表时,对该表的增、删、改、查均不会锁表。而在这之前,该表有被访问时,需要等其执行完毕后,才可以执行alter table。
所以在凌晨上线时,一定要观察下,此时此刻,是否有某个慢SQL对该表进行操作,以免改表时出现锁等待现象。
参考手册:
本文出自 “贺春旸的技术专栏” 博客,请务必保留此出处
在线
,
更改
,
测试
相关帖子
•
亲测可用的服务器在线测速系统源码
•
快乐加倍!LOL手游亚索实机测试曝光,流畅连招不输端游
•
逆水寒收费制改变第一天,在线人数明显提升,玩家:游戏好起来了
•
十分钟在线人数破万的《命令与征服:重制版》,RTS游戏溯源之旅
•
《我的侠客》小规模测试体验:愈发细致的侠客江湖
•
《砖块迷宫建造者》精致沙盒游戏,测试你的编程能力!
•
《小猫爱消除》休闲娱乐两不误,在线撸猫乐趣多!
•
网络图片加密平台源码 图片在线收款发货系统源码
•
在线Let正版短信测压开源源码
•
全新PHP程序开发在线工单管理系统源码
回复
使用道具
举报
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
在我站开通SVIP可同时获得17个站点VIP资源
立即登录
或
立即注册
快速回复
返回顶部
返回列表