萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> 數據庫綜合 >> MySQL5.6 性能測試比較

MySQL5.6 性能測試比較

MySQL 5.6 GA 發布了,毫無疑問,這是 MySQL 最棒的一個版本。如果你還不清楚 MySQL 5.6 版本一長串的新特性和改進內容,可以從這裡獲得了解。

而我這篇文章的主要目的則是性能的測試。

我使用 Sysbench workloads (Read-Only/Read-Write) 來測試。下面是我的測試環境:

硬件配置:

服務器 : 32核 bi-thread (HT) Intel 2300Mhz, 128GB RAM

操作系統 : Oracle Linux 6.2

文件系統 : XFS mounted with "noatime,nodiratime,nobarrier,logbufs=8"

MySQL : 5.6-GA, latest 5.5

MySQL 配置:

max_connections = 4000

key_buffer_size = 200M

low_priority_updates = 1

sort_buffer_size = 2097152

back_log = 1500

query_cache_type = 0

# files

innodb_file_per_table

innodb_log_file_size = 1024M

innodb_log_files_in_group = 3

innodb_open_files = 4000

table_open_cache = 8000

table_open_cache_instances = 16

# buffers

innodb_buffer_pool_size = 32000M

innodb_buffer_pool_instances = 32

innodb_log_buffer_size = 64M

join_buffer_size = 32K

sort_buffer_size = 32K

# tune

innodb_checksums = 0

innodb_doublewrite = 0

innodb_support_xa = 0

innodb_thread_concurrency = 0

innodb_flush_log_at_trx_commit = 2

innodb_flush_method = O_DIRECT

innodb_max_dirty_pages_pct = 50

innodb_use_native_aio =1

innodb_stats_persistent = 1

innodb_spin_wait_delay = 6 / 96

# perf special

innodb_adaptive_flushing = 1

innodb_flush_neighbors = 0

innodb_read_io_threads = 16

innodb_write_io_threads = 4

innodb_io_capacity = 2000

innodb_purge_threads =1

innodb_adaptive_hash_index =  1 / 0

# Monitoring

innodb_monitor_enable = '%'

performance_schema = ON

performance_schema_instrument = '%=on'

MySQL 調整:

配置最主要的不同是 AHI (innodb_adaptive_hash_index) 和 Spin Delay (innodb_spin_wait_delay) -- 而其他的部分在這個測試過程中基本上已經足夠好了。

關於 AHI 的影響我之前已經寫了很多文章。AHI 主要的困境在於“用還是不用”,在很多情況下它可以幫助因為鎖導致的堵塞並加快索引的訪問,但在高並發的情況下可能會因為其 btr_search_latch 導致 rw鎖爭用導致的瓶頸

在 MySQL 5.6 中的 Spin Delay 設置需要特別的注意,因為它在管理內部互斥量和 rw 鎖爭用時扮演非常重要的角色,利用它可能會讓你輕松的將性能提升一倍。(你可以通過這裡來了解詳情,但你應該知道,沒有銀彈,也沒有什麼固定的最優值是適合各種不同的環境,這個完全依賴於你的系統負載。因此其默認值跟 MySQL 5.5 一樣都是 6)。

因此,在我的測試中,我非常好奇想了解在不同的負載情況下最佳的 AHI 和 Spin Delay 設置的配置對。

接下來要記住 MySQL 5.5 和 5.6 在可伸縮性方面的限制。我在 8、16、32 和 64 核的情況下重新進行測試(64核相當於開啟和超線程的32核機器,其他的都沒有開啟超線程)

首先向你展示第一個有趣的比較,為了跟我以前的測試保持“兼容性”,我首先測試了 TPS (事務/秒),然後再是 QPS (查詢/秒) ,我更喜歡這種方式。

首個測試是經典的 Sysbench OLTP_RO (只讀):

Sysbench OLTP_RO:

MySQL5.6

接下來是同一個 OLTP_RO 測試,但在事務中不進行表的打開和關閉操作 (完整的解釋請看 這裡 )

Sysbench OLTP_RO-trx :

MySQL5.6

接下來是 "point-selects" ,這是一種讀數據的方式,在以前的 MySQL 5.5 版本表現良好,但在 5.6 仍有一些不同。

Sysbench OLTP_RO Point-Selects :

MySQL5.6

這是最痛苦的測試,Simple-Ranges (你可以閱讀 此文 了解為什麼痛苦和令人沮喪)

Sysbench OLTP_RO Simple-Ranges :

MySQL5.6

下面是讀寫測試,這還不是負載最重的讀寫,但仍可說明問題:

Sysbench OLTP_RW :

MySQL5.6

TPS 從 256 個並發用戶時就開始下降,期待這個有更高的水平。但仍然比 5.5 版本要高出 2 倍,相信我,下一個版本的 MySQL 表現會更好。這個階段可通過調整 innodb 線程並發設置來得到更穩定和更高性能。

以上就是精品為大家整理的MySQL5.6 性能測試比較,希望對大家有所幫助。

copyright © 萬盛學電腦網 all rights reserved