怎么把个人做的网站发布到网上做背景音乐的版权网站

当前位置: 首页 > news >正文

怎么把个人做的网站发布到网上,做背景音乐的版权网站,做网站推广一般多少钱,网络推广公司收费标准目录 简介Online DDL概念Online DDL用法总结 简介 在MySQL5.5以及之前的版本#xff0c;通常更改数据表结构操作#xff08;DDL#xff09;会阻塞对表数据的增删改操作#xff08;DML#xff09;。 MySQL5.6提供Online DDL之后可支持DDL与DML操作同时执行#xff0c;降低… 目录 简介Online DDL概念Online DDL用法总结 简介 在MySQL5.5以及之前的版本通常更改数据表结构操作DDL会阻塞对表数据的增删改操作DML。 MySQL5.6提供Online DDL之后可支持DDL与DML操作同时执行降低了DDL期间对业务延迟带来的影响。 下面进行案例演示。我们准备了一个分数表有600万的测试数据接下来我们验证一下我们日常使用的ALTER语句不提交看看是否会全程锁表 #事务A 添加索引 不提交 begin; ALTER TABLE scores ADD index idx_student_id (student_id);

commit;#事务B 查询数据与修改数据

begin; select id from scores where id 1; commit;begin; update scores set course_name 张三 where id 1; commit;发现查询事务和修改事务都是可以正常返回的发现这条DDL语句不会全程锁表执行过程中真的不会锁表吗我们再看一种情况首先删除索引 ALTER TABLE scores drop index idx_student_id;然后开启添加索引事务不提交然后再开启查询事务并且也不提交这个时候通过show processlist命令查看mysql的执行信息观察加索引时ddl语句的执行情况。 show processlist;观察到ddl语句正在执行中 再show一下发现ddl语句变成了等待我们的元数据锁释放中即查询语句持有了我们的一个元数据锁。这个时候我们提交查询事务可以发现索引就添加成功了。说明我们这条sql本质上还是有个加锁的过程。 再看一种情况也先删除索引然后开启查询事务不提交去持有元数据锁然后再执行添加索引然后show一下执行信息发现DDL语句已经在等待元数据锁释放了。然后我们提交一下查询事务再show一下发现DDL语句正在往下执行这个时候我们再开启一个事务进行修改也不提交多show几下直到DDL执行完毕发现我们开启的修改事务阻塞了我们的DDL语句继续执行。提交修改事务发现索引就添加成功了。那么也就是说我们这个DDL语句实际上有两个加锁的过程并且在这个加锁的时候如果说我们的元数据锁被其他的事务给占有了那么我们这个DDL语句就会被阻塞第二次也是一样的。 MySQL 5.6或更高版本上进行表结构修改操作如添加索引MySQL默认情况下会尝试使用Online DDL来最小化操作对读写操作的影响MySQL会选择默认的最佳方式进行操作。 Online DDL概念 概念在不中断现有数据读写操作的情况下自动执行 DDL语句例如创建、修改、删除表等的机制。Online DDL 可以在MySQL进行表空间或数据文件的变化时自动执行 DDL语句从而避免了传统方式中执行 DDL 语句时对数据库读写操作的干扰和中断。 执行过程Online ddl 执行大致可分为三个阶段初始化阶段、执行阶段和提交表定义阶段 初始化阶段 评估存储引擎能力与DDL语句 评估ALGORITHM 和 LOCK 创建可升级的MDL读锁元数据读锁 执行阶段 此阶段分为两个步骤准备和执行DDL语句 此阶段是否需要MDL写锁取决于初始化阶段评估的因素。如果需要MDL写锁的话仅在准备过程会短暂的使用MDL写锁然后降级为MDL读锁 DDL执行过程最耗时 提交表定义阶段 此阶段会将MDL读锁升级到MDL写锁此阶段一般较快因此独占锁的时间也较短 用新的表定义替换旧的表定义释放MDL锁
Online DDL用法 区别与我们日常使用的DLL语句多了两个参数 ALTER TABLE scores ADD index idx_student_id (student_id) , ALGORITHMINPLACE, LOCKNONE;ALTER TABLE scores ADD index idx_student_id (student_id) , ALGORITHMCOPY, LOCKEXCLUSIVE;ALGORITHM有三个可选项 ALGORITHMDEFAULT默认算法使用最高效的算法 ALGORITHMINPLACE解决全程锁表的一个方式在原表上进行更改不需要生成临时表不需要进行数据copy的过程。 添加索引步骤 1.创建索引二级索引数据字典 2.加共享表锁禁止DML允许查询 3.读取聚簇索引构造新的索引项排序并插入新索引 4.等待打开当前表的所有只读事务提交 5.创建索引结束 ALGORITHMCOPY最原始的方式通过临时表创建索引需要多一倍存储还有更多的I0类似5.6版本之前的处理过程添加索引步骤 1.新建带索引主键索引的临时表心 2.锁原表禁止DML允许查询 3.将原表数据拷贝到临时表 4.禁止读写进行rename升级字典锁 5.完成创建索引操作 LOCK有四种 LOCKDEFAULT默认方式MySQL自行判断使用哪种LOCK模式尽量不锁表 LOCKNONE无锁允许Online DDL期间进行并发读写操作。通常与INPLACE搭配使用。如果Online DDL操作不支持对表的继续写入则DDL操作失败对表修改无效 LOCKSHARED共享锁Online DDL操作期间堵塞写入不影响读取 LOCKEXCLUSIVE排它锁Online DDL操作期间不允许对锁表进行任何操作 接下来我们使用这两种执行方式来看一下是不是会全程锁表。先是第一种的INPLACE ALTER TABLE scores ADD index idx_student_id (student_id) , ALGORITHMINPLACE, LOCKNONE;先删除刚刚的索引然后开启一个事务添加索引不提交执行一下查询事务提交是可以正常查询的。再开启一个修改事务提交是可以正常修改的。即INPLACE方式是不会全程锁表的。那么它在执行的过程中会加锁吗 还是删除索引然后开启一个事务添加索引不提交执行一下查询事务不提交此时show一下执行信息发现DDL语句正在执行ALTER语句再show一下发现DDL语句已经被阻塞了因为它在等待元数据锁释放也就是说DDL语句实际上还是会有个加锁的过程。提交一下查询事务发现索引就添加成功了。 然后我们再次验证一种场景还是删除索引然后先开启一个查询事务不提交先持有元数据锁然后再开启事务添加索引不提交这个时候show一下执行信息发现DDL语句正在等待元数据锁释放提交一下查询事务show一下发现ddl语句正在往下执行这个时候再开启一个修改事务不提交多show几下直到DDL执行完毕发现我们的DDL语句也被这个修改事务阻塞了因为它正在等待元数据锁的释放这个时候我们再开一个修改事务提交、查询事务提交show一下发现他们都被阻塞住。也就是说online ddl语句被阻塞后它就会进一步的将后续过来的DML事务全部阻塞住将修改事务提交索引就添加成功了。 所以日常使用的DDL语句的INPLACE方式执行过程有两次加锁加锁过程中如果有其他事务持有了元数据锁DDL语句就会被阻塞后续来的DML操作都会被阻塞住。 再看一下COPY方式 ALTER TABLE scores ADD index idx_student_id (student_id) , ALGORITHMCOPY, LOCKEXCLUSIVE;还是删除索引然后开启一个事务添加索引不提交然后执行查询事务提交修改事务提交执行信息发现两个DML语句都被阻塞。即COPY方式是全程锁表的它不允许DDL和DML的并发。 总结 从宏观上看Online DDL的事务相当于会和其他事务并行执行只不过Online DDL会在表空闲时进行执行所以Online DDL不会阻塞其他操作在Online DDL执行过程会两次获取MDL锁1.申请MDL写锁 2. 降级成MDL读锁 3.执行DDL –耗时 4. 升级MDL写锁 5. 释放MDL锁并且需要等待已经持有MDL锁的并发事务提交或回滚后才能继续执行在实际执行时需注意以下几点 进行DDL操作时尽量在业务低峰期进行操作。尽量的降低我们online ddll的阻塞时间进而减少整个表的死锁在操作之前最好确认对要操作的表没有任何进行中的操作、没有未提交事务、也没有显式事务中的报错语句。设置超时时间lock_wait_timeout避免长时间的metedata锁等待。 set global lock_wait_timeout 60;

单位是s 默认好像是一年show variables like %timeout%;