[投稿] MySQLのベンチマーク比較:5.7 VS 8.0

MySQLのパフォーマンスのベンチマークテスト比較:5.7 VS 8.0

HTTPS:// segmentfault.com/a/1190000018419485

 

この記事は、クラウド+コミュニティによって公開されました。

著者:データベース

免責事項:テンセントクラウドデータベース製品チームがまとめたこの記事では、severalnines英語から元のページの内容は公式サイト、再現した場合、ソースを明記してください。翻訳の目的は、最新のグローバルデータベースフィールドに関する詳細な情報を提供することです、テンセントクラウドデータベース製品チームが自分の意見に同意するか、その内容の信憑性を確認することを意味するものではありません。他のメディア、ウェブサイトや法人や個人の他のフォーム場合は使用が許可されなければならないと書面での正当な著作権者による完全な法的責任を負います。テンセントクラウドデータベースチームの名前を使用することはできません、複製、またはテンセントクラウドデータベースの名前の不正流用は任意の情報を公開されました。

オリジナルリンク:HTTPS://severalnines.com/blog ...


OracleのMySQLのチームによって駆動さは、MySQL 8.0は、驚異的な変更および修正を施しました。

物理ファイルが変更されました。例えば、.FRM、  .TRG、.TRNとは  .PARもう存在します。このような共通テーブル式(共通テーブル式CTE)などの新機能の多くは、窓関数(ウィンドウ関数)、目に見えないインデックス(非表示の索引)、正規表現(正規表現)-MySQL8.0今完全にUnicodeがサポートを追加しましたどのように所有バイトのセキュリティ機能。データ・ディクショナリも変更します。これは、データベースに関する情報は、辞書に格納されたオブジェクト、今トランザクションとマージデータ辞書です。以前のバージョンでは、辞書データは、メタデータファイルと非トランザクションテーブルに保存されています。

セキュリティはcaching_sha2_password認証は、以前mysql_native_password認証、デフォルトの認証方法を交換し、改善されました。これは、より大きな柔軟性を提供するだけでなく、暗号化されていない接続またはRSA鍵によって実現パスワードの安全なリンク交換のサポートを使用するために必要であることを、セキュリティを強化しました。

すべてのこれらの機能は非常に良いのMySQL 8.0のオファーを持っているだけでなく、機能強化と改善点は、MySQL 8.0のパフォーマンス状況の現在のバージョンの下で学ぶことは、私たちのチームは非常に興味を持って、行いました。特に我々は、MySQL 8.0.xの設計(滞在チューニング)のために進行中ClusterControl考えます。このブログは特性MySQL8.0を議論するが、MySQL 5.7の性能を比較するつもり、それは改善どのように表示されません。

サーバーのセットアップと環境のサーバーの設定や環境

このベンチマークのために、私は、AWS EC2の最小構成に基づいてシステム環境を使用します:

•例のタイプ:t2.xlarge例

•ストレージ:GP2(SSDストレージ、最小100のIOPS、最大16000のIOPS)

・仮想CPU:4

•メモリ:16GiB

・MySQL5.7バージョン:MySQLCommunityサーバー(GPL)5.7.24

・MySQL8.0バージョン:MySQLCommunityサーバ - GPL 8.0.14

このベンチマークでは、私はまた、ある項目のいくつかのパラメータの値、のために構成します:

・Innodb_max_dirty_pages_pct = 90 ##のデフォルトのMySQL 8.0です。

でデフォルトのMySQL 8.0である・Innodb_max_dirty_pages_pct_lwm = 10 ##

・innodb_flush_neighbors = 0

・innodb_buffer_pool_instances = 8

・innodb_buffer_pool_size = 8GiB

ここでは、2つのバージョン(MySQLの5.7とMySQL 8.0)はパラメータのmy.cnf基準テンプレートClusterControl曲を置くように配置されています。

さらに、私はここでそのcaching_sha2_password認証をMySQL8.0の新しい認証方法を使用しないでください。代替的には、新機能innodb_dedicated_serveのMySQL 8.0としてバージョンmysql_native_password、プラス配置innodb_dedicated_serve = OFF(デフォルト値)の両方を使用することです。

作業を簡素化するために、私は、MySQL 5.7コミュニティ版ClusterControlの構成ノードを使用して、ノードは、(トラフィックを監視しない)ノードが休止状態にあるのMySQL 5.7ので、その単一のホスト作り、クラスタから削除、およびクラスタコントロールパネルをシャットダウンしています。技術的には、MySQL 5.7とMySQL8.0ノードは、それが本質的に純粋なベンチマークであるので、ノードを介してアクティブな接続が存在しない、休眠しています。

「テンセントクラウドデータベース、」公式マイクロ手紙を懸念し、スタンド10元テンセントクラウドフリーしきい値券、モバイル体験の終了キー管理データベースは、データベースより基本から上位へ約戦闘チュートリアルにあなたを待って!

使用のために使用するコマンドやスクリプトコマンドおよびスクリプト

この作業のために、それは、テストに使用し、これら2つの環境の負荷をシミュレートしsysbench。スクリプトで使用される次のテストとコマンド:

sb-prepare.sh #!/bin/bash host=$1#host192.168.10.110port=3306user='sysbench'password='MysqP@55w0rd'table_size=500000rate=20ps_mode='disable'sysbench/usr/share/sysbench/oltp_read_write.lua --db-driver=mysql --threads=1--max-requests=0 --time=3600 --mysql-host=$host --mysql-user=$user--mysql-password=$password --mysql-port=$port --tables=10 --report-interval=1--skip-trx=on --table-size=$table_size --rate=$rate --db-ps-mode=$ps_modeprepare

sb-run.sh

#!/usr/bin/envbash2 host=$1port=3306user="sysbench"password="MysqP@55w0rd"table_size=100000tables=10rate=20ps_mode='disable'threads=1events=0time=5trx=100path=$PWD counter=1 echo "thread,cpu" >${host}-cpu.csv for i in 16 32 64 128 256 512 1024 2048; do threads=$i mysql -h $host -e"SHOW GLOBAL STATUS" >> $host-global-status.logtmpfile=$path/${host}-tmp${threads}touch $tmpfile/bin/bashcpu-checker.sh $tmpfile $host $threads & /usr/share/sysbench/oltp_read_write.lua--db-driver=mysql --events=$events --threads=$threads --time=$time--mysql-host=$host --mysql-user=$user --mysql-password=$password--mysql-port=$port --report-interval=1 --skip-trx=on --tables=$tables--table-size=$table_size --rate=$rate --delete_inserts=$trx --order_ranges=$trx--range_selects=on --range-size=$trx --simple_ranges=$trx --db-ps-mode=$ps_mode--mysql-ignore-errors=all run | tee -a $host-sysbench.log echo"${i},"`cat ${tmpfile} | sort -nr | head -1` >> ${host}-cpu.csvunlink ${tmpfile} mysql -h $host -e"SHOW GLOBAL STATUS" >> $host-global-status.logdone python $path/innodb-ops-parser.py $host mysql -h $host -e "SHOW GLOBALVARIABLES" >> $host-global-vars.log

そのため、スクリプトだけで準備ができsbtestschemaとテーブルやレコードを取り込みます。その後、使用しています

/usr/share/sysbench/oltp_read_write.luaスクリプトは、読み取り/書き込み負荷テストを。ダンプスクリプトグローバル状態変数とMySQL、CPU使用率を収集し、InnoDBの手術治療innodb-ops-parser.pyスクリプトを解析します。スクリプトによると、ベンチマーク中に収集されたログ・ダンプを生成 .CSVファイルを、私はここからExcelのスプレッドシートを使用して  チャートの.csvファイルを生成します。提出githubの上でコードを確認してください。

今、私たちはチャートの結果に対処していきましょう!

InnoDBのライン操作

IMG

IMG

IMG

IMG

基本上在这里,我只提取了InnoDB行操作,它执行查找(读取),删除,插入和更新。当线程数量增加时,MySQL 8.0明显优于MySQL 5.7!在这两个版本中都没有针对配置项进行任何个性化变更,只有我统一配置的参数项。所以这两个版本中的配置几乎都使用默认值。

有趣的是,MySQL团队关于新版本中读写性能的声明,这些图表指出了性能的显著提高,特别是在高负载服务器上。想一下MySQL 5.7和MySQL 8.0在InnoDB行操作上的区别,确实存在有很大的不同,特别是当线程数增加的时候。MySQL 8.0表明,无论工作负载如何,它都能高效地运行。

事务处理

IMG

IMG

如上图所示,MySQL 8.0的结果趋势显示出其处理事务所需的时间的巨大变化。纵轴数值越低,代表性能越好,意味着处理事务的速度更快。处理的事务统计表(第二张表)还显示出这两个版本处理事务的数量没有差异。这意味着,两个版本处理的事务数量几乎相同,但它们的完成速度不同。虽然MySQL 5.7在较低的负载下可以大量事务,但是实际的负载,特别是在生产中,可能会更高——尤其是在最繁忙的时期。

IMG

上面的图仍然显示的是两个版本能够处理的事务数量,只是将读和写分离开来。然而,图中实际上是存在异常值,而我没有将这些值包括在内,因为它们是这一小部分异常结果会扭曲图形。

MySQL 8.0体现出一个很大的改进,特别是对于读取。表现在写操作的效率上,特别是对于高工作负载的服务器。在8.0版本中,影响MySQL读取性能的重要新增支持是:可以按降序(或正向索引扫描)创建索引的能力。以前的版本只有升序或反向索引扫描,如果需要降序,MySQL必须执行filesort(如果需要filesort,需要检查max_length_for_sort_data的值)。当最有效的扫描顺序混合某些列的升序和其他列的降序时,降序索引还使优化器可以使用多列索引。有关详细信息,请参见此处。

CPU资源

IMG

在此基准测试中,我决定测试一些硬件资源,尤其是CPU利用率。

让我先解释一下如何在基准测试中获取CPU使用率。在对数据库进行基准测试时,sysbench测试结果中不包括在此过程中使用的硬件资源的统计信息。因此,我所做的是通过创建文件的方式来创建标识,通过SSH连接到目标主机,然后用Linux命令“top”收集数据并在测试结束前进行解析,然后再次收集。然后分析出mysqld进程占用最大的CPU使用量,最后删除该标识文件。你可以查看我在github上的代码。

让我们再次讨论图表结果,似乎表明MySQL 8.0消耗了大量的CPU,超过MySQL 5.7。然而,MySQL 8.0可能必须消耗额外的CPU在新的变量配置上。例如,这些变量可能会影响您的MySQL 8.0:

· innodb_log_spin_cpu_abs_lwm = 80

· innodb_log_spin_cpu_pct_hwm = 50

· innodb_log_wait_for_flush_spin_hwm = 400

· innodb_parallel_read_threads = 4

在此基准测试中,具有默认值的变量将保留其默认值。由于MySQL 8.0重新设计了InnoDB写入REDO日志的方式(这是一个改进),前三个变量可配置处理重做日志的使用的CPU资源。例如,变量innodb_log_spin_cpu_pct_hwm具有CPU亲和性,这意味着如果mysqld仅绑定到4个内核,它将忽略其他CPU内核。对于并行读取线程,在MySQL 8.0中添加了一个新变量,您可以调整要使用的线程数。

然而,我没有深入研究这个问题。可以通过利用MySQL8.0提供的特性来提高性能。

结论

MySQL 8.0中有许多改进。基准测试结果显示,与MySQL 5.7相比,MySQL 8.0不仅在处理读负载时,而且在读写混合的高负载下的性能都取得了令人瞩目的进步。搜索关注“腾讯云数据库”官方微信,立得10元腾讯云无门槛代金券,体验移动端一键管理数据库,更有从初阶到高阶数据库实战教程等你来约!

MySQLの8.0の新機能で見てみましょうが、それだけで、最新のソフトウェア技術を活用していないように見えるだけでなく、ハードウェア(例えばMemcachedの改善、より良いDevOpsチームワークのパフォーマンスのためのリモート管理など)。たとえば、デフォルトの文字エンコーディングとしてUTF8MB4のlatin1のと交換。UTF8が非US-ASCII文字に2つのバイトを必要とするため、この手段では、より多くのディスクスペースを必要とします。このベンチマークは、使用caching_sha2_password新しい認証方法を利用しないが、それは使用暗号化するかどうかのパフォーマンスには影響しませんが。認証されると、その認証は一度だけ実行されることを意味し、キャッシュに保存されます。だから、あなたはクライアントに1人のだけのユーザー、そして問題はない、と以前のバージョンよりも安全を使用している場合。

最新のハードウェアおよびソフトウェアのMySQLの利点ので、それはデフォルトの変数を変更します。あなたはより多くの詳細を読むことができます。

全体的には、MySQL 8.0のパフォーマンスがはるかにMySQLの5.7を超えています。

+テンセントクラウド記事は、さまざまなコミュニティチャンネルで公開されています

より多くの新鮮な乾燥技術のために、我々は、に焦点を当てることができテンセントコミュニティクラウド-クラウドプラスコミュニティが知っているほとんどの機関の公式番号と番号を

おすすめ

転載: www.cnblogs.com/jinanxiaolaohu/p/12213684.html