设为首页 加入收藏

TOP

Oracle 11.2.0.3和MySQL5.6 DDL比较(二)
2015-11-10 12:16:25 来源: 作者: 【 】 浏览:1
Tags:Oracle 11.2.0.3 MySQL5.6 DDL 比较
innodb status
?---TRANSACTION 462658, not started
?MySQL thread id 2, OS thread handle 0x40671940, query id 445 localhost root Waiting for table metadata lock
?alter table testno add m int(10)
?---TRANSACTION 462663, ACTIVE 45 sec
?1 lock struct(s), heap size 360, 0 row lock(s), undo log entries 1
?MySQL thread id 1, OS thread handle 0x40430940, query id 443 localhost root cleaning up


在没有事物的情况下:


ORACLE如果不指定默认值,增加字段非常快,机会瞬间完成,所以不存在堵塞的情况。
?如果是
alter table testti add test varchar2(20) default 'test1';
然后另外开启一个会话
insert into testti select * from testti where rownum<=1;


?ORACLE等待时间为:
library cache lock


?MYSQL在这方面貌似做得更好,ADD COLUMN不会堵塞任何DDL,他会把期间的操作放入
innodb_online_alter_log_max_size ,等待完成后同步回来,实际上ORACLE和MYSQL
在CREATE INDEX ONLINE的情况下都是使用了这个机制,都是将修改放入一个临时的
?区域完成后进行同步来完成一致性,ORACLE是将临时记录记录到SYS_JOURNAL_****表里面?
只是ORACLE在ADD COL的情况下应该是没有使用的,因为如果没有默认值ORACLE的
?增加COL是非常快的,但是MYSQL有无默认值是一样的。
?会话1:
mysql> alter table testno add m int(10) default 0;
?Query OK, 0 rows affected (43.97 sec)
?Records: 0? Duplicates: 0? Warnings: 0


会话2:
mysql> insert into testno values(122,'test1');
?Query OK, 1 row affected (0.00 sec)
插入不受影响。


5、drop col


?drop col ORACLE和MYSQL都和ADD COL带默认值的方式没有太多的区别,ORACLE在没有事物的情况
?下任然会堵塞会话等待为
enq: TM - contention
?MYSQL则不会,但是MYSQL可能的需要重组表类似ORACLE的MOVE TABLE,还需考证


首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇MySQL (ICP) 索引条件下推对比Ora.. 下一篇MySQL 统计数据

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: