成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MySQL 8.0.31并行構(gòu)建索引特性管窺

數(shù)據(jù)庫 MySQL
利用sysbench構(gòu)建一個有400萬行記錄的測試表,只有一個主鍵索引時,表空間物理文件大小為1044381696 Bytes,添加完測試索引后,表空間物理文件大小漲到1434451968 Bytes,增加了37.35%。

MySQL 8.0.31于2022.10.11發(fā)布了,比我預計的日期早了一周,先贊一個。

看了下 release notes ,新增的東西不算多,感覺MySQL官方對8.0版本已經(jīng)進入維穩(wěn)的后半段了,英文不好的同學可以戳此查看 徐軼韜老師針對8.0.31做的快速解讀?。另外,根據(jù) 徐老師的最新推文,也了解到MySQL針對8.0版本延長了標準支持(Premier Support)時長,從原來的2023.4延長到了2025.4,不過延伸支持(Extended Support)的期限沒有改變,仍然是2026.4。

本次發(fā)布的8.0.31新特性中,我注意到有一句不太起眼的說明:

InnoDB: InnoDB now supports parallel index builds, which improves index build performance. In particular, loading sorted index entries into a B-tree is now multithreaded. Previously, this action was performed by a single thread.

只有這么簡單的一句,沒更多擴展解釋說明。簡言之,就是支持并行構(gòu)建索引,提升索引構(gòu)建性能。

并行構(gòu)建索引測試

還是直接做個測試看看吧。

利用sysbench構(gòu)建一個有400萬行記錄的測試表,只有一個主鍵索引時,表空間物理文件大小為1044381696 Bytes,添加完測試索引后,表空間物理文件大小漲到1434451968 Bytes,增加了37.35%。

mysql> CREATE TABLE `t1` (
`id` int NOT NULL AUTO_INCREMENT,
`k` int NOT NULL DEFAULT '0',
`c` char(120) NOT NULL DEFAULT '',
`pad` char(60) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

mysql> select count(*) from t1;
+----------+
| count(*) |
+----------+
| 4000000 |
+----------+
1 row in set (0.35 sec)

接下來,我分別針對GreatSQL 8.0.25-16、MySQL 8.0.31做重建索引的測試,每個數(shù)據(jù)庫跑10次,計算其每次耗時,去掉最大最小偏差值,取剩下的8次求平均值。都先采用默認設(shè)置,最后得到的結(jié)果如下表:


GreatSQL 8.0.25-16

MySQL 8.0.31

平均耗時(秒)

42.529

31.202

可以看到,使用MySQL 8.0.31重建索引的效率提升了約36%,還是相當可觀的,如果是線上環(huán)境有大表可能提升效果更可觀。

進一步提高索引構(gòu)建效率

從MySQL 8.0.27開始,新增選項 innodb_ddl_buffer_size?,其作用是作為Online DDL期間的buffer(代替 innodb_sort_buffer_size? 的作用),用于提升輔助索引構(gòu)建的效率。這是Online DDL期間總共可以使用的buffer,如果有多個DDL并發(fā)線程,則每個線程最大可用的buffer是 innodb_ddl_buffer_size / innodb_ddl_threads。其默認值是1MB,明顯太低了,我在本案中嘗試修改成64M、128MB、256MB、512MB、1GB,再對比測試其效果。

選項 innodb_ddl_threads 也是從8.0.27開始新增的,用于定義Online DDL的并發(fā)線程數(shù),默認值是4,可根據(jù)實際情況調(diào)整。

模式

平均耗時(秒)

提升比例

GreatSQL 8.0.25-16默認值

42.529


MySQL 8.0.31默認值

31.202

36.30%

64M

23.448

81.38%

64M + 8thds

21.202

100.59%

128M

22.856

86.07%

128M + 8thds

21.456

98.21%

256M

22.047

92.90%

256M + 8thds

21.266

99.99%

512M

22.885

85.84%

512M + 8thds

23.227

83.10%

1G

25.239

68.51%

1G + 8thds

24.486

73.69%

上面表格中,64M表示innodb_ddl_buffer_size=64M?,8thds表示innodb_ddl_threads=8,其他以此類推。

可以看到,當 innodb_ddl_buffer_size? 及 innodb_ddl_threads 值適當加大后,重建索引的耗時明顯降低,最好的情況下,索引重建效率可提升1倍;不過其效率也并不隨著值增加而線性提高。看起來,線上生產(chǎn)環(huán)境需要根據(jù)實測情況進行調(diào)整。

圖片

循環(huán)自動測試的shell腳本也順便分享出來:

#!/bin/bash
db=MySQL
# 設(shè)置不同的ddl buffer size
for dbp in 64 128 256 512 1024
do
exec 3>&1 4>&2 1>> parallel-index-build-${dbp}m.log 2>&1

# 循環(huán)10次
for i in $(seq 1 10)
do
echo "$db cycle $i"
mysql -N -s -q -f -S./$db/mysql.sock -e "set global innodb_ddl_buffer_size=$dbp*1024*1024" test > /dev/null 2>&1
mysql -f -S./$db/mysql.sock -e "select @@global.innodb_ddl_buffer_size" test
mysql -N -s -q -f -S./$db/mysql.sock -e "alter table t1 drop index i1, drop index i2;" test > /dev/null 2>&1
sleep 5
time mysql -N -s -q -f -S./$db/mysql.sock -e "alter table t1 add index i1(k), add index i2(pad);" test
echo ""
echo ""
sleep 5
done

# 調(diào)整ddl threads = 8
exec 3>&1 4>&2 1>> parallel-index-build-${dbp}m-8th.log 2>&1
for i in $(seq 1 10)
do
echo "$db cycle $i"
mysql -N -s -q -f -S./$db/mysql.sock -e "set global innodb_ddl_threads=8" test > /dev/null 2>&1
mysql -f -S./$db/mysql.sock -e "select @@global.innodb_ddl_threads" test
mysql -N -s -q -f -S./$db/mysql.sock -e "alter table t1 drop index i1, drop index i2;" test > /dev/null 2>&1
sleep 5
time mysql -N -s -q -f -S./$db/mysql.sock -e "alter table t1 add index i1(k), add index i2(pad);" test
echo ""
echo ""
sleep 5
done

# 恢復 ddl threads=4
mysql -N -s -q -f -S./$db/mysql.sock -e "set global innodb_ddl_threads=4" test > /dev/null 2>&1
mysql -f -S./$db/mysql.sock -e "select @@global.innodb_ddl_threads" test
done

并行構(gòu)建索引的限制

最后,再來看下并行構(gòu)建索引新特性都有哪些限制:

不支持虛擬列(virtual columns)。

不支持全文索引(full-text index)。

不支持空間索引(spatial index )。

期待MySQL 8.0未來新版本中繼續(xù)推出更多實用的新特性吧。

延伸閱讀

  • Changes in MySQL 8.0.31,https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-31.html
  • Configuring Parallel Threads for Online DDL Operations,https://dev.mysql.com/doc/refman/8.0/en/online-ddl-parallel-thread-configuration.html
  • Online DDL Memory Management,https://dev.mysql.com/doc/refman/8.0/en/online-ddl-memory-management.html

責任編輯:武曉燕 來源: GreatSQL社區(qū)
相關(guān)推薦

2009-11-13 14:59:12

Visual Stud

2020-05-14 11:19:19

降序索引子集

2011-09-22 09:41:16

JavaScript

2010-03-08 09:47:40

openSUSE

2021-11-12 20:48:27

數(shù)字化

2010-04-06 10:04:20

紅旗inMini

2010-03-17 08:49:49

Visual Stud

2009-01-16 10:01:57

MySQL復制特性測試

2013-07-25 09:55:39

2021-01-07 08:43:11

微服務pipelineGitLabGroup

2015-10-30 15:55:43

MySQL

2020-09-28 15:34:38

ElasticSear索引MySQL

2010-08-02 16:38:39

DB2 UDB for

2023-01-03 15:42:29

機器學習視頻搜索

2011-03-31 13:51:54

MySQL索引

2010-05-28 10:24:30

MySQL Event

2016-08-18 00:54:59

Python圖片處理搜索引擎

2017-09-04 16:03:46

MySQLMySQL索引索引

2023-05-10 08:04:55

MySQL離線模式生效

2022-03-25 10:38:40

索引MySQL數(shù)據(jù)庫
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 日韩av成人 | 久久久精 | 国产精品亚洲一区 | 国产精品国产三级国产aⅴ中文 | 国产毛片久久久久久久久春天 | 日韩高清一区 | 一区二区三区影院 | 久久精品电影 | 一区二区三区在线 | 国产美女福利在线观看 | 国产永久免费 | 亚洲精品美女视频 | 国产精品福利一区二区三区 | 麻豆av在线免费观看 | 亚洲精品久久久久久久久久久久久 | 四虎影院一区二区 | 日本欧美在线观看视频 | 国产精品18久久久久久久 | 国产乱码精品一区二区三区中文 | 国产精品三级久久久久久电影 | 999久久久久久久 | 国产精品毛片av一区 | 在线视频国产一区 | 超碰综合| 欧洲国产精品视频 | 国产区在线观看 | 久久亚洲精品国产精品紫薇 | 黑人巨大精品欧美一区二区一视频 | 99久久精品免费看国产四区 | 亚洲第1页| 黄色av网站在线观看 | 最新国产视频 | 欧美一区二区在线观看 | 国产视频一区在线 | 日韩精品一区二区三区老鸭窝 | 国产一区二区三区在线观看免费 | 亚洲成人一区 | 国内精品伊人久久久久网站 | 欧美亚洲国产一区二区三区 | www.xxxx欧美 | 成人3d动漫一区二区三区91 |