mysql8.0.11新特性測試

e71hao發表於2018-07-02

一、 資料字典與原子DDL
    mysql的所有表結構定義的後設資料存放在mysql.idb中。整合了儲存有關資料庫物件資訊的事務資料字典,所有的後設資料都用InnoDB引擎進行儲存.看下圖,我建立了一個 database  business,你會發現表的定義檔案*.frm沒有了。

  1. [root@yw-gz-hd-test-211 mysql]# ls
  2. auto.cnf binlog.index client-cert.pem ibdata1 mysql public_key.pem undo_001
  3. binlog.000001 business client-key.pem ib_logfile0 mysql.ibd server-cert.pem undo_002
  4. binlog.000002 ca-key.pem error.log ib_logfile1 performance_schema server-key.pem yw-gz-hd-test-211.pid
  5. binlog.000003 ca.pem ib_buffer_pool ibtmp1 private_key.pem sys
  6. [root@yw-gz-hd-test-211 mysql]# ls business/
  7. job_execution_log.ibd t_gw_remit_query.ibd t_mer_transfer.ibd
  8. job_status_trace_log.ibd t_gw_remit_serial.ibd t_sms_gateway.ibd
  9. t_bal_sett_report.ibd t_gw_serial.ibd t_sms_recode.ibd
  10. 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 。
mysql8.0.11新特性測試
三、重構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中建立
mysql8.0.11新特性測試

六、調整back_log的預設值,保持和 max_connections一致,增強突發流量帶來的連線處理容量。這告訴我們,有些引數是隨著另外一個引數動態調整的。
新增innodb_dedicated_server,讓InnoDB根據伺服器上檢測到的記憶體量自動配置innodb_buffer_pool_size,innodb_log_file_size,innodb_flush_method

  1. 原來是:來試驗一下:
  2.  mysql> select * from `performance_schema`.global_variables where VARIABLE_NAME in ('innodb_dedicated_server','innodb_buffer_pool_size','innodb_buffer_pool_instances');
  3. +------------------------------+----------------+
  4. | VARIABLE_NAME | VARIABLE_VALUE |
  5. +------------------------------+----------------+
  6. | innodb_buffer_pool_instances | 1 |
  7. | innodb_buffer_pool_size | 134450944 |
  8. | innodb_dedicated_server | OFF |
  9. +------------------------------+----------------+
  10. 3 rows in set (0.00 sec)


  11. 後來是
  12. mysql> select * from `performance_schema`.global_variables where VARIABLE_NAME in ('innodb_dedicated_server','innodb_buffer_pool_size','innodb_buffer_pool_instances');
  13. +------------------------------+----------------+
  14. | VARIABLE_NAME | VARIABLE_VALUE |
  15. +------------------------------+----------------+
  16. | innodb_buffer_pool_instances | 8 |
  17. | innodb_buffer_pool_size | 6442450944 |
  18. | innodb_dedicated_server | ON |
  19. +------------------------------+----------------+
  20. 3 rows in set (0.00 sec)
七、線上修改系統變數後,會將修改後的值持久化到磁碟。他並不是持久化到my.cnf中,而且重新生成一個新的檔案mysqld-auto.cnf,並將修改後的值儲存到該檔案中。mysqld-auto.cnf檔案中的配置相比my.cnf檔案具有高優先順序,如果相同配置出現在兩個檔案中,就以mysqld-auto.cnf檔案中的記錄為主。

  1. mysql> set persist autocommit=1;
  2. Query OK, 0 rows affected (0.00 sec)

  3. 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記憶體,是不是很普通的一臺機器呢?相當普通的一臺機器

  1. [root@yw-gz-hd-test-211 mysql]# uname -a
  2. 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
  3. [root@yw-gz-hd-test-211 mysql]# free -m
  4. total used free shared buff/cache available
  5. Mem: 7680 4107 131 8 3441 3242
  6. Swap: 0 0 0

  7. processor : 3
  8. vendor_id : GenuineIntel
  9. cpu family : 6
  10. model : 79
  11. model name : Intel(R) Xeon(R) CPU E5-2640 v4 @ 2.40GHz
  12. stepping : 1
  13. microcode : 0xb000021
  14. cpu MHz : 2399.318
  15. cache size : 25600 KB
  16. physical id : 6
  17. siblings : 1
  18. core id : 0
  19. cpu cores : 1
  20. apicid : 6
  21. initial apicid : 6
  22. fpu : yes
  23. fpu_exception : yes
  24. cpuid level : 13
  25. wp : yes
  26. 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
  27. bogomips : 4799.99
  28. clflush size : 64
  29. cache_alignment : 64
  30. address sizes : 43 bits physical, 48 bits virtual
  31. power management:

(4)來看下我們壓測的mysql

  1. [root@yw-gz-hd-test-211 ~]# mysql -uroot -p123456
  2. mysql: [Warning] Using a password on the command line interface can be insecure.
  3. Welcome to the MySQL monitor. Commands end with ; or \g.
  4. Your MySQL connection id is 218
  5. Server version: 8.0.11 Source distribution

  6. Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

  7. Oracle is a registered trademark of Oracle Corporation and/or its
  8. affiliates. Other names may be trademarks of their respective
  9. owners.

  10. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

  11. mysql> select version();
  12. +-----------+
  13. | version() |
  14. +-----------+
  15. | 8.0.11 |
  16. +-----------+
  17. 1 row in set (0.00 sec)


(5)進行資料準備。我們使用預設安裝的預設引數。這次壓測的資料量是這樣的:10個表,每個表500萬資料,每個表有1.2G大小。這樣的資料量,針對一箇中等規模的應用,很典型了。然後,壓測有增刪改查,比例是這樣的:


  1. [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
  2. sysbench 1.0.9 (using system LuaJIT 2.0.4)

  3. Initializing worker threads...

  4. Creating table 'sbtest3'...
  5. Creating table 'sbtest8'...
  6. Creating table 'sbtest2'...
  7. Creating table 'sbtest6'...
  8. Creating table 'sbtest7'...
  9. Creating table 'sbtest1'...
  10. Creating table 'sbtest4'...
  11. Creating table 'sbtest10'...
  12. Creating table 'sbtest9'...
  13. Creating table 'sbtest5'...
  14. Inserting 5000000 records into 'sbtest9'
  15. Inserting 5000000 records into 'sbtest2'
  16. Inserting 5000000 records into 'sbtest6'
  17. Inserting 5000000 records into 'sbtest10'
  18. Inserting 5000000 records into 'sbtest8'
  19. Inserting 5000000 records into 'sbtest3'
  20. Inserting 5000000 records into 'sbtest1'
  21. Inserting 5000000 records into 'sbtest7'
  22. Inserting 5000000 records into 'sbtest4'
  23. Inserting 5000000 records into 'sbtest5'
  24. Creating a secondary index on 'sbtest7'...
  25. Creating a secondary index on 'sbtest2'...
  26. Creating a secondary index on 'sbtest1'...
  27. Creating a secondary index on 'sbtest9'...
  28. Creating a secondary index on 'sbtest6'...
  29. Creating a secondary index on 'sbtest4'...
  30. Creating a secondary index on 'sbtest8'...
  31. Creating a secondary index on 'sbtest3'...
  32. Creating a secondary index on 'sbtest5'...
  33. Creating a secondary index on 'sbtest10'...
現在每個表有500萬資料,插入還挺快的,我們來看看linux的具體容量有多少?

  1. [root@yw-gz-hd-test-211 mysql]# ls
  2. auto.cnf business ibtmp1 server-cert.pem yw-gz-hd-test-211-bin.000006
  3. binlog.000001 ca-key.pem mysql server-key.pem yw-gz-hd-test-211-bin.000007
  4. binlog.000002 ca.pem mysqld-auto.cnf sys yw-gz-hd-test-211-bin.000008
  5. binlog.000003 client-cert.pem mysql.ibd undo_001 yw-gz-hd-test-211-bin.000009
  6. binlog.000004 client-key.pem off.000001 undo_002 yw-gz-hd-test-211-bin.index
  7. binlog.000005 error.log off.index yw-gz-hd-test-211-bin.000001 yw-gz-hd-test-211.err
  8. binlog.000006 ib_buffer_pool performance_schema yw-gz-hd-test-211-bin.000002 yw-gz-hd-test-211.log
  9. binlog.000007 ibdata1 private_key.pem yw-gz-hd-test-211-bin.000003 yw-gz-hd-test-211.pid
  10. binlog.000008 ib_logfile0 public_key.pem yw-gz-hd-test-211-bin.000004 yw-gz-hd-test-211-slow.log
  11. binlog.index ib_logfile1 sbtest yw-gz-hd-test-211-bin.000005
  12. [root@yw-gz-hd-test-211 mysql]# ls sbtest/ -lh
  13. total 12G
  14. -rw-r----- 1 mysql mysql 1.2G Jul 4 17:53 sbtest10.ibd
  15. -rw-r----- 1 mysql mysql 1.2G Jul 4 17:53 sbtest1.ibd
  16. -rw-r----- 1 mysql mysql 1.2G Jul 4 17:53 sbtest2.ibd
  17. -rw-r----- 1 mysql mysql 1.2G Jul 4 17:53 sbtest3.ibd
  18. -rw-r----- 1 mysql mysql 1.2G Jul 4 17:53 sbtest4.ibd
  19. -rw-r----- 1 mysql mysql 1.2G Jul 4 17:53 sbtest5.ibd
  20. -rw-r----- 1 mysql mysql 1.2G Jul 4 17:53 sbtest6.ibd
  21. -rw-r----- 1 mysql mysql 1.2G Jul 4 17:53 sbtest7.ibd
  22. -rw-r----- 1 mysql mysql 1.2G Jul 4 17:53 sbtest8.ibd
  23. -rw-r----- 1 mysql mysql 1.2G Jul 4 17:53 sbtest9.ibd
  24. [root@yw-gz-hd-test-211 mysql]#


(6)
(7)
(8)
(9)
(10)
(11)
(12)
(13)






來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30393770/viewspace-2157226/,如需轉載,請註明出處,否則將追究法律責任。

相關文章