mysql8.0.11新特性測試
一、 資料字典與原子DDL
mysql的所有表結構定義的後設資料存放在mysql.idb中。整合了儲存有關資料庫物件資訊的事務資料字典,所有的後設資料都用InnoDB引擎進行儲存.看下圖,我建立了一個 database business,你會發現表的定義檔案*.frm沒有了。
-
[root@yw-gz-hd-test-211 mysql]# ls
-
auto.cnf binlog.index client-cert.pem ibdata1 mysql public_key.pem undo_001
-
binlog.000001 business client-key.pem ib_logfile0 mysql.ibd server-cert.pem undo_002
-
binlog.000002 ca-key.pem error.log ib_logfile1 performance_schema server-key.pem yw-gz-hd-test-211.pid
-
binlog.000003 ca.pem ib_buffer_pool ibtmp1 private_key.pem sys
-
[root@yw-gz-hd-test-211 mysql]# ls business/
-
job_execution_log.ibd t_gw_remit_query.ibd t_mer_transfer.ibd
-
job_status_trace_log.ibd t_gw_remit_serial.ibd t_sms_gateway.ibd
-
t_bal_sett_report.ibd t_gw_serial.ibd t_sms_recode.ibd
- t_boss_logger.ibd t_mail_record.ibd t_sms_service.ibd
在執行DDL之類的操作時,很難做到crash-safe,更別說讓DDL具備事務性了。
在MySQL8.0之前,DDL操作在server crash的情況下,會遺留.frm,.ibd檔案。MySQL8.0 能實現原?DDL(包括 DROP TABLE, DROP SCHEMA, CREATE TABLE, TRUNCATE TABLE, ALTER TABLE),在server crash的情況下,不會遺留.frm,.ibd臨時檔案,保證了DDL操作的原子性!
二 、字符集支援(Character set support)
資料庫的預設字符集 latin1 到 utf8mb4 。
三、重構sql分析器,提升效能
改進SQL分析器。舊的分析器由於其語法複雜性和自頂向下的分析方式從而有嚴重的限制,導致難以維護和擴充套件。
四、onlineDDL 的巨大改進。8.0.12版本將會增加 ALGORITHM=INSTANT 方法。我們知道,mysql的對錶結構的更改,一直讓DBA頭疼。目前有2兩種ALGORITHM [=] {INPLACE|COPY} 。instant是比inplace方法更改,鎖定表的時間更短。
五、innodb 增強,提升效能
(1)innodb_undo_tablespaces的最小值為2,並且不再允許將innodb_undo_tablespaces設定為0。 最小值2確保回滾段始終在撤消表空間中建立,而不是在系統表空間中建立
(2)InnoDB臨時表都將在共享臨時表空間ibtmp1中建立
六、調整back_log的預設值,保持和 max_connections一致,增強突發流量帶來的連線處理容量。這告訴我們,有些引數是隨著另外一個引數動態調整的。
新增innodb_dedicated_server,讓InnoDB根據伺服器上檢測到的記憶體量自動配置innodb_buffer_pool_size,innodb_log_file_size,innodb_flush_method
-
原來是:來試驗一下:
-
mysql> select * from `performance_schema`.global_variables where VARIABLE_NAME in ('innodb_dedicated_server','innodb_buffer_pool_size','innodb_buffer_pool_instances');
-
+------------------------------+----------------+
-
| VARIABLE_NAME | VARIABLE_VALUE |
-
+------------------------------+----------------+
-
| innodb_buffer_pool_instances | 1 |
-
| innodb_buffer_pool_size | 134450944 |
-
| innodb_dedicated_server | OFF |
-
+------------------------------+----------------+
-
3 rows in set (0.00 sec)
-
-
-
後來是
-
mysql> select * from `performance_schema`.global_variables where VARIABLE_NAME in ('innodb_dedicated_server','innodb_buffer_pool_size','innodb_buffer_pool_instances');
-
+------------------------------+----------------+
-
| VARIABLE_NAME | VARIABLE_VALUE |
-
+------------------------------+----------------+
-
| innodb_buffer_pool_instances | 8 |
-
| innodb_buffer_pool_size | 6442450944 |
-
| innodb_dedicated_server | ON |
-
+------------------------------+----------------+
- 3 rows in set (0.00 sec)
-
mysql> set persist autocommit=1;
-
Query OK, 0 rows affected (0.00 sec)
-
- mysql>
八、對於開發人員來說,增加了視窗函式,with 語法,對於編寫複雜的sql語句提供了強有力的支撐
九、InnoDB效能提升
廢除buffer pool mutex,將原來一個mutex拆分成多個,提高併發
MySQL 8.0 版本開始支援期待已久直方圖。優化器會利用column_statistics的資料,判斷欄位的值的分佈,得到更準確的執行計劃。這些有很多的關於效能提升的資料,最後,我將用壓力測試工具來實際壓測一下,看看oracle公司有沒有撒謊。
下面這些可能會比較長,慢慢壓測:
(1)安裝sysbench 1.0.9 ,自己百度,不是本章重點
(2)壓測怎麼少得了監控呢,按照PMM ,自己百度怎麼安裝。
(3)先做準備工作,看下機器環境:
普通的DELL 伺服器R730 SAS 10K 。上面安裝的vmware ,分配的一臺普通的虛擬機器。作業系統: redhat7,4核8G記憶體,是不是很普通的一臺機器呢?相當普通的一臺機器
- [root@yw-gz-hd-test-211 mysql]# uname -a
- Linux yw-gz-hd-test-211 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
- [root@yw-gz-hd-test-211 mysql]# free -m
- total used free shared buff/cache available
- Mem: 7680 4107 131 8 3441 3242
- Swap: 0 0 0
-
- processor : 3
- vendor_id : GenuineIntel
- cpu family : 6
- model : 79
- model name : Intel(R) Xeon(R) CPU E5-2640 v4 @ 2.40GHz
- stepping : 1
- microcode : 0xb000021
- cpu MHz : 2399.318
- cache size : 25600 KB
- physical id : 6
- siblings : 1
- core id : 0
- cpu cores : 1
- apicid : 6
- initial apicid : 6
- fpu : yes
- fpu_exception : yes
- cpuid level : 13
- wp : yes
- flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 invpcid rtm rdseed adx smap xsaveopt arat
- bogomips : 4799.99
- clflush size : 64
- cache_alignment : 64
- address sizes : 43 bits physical, 48 bits virtual
- power management:
(4)來看下我們壓測的mysql
- [root@yw-gz-hd-test-211 ~]# mysql -uroot -p123456
- mysql: [Warning] Using a password on the command line interface can be insecure.
- Welcome to the MySQL monitor. Commands end with ; or \g.
- Your MySQL connection id is 218
- Server version: 8.0.11 Source distribution
-
- Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
-
- Oracle is a registered trademark of Oracle Corporation and/or its
- affiliates. Other names may be trademarks of their respective
- owners.
-
- Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
-
- mysql> select version();
- +-----------+
- | version() |
- +-----------+
- | 8.0.11 |
- +-----------+
- 1 row in set (0.00 sec)
(5)進行資料準備。我們使用預設安裝的預設引數。這次壓測的資料量是這樣的:10個表,每個表500萬資料,每個表有1.2G大小。這樣的資料量,針對一箇中等規模的應用,很典型了。然後,壓測有增刪改查,比例是這樣的:
- [root@yw-gz-hd-test-211 ~]# sysbench /usr/share/sysbench/oltp_read_write.lua --db-driver=mysql --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-db=sbtest --mysql-user=root --mysql-password=123456 --table_size=5000000 --tables=10 --threads=30 --time=60 --report-interval=30 prepare
- sysbench 1.0.9 (using system LuaJIT 2.0.4)
-
- Initializing worker threads...
-
- Creating table 'sbtest3'...
- Creating table 'sbtest8'...
- Creating table 'sbtest2'...
- Creating table 'sbtest6'...
- Creating table 'sbtest7'...
- Creating table 'sbtest1'...
- Creating table 'sbtest4'...
- Creating table 'sbtest10'...
- Creating table 'sbtest9'...
- Creating table 'sbtest5'...
- Inserting 5000000 records into 'sbtest9'
- Inserting 5000000 records into 'sbtest2'
- Inserting 5000000 records into 'sbtest6'
- Inserting 5000000 records into 'sbtest10'
- Inserting 5000000 records into 'sbtest8'
- Inserting 5000000 records into 'sbtest3'
- Inserting 5000000 records into 'sbtest1'
- Inserting 5000000 records into 'sbtest7'
- Inserting 5000000 records into 'sbtest4'
- Inserting 5000000 records into 'sbtest5'
- Creating a secondary index on 'sbtest7'...
- Creating a secondary index on 'sbtest2'...
- Creating a secondary index on 'sbtest1'...
- Creating a secondary index on 'sbtest9'...
- Creating a secondary index on 'sbtest6'...
- Creating a secondary index on 'sbtest4'...
- Creating a secondary index on 'sbtest8'...
- Creating a secondary index on 'sbtest3'...
- Creating a secondary index on 'sbtest5'...
- Creating a secondary index on 'sbtest10'...
- [root@yw-gz-hd-test-211 mysql]# ls
- auto.cnf business ibtmp1 server-cert.pem yw-gz-hd-test-211-bin.000006
- binlog.000001 ca-key.pem mysql server-key.pem yw-gz-hd-test-211-bin.000007
- binlog.000002 ca.pem mysqld-auto.cnf sys yw-gz-hd-test-211-bin.000008
- binlog.000003 client-cert.pem mysql.ibd undo_001 yw-gz-hd-test-211-bin.000009
- binlog.000004 client-key.pem off.000001 undo_002 yw-gz-hd-test-211-bin.index
- binlog.000005 error.log off.index yw-gz-hd-test-211-bin.000001 yw-gz-hd-test-211.err
- binlog.000006 ib_buffer_pool performance_schema yw-gz-hd-test-211-bin.000002 yw-gz-hd-test-211.log
- binlog.000007 ibdata1 private_key.pem yw-gz-hd-test-211-bin.000003 yw-gz-hd-test-211.pid
- binlog.000008 ib_logfile0 public_key.pem yw-gz-hd-test-211-bin.000004 yw-gz-hd-test-211-slow.log
- binlog.index ib_logfile1 sbtest yw-gz-hd-test-211-bin.000005
- [root@yw-gz-hd-test-211 mysql]# ls sbtest/ -lh
- total 12G
- -rw-r----- 1 mysql mysql 1.2G Jul 4 17:53 sbtest10.ibd
- -rw-r----- 1 mysql mysql 1.2G Jul 4 17:53 sbtest1.ibd
- -rw-r----- 1 mysql mysql 1.2G Jul 4 17:53 sbtest2.ibd
- -rw-r----- 1 mysql mysql 1.2G Jul 4 17:53 sbtest3.ibd
- -rw-r----- 1 mysql mysql 1.2G Jul 4 17:53 sbtest4.ibd
- -rw-r----- 1 mysql mysql 1.2G Jul 4 17:53 sbtest5.ibd
- -rw-r----- 1 mysql mysql 1.2G Jul 4 17:53 sbtest6.ibd
- -rw-r----- 1 mysql mysql 1.2G Jul 4 17:53 sbtest7.ibd
- -rw-r----- 1 mysql mysql 1.2G Jul 4 17:53 sbtest8.ibd
- -rw-r----- 1 mysql mysql 1.2G Jul 4 17:53 sbtest9.ibd
- [root@yw-gz-hd-test-211 mysql]#
(6)
(7)
(8)
(9)
(10)
(11)
(12)
(13)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30393770/viewspace-2157226/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 軟體測試-各個特性常用特性
- mysql 8.0.17 分割槽特性測試MySql
- 英國央行測試用於新支付系統的區塊鏈特性區塊鏈
- 新特性
- MySQL8.0.11 組複製配置MySql
- 軟體測試質量的六大特性和27個子特性
- React 新特性React
- 新特性介面
- Hadoop新特性Hadoop
- 一種新的UI測試方法:視覺感知測試UI視覺
- CANape 22.0驚豔亮相!全面升級的新特性引領汽車測試技術飛躍!
- 功能測試之存量資料新與增資料測試
- Java 11新特性Java
- Java 8 新特性Java
- Android 9.0新特性Android
- ES 2024 新特性
- Go 1.13 新特性Go
- Servlet 3.0 新特性Servlet
- MySQL 8.0 新特性MySql
- PHP 7.4 新特性PHP
- IDL 9.1新特性
- Java 8 新特性Java
- .NET 7新特性
- Prometheus 2.21.0 新特性Prometheus
- Java 17新特性Java
- PostgreSQL 13–新特性SQL
- C++新特性C++
- 常見面試題:java8有什麼新特性?面試題Java
- 玩轉iOS開發:iOS 11 新特性《Layout的新特性》iOS
- 測試測試測試測試測試測試
- 【譯】ES2018 新特性:Rest/Spread 特性REST
- C++11新特性(一):語言特性C++
- C++11新特性(三):語言特性C++
- C++11新特性(二):語言特性C++
- HTML5新特性HTML
- Swift 4.1 的新特性Swift
- React16 新特性React
- [譯] Swift 5.0 新特性Swift