MySQL5.6在线DDL索引创建性能评估与测试分析
作者:告非言普 | 来源:互联网 | 2024-10-23 11:42
基本信息:mysql版本:(product)root@localhost[(none)]>select@@version;+------------+|@@version
基本信息:
mysql版本:
(product)root@localhost [(none)]> select @@version;
+------------+
| @@version |
+------------+
| 5.6.29-log |
+------------+
1 row in set (0.00 sec)
表payment的记录数:
(product)root@localhost [sakila]> select count(*) from payment;
Connection id: 24
Current database: sakila
+----------+
| count(*) |
+----------+
| 16049 |
+----------+
1 row in set (0.00 sec)事务隔离级别:
(product)root@localhost [(none)]> show variables like '%isolation%';
+---------------+----------------+
| Variable_name | Value |
+---------------+----------------+
| tx_isolation | READ-COMMITTED |
+---------------+----------------+
1 row in set (0.00 sec)场景一:
测试在payment_date字段利用ALGORITHM=COPY,LOCK=EXCLUSIVE方式建立索引所需时间,并监控表是否有加锁?
1.会话1先执行每秒监控查询表payment是否有锁,并记录到txt文件#!/bin/bash
while : ;do
date>>/data/mysql/mysql3376/lock.txt &&
mysql -uroot -psafe_2016 -S /tmp/mysql3376.sock -e "show open tables from sakila where In_use>0">>/data/mysql/mysql3376/lock.txt
sleep 1
done
2.会话2执行建索引脚本
(product)root@localhost [(none)]> alter table sakila.payment add index payment_date_ix1 (payment_date),ALGORITHM=COPY,LOCK=EXCLUSIVE;
Query OK, 16049 rows affected (1.08 sec)
Records: 16049 Duplicates: 0 Warnings: 0
3.查看lock.txt
cat lock.txt
Sun Apr 17 20:11:17 HKT 2016
Database Table In_use Name_locked
sakila payment 1 0
4.drop索引,并重启mysql,以清空buffer pool缓存数据
alter table sakila.payment drop index payment_date_ix1;
并重启mysql。小结:监控到表sakila.payment add index在执行建索引过程中有锁表,且建索引时间为1.08秒。场景二:
测试在payment_date字段利用ALGORITHM=COPY,LOCK=SHARED方式建立索引所需时间,并监控表是否有加锁?
1.会话1先执行每秒监控查询表payment是否有锁,并记录到txt文件
#!/bin/bash
while : ;do
date>>/data/mysql/mysql3376/lock.txt &&
mysql -uroot -psafe_2016 -S /tmp/mysql3376.sock -e "show open tables from sakila where In_use>0">>/data/mysql/mysql3376/lock.txt
sleep 1
done
2.会话2执行建索引脚本
(product)root@localhost [(none)]> alter table sakila.payment add index payment_date_ix1 (payment_date),ALGORITHM=COPY,LOCK=SHARED;
Query OK, 16049 rows affected (1.57 sec)
Records: 16049 Duplicates: 0 Warnings: 0
3.查看lock.txt
cat lock.txt
Sun Apr 17 20:19:40 HKT 2016
Database Table In_use Name_locked
sakila payment 1 0
4.drop索引,并重启mysql,以清空buffer pool缓存数据
alter table sakila.payment drop index payment_date_ix1; 小结:监控到表sakila.payment add index在执行建索引过程中有锁表,且建索引时间为1.08秒。
场景三:
测试在payment_date字段利用ALGORITHM=COPY,LOCK=NONE方式建立索引所需时间,并监控表是否有加锁?
1.会话1先执行每秒监控查询表payment是否有锁,并记录到txt文件
#!/bin/bash
while : ;do
date>>/data/mysql/mysql3376/lock.txt &&
mysql -uroot -psafe_2016 -S /tmp/mysql3376.sock -e "show open tables from sakila where In_use>0">>/data/mysql/mysql3376/lock.txt
sleep 1
done
2.会话2执行建索引脚本
(product)root@localhost [(none)]> alter table sakila.payment add index payment_date_ix1 (payment_date),ALGORITHM=COPY,LOCK=NONE;
ERROR 1846 (0A000): LOCK=NONE is not supported. Reason: COPY algorithm requires a lock. Try LOCK=SHARED. 小结:ALGORITHM=COPY,LOCK=NONE两个参数不能同时组合使用,copy方式必需要加锁。场景四:
测试在payment_date字段利用ALGORITHM=INPLACE,LOCK=EXCLUSIVE方式建立索引所需时间,并监控表是否有加锁?
1.会话1先执行每秒监控查询表payment是否有锁,并记录到txt文件
#!/bin/bash
while : ;do
date>>/data/mysql/mysql3376/lock.txt &&
mysql -uroot -psafe_2016 -S /tmp/mysql3376.sock -e "show open tables from sakila where In_use>0">>/data/mysql/mysql3376/lock.txt
sleep 1
done
2.会话2执行建索引脚本
(product)root@localhost [(none)]> alter table sakila.payment add index payment_date_ix1 (payment_date),ALGORITHM=INPLACE,LOCK=EXCLUSIVE;
Query OK, 0 rows affected (0.32 sec)
Records: 0 Duplicates: 0 Warnings: 0
3.查看lock.txt
cat lock.txt
Sun Apr 17 20:29:26 HKT 2016
Sun Apr 17 20:29:27 HKT 2016
Sun Apr 17 20:29:28 HKT 2016
4.drop索引,并重启mysql,以清空buffer pool缓存数据
alter table sakila.payment drop index payment_date_ix1; 小结:监控到表sakila.payment add index在执行建索引过程中无锁表,且建索引时间为0.32秒。场景五:
测试在payment_date字段利用ALGORITHM=INPLACE,LOCK=SHARED方式建立索引所需时间,并监控表是否有加锁?
alter table sakila.payment add index payment_date_ix1 (payment_date),ALGORITHM=INPLACE,LOCK=SHARED;
1.会话1先执行每秒监控查询表payment是否有锁,并记录到txt文件
#!/bin/bash
while : ;do
date>>/data/mysql/mysql3376/lock.txt &&
mysql -uroot -psafe_2016 -S /tmp/mysql3376.sock -e "show open tables from sakila where In_use>0">>/data/mysql/mysql3376/lock.txt
sleep 1
done
2.会话2执行建索引脚本
(product)root@localhost [(none)]> alter table sakila.payment add index payment_date_ix1 (payment_date),ALGORITHM=INPLACE,LOCK=SHARED;
Query OK, 0 rows affected (0.23 sec)
Records: 0 Duplicates: 0 Warnings: 0
3.查看lock.txt
cat lock.txt
Sun Apr 17 20:37:07 HKT 2016
Sun Apr 17 20:37:08 HKT 2016
Sun Apr 17 20:37:09 HKT 2016
4.drop索引,并重启mysql,以清空buffer pool缓存数据
alter table sakila.payment drop index payment_date_ix1; 小结:监控到表sakila.payment add index在执行建索引过程中无锁表,且建索引时间为0.23秒。场景六:
测试在payment_date字段利用ALGORITHM=INPLACE,LOCK=NONE方式建立索引所需时间和是否锁住表上dml操作?
1.会话1先执行每秒监控查询表payment是否有锁,并记录到txt文件
#!/bin/bash
while : ;do
date>>/data/mysql/mysql3376/lock.txt &&
mysql -uroot -psafe_2016 -S /tmp/mysql3376.sock -e "show open tables from sakila where In_use>0">>/data/mysql/mysql3376/lock.txt
sleep 1
done
2.会话2执行建索引脚本
(product)root@localhost [(none)]> alter table sakila.payment add index payment_date_ix1 (payment_date),ALGORITHM=INPLACE,LOCK=NONE;
Query OK, 0 rows affected (0.17 sec)
Records: 0 Duplicates: 0 Warnings: 0
3.查看lock.txt
cat lock.txt
Sun Apr 17 20:39:56 HKT 2016
Sun Apr 17 20:39:57 HKT 2016
Sun Apr 17 20:39:58 HKT 2016
4.drop索引,并重启mysql,以清空buffer pool缓存数据
alter table sakila.payment drop index payment_date_ix1 小结:监控到表sakila.payment add index在执行建索引过程中无锁表,且建索引时间为0.17秒。;场景七:
测试在payment_date字段在默认方式建立索引所需时间和是否锁表?
1.会话1先执行每秒监控查询表payment是否有锁,并记录到txt文件
#!/bin/bash
while : ;do
date>>/data/mysql/mysql3376/lock.txt &&
mysql -uroot -psafe_2016 -S /tmp/mysql3376.sock -e "show open tables from sakila where In_use>0">>/data/mysql/mysql3376/lock.txt
sleep 1
done
2.会话2执行建索引脚本
(product)root@localhost [(none)]> alter table sakila.payment add index payment_date_ix1 (payment_date);
Query OK, 0 rows affected (0.21 sec)
Records: 0 Duplicates: 0 Warnings: 0
3.查看lock.txt
cat lock.txt
Sun Apr 17 20:44:25 HKT 2016
Sun Apr 17 20:44:26 HKT 2016
Sun Apr 17 20:44:27 HKT 2016
4.drop索引,并重启mysql,以清空buffer pool缓存数据
alter table sakila.payment drop index payment_date_ix1; 小结:监控到表sakila.payment add index在执行建索引过程中无锁表,且建索引时间为0.21秒。总结:
1.ALGORITHM=INPLACE和默认方式在线建索引都不会锁表,而copy方式必需锁表
2.ALGORITHM=COPY,LOCK=NONE两个参数不能同时组合使用,因为copy方式必需要加锁。
3.ALGORITHM=INPLACE方式比ALGORITHM=COPY方式建索引时间至少减少70%。
4.重启mysql方式是否有比较干净清空buffer pool中缓存数据,需进一步验证确认。
推荐阅读
-
掌握 MongoDB 基础操作与实用技巧 ...
[详细]
蜡笔小新 2024-10-22 14:12:23
-
在我的项目中,我访问MySQL数据库。我可以通过该程序在此数据库中调用并运行查 ...
[详细]
蜡笔小新 2024-10-23 05:54:37
-
-
2019独角兽企业重金招聘Python工程师标准背景在应用端通过mybatis的interceptor自定义Plugin拦截Executor,统计输出sql的执行耗时。今天生 ...
[详细]
蜡笔小新 2024-10-22 13:40:07
-
python,基础,mysql,数据库, ...
[详细]
蜡笔小新 2024-10-19 12:14:09
-
1.1取值概述1.1.1如何快速取指首先要保证存储器的读延时足够小,通常使用指令紧耦合存储器(ITCM)和指令缓存器(I ...
[详细]
蜡笔小新 2024-10-17 18:48:39
-
以前同事告诉我用临时表插入变量数据来查看,但是这种方法过于麻烦,而且Mysql没有比较好的调试存储过程的工具。今天google了下发现可以用select ...
[详细]
蜡笔小新 2024-10-22 18:05:32
-
背景
本文基于spark3.1.2之前在做bug调试的时候遇到了expand的问题,在此记录一下
分析
运行该sql:
createtabletest_ ...
[详细]
蜡笔小新 2024-10-22 16:42:53
-
本文实例讲述了JavaWeb开发之信息查询方式总结。分享给大家供大家参考。具体如下:这里介绍的查询方式有:①根据某个特定的字段查询;②在多 ...
[详细]
蜡笔小新 2024-10-22 09:33:07
-
为了提高性能,我们分别配置了五个replicat进程来对数据进行插入操作Oracle数据库的replicatADDREPLICATrep1,EXTTRAILhomeo ...
[详细]
蜡笔小新 2024-10-21 15:13:13
-
说到数据库,那就一定会聊到事务,事务也是面试中常问的问题,我们先来一个面试场景:面试官:事务的四大特性是什么?我:ACID,即原子性(Atomicity)、隔离性(Isola ...
[详细]
蜡笔小新 2024-10-21 14:14:41
-
本文实例分析了原生php实现excel文件读写的方法。分享给大家供大家参考,具体如下:最近在工作中遇到一个需求,需要将数据库中的数据导出到 ...
[详细]
蜡笔小新 2024-10-21 14:02:46
-
nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ...
[详细]
蜡笔小新 2024-10-19 19:45:42
-
Iamtryingtofindcodethatlooksattwocriteriainspreadsheet1andfindsarowthatcorresponds ...
[详细]
蜡笔小新 2024-10-19 18:37:02
-
我想从message_id(int类型)取最大值,用这条语句selectmax(message_id)asmaxidfrommessage出现一下错误[Microsoft][SQLS ...
[详细]
蜡笔小新 2024-10-19 15:54:38
-
例:D:\wamp\mysql\binmysqldump-hmysql服务器IP-u用户名-p密码数据库名表名--where筛选条件导出文件路径;MySQLd ...
[详细]
蜡笔小新 2024-10-18 10:12:16
-