mysql sysbench_MySQL sysbench基准测试
一、基準(zhǔn)測試
參考《高性能 MySQL》第二章。
二、Sysbench
sysbench 是開源的跨平臺多線程基準(zhǔn)測試工具,主要用于測試各種不同系統(tǒng)參數(shù)下的 CPU/內(nèi)存/線程/IO/數(shù)據(jù)庫等方面的性能,數(shù)據(jù)庫目前支持 MySQL/Oracle/PostgreSQL。具體的參數(shù)設(shè)置,應(yīng)根據(jù)實際環(huán)境來進行必要調(diào)整。
與之前版本相比,sysbench 最新的 0.5 版本,可以使用腳本來決定測試語句,比之前在代碼里寫死測試更加方便用戶修改和使用,不需要去修改源程序,只需要修改相應(yīng)的 lua 腳本,即可定制不同的測試用例,在數(shù)據(jù)庫負載測試中,這樣可以對 SQL 語句進行更有針對性的測試。
1、下載安裝
Linu 自帶版本大多為 0.4.12,最新版本可以從 Launchpad 下載安裝步驟如下:
./autogen.sh
./configure
make && sudo make install
sysbench 依賴 mysql-dev 包的支持,如果 mysql 沒有安裝在默認(rèn)位置,執(zhí)行./configure 時需要配置–with-mysql-includes 和 –with-mysql-lib。具體參看源碼包中 README 文檔。
安裝完成后可以查看版本信息。
sysbench --version
2、使用說明
簡要說明 sysbench 的使用方法,側(cè)重對數(shù)據(jù)庫的測試。具體用法參考 sysbench –help。
2.1 命令格式:
Sysbench [general-options]… –test= [test-options]… command
通用選項(general-options):
–num-threads=N 指定要使用的線程
–report-interval=N 每隔 N 秒打印統(tǒng)計信息
–rand-XXX 隨機分布相關(guān)配置
內(nèi)建測試項目(test-option):
fileio – File I/O test
cpu – CPU performance test
memory – Memory functions speed test
threads – Threads subsystem performance test
mutex – Mutex performance test
oltp,從 0.5 開始不再設(shè)置單獨的選項,可以直接通過 Lua 腳本文件進行測試,兼容之前 oltp 的所有選項。
以上所有的項目都可以通過 sysbench-0.5\sysbench\tests\ 下的測試腳本進行測試。
2.2 測試項目選項(test-option)
各種內(nèi)建測試項目的選項可以通過命令 sysbench –test=help 查看。
2.3 命令(command):
sysbench 做壓力測試的時候分 3 個階段:prepare(準(zhǔn)備測試數(shù)據(jù)); run(運行壓力測試); cleanup(清理測試數(shù)據(jù))。
3、內(nèi)建測試說明
3.1 CPU
sysbench 采用尋找最大素數(shù)的方式來測試 CPU 的性能。
sysbench --test=cpu --cpu-max-prime=1000 run
3.2 Fileio
Sysbench 的 I/O 測試和 InnoDB 的 I/O 模式非常類似。
sysbench --test=fileio –file_num=40 –-file-total-size=80G --file-test-mode=rndrw prepare
sysbench --test=fileio –file_num=40 –-file-total-size=80G --file-test-mode=rndrw run
sysbench --test=fileio –file_num=40 –-file-total-size=80G --file-test-mode=rndrw cleanup
3.3 Memory
待完善
3.4 Threads
待完善
3.5 Mutex
待完善
3.6 OLTP
Sysbench 0.5 中的 oltp.lua 提供了一個比之前版本中的 oltp 模式更為真實的場景來進行數(shù)據(jù)庫的基準(zhǔn)測試。和之前 oltp 模式中的單個表場景相比,0.5 通過 Lua 腳本可以對多個表進行工作測試。oltp.lua 可以理解原先 oltp 模式中的大多數(shù)選項。
所有的測試腳本位于/sysbench-0.5/sysbench/test/下,db 目錄下是數(shù)據(jù)庫測試項目,其中 common.lua 并非測試文件,是用于 prepare 和 cleanup。 oltp.lua 文件用于測試事務(wù)性能,其中 thread_init 函數(shù)來初始化每個線程的參數(shù),初始化工作調(diào)用了 common.lua 中的 set_vars()函數(shù),來初始化 oltp 的相關(guān)參數(shù)。
階段 1: 連接數(shù)據(jù)庫服務(wù)器
每次執(zhí)行基準(zhǔn)測試,不管是 prepare 還是 run,如果不是使用默認(rèn)值的話,都應(yīng)該指定如何連接數(shù)據(jù)庫。默認(rèn)值如下:
默認(rèn)的數(shù)據(jù)庫 sbtest,sysbench 不會自動創(chuàng)建該數(shù)據(jù)庫。所以如果你要用過的話要首先。
階段 2:Prepare
如果使用默認(rèn)值,首先要創(chuàng)建測試所用的表。創(chuàng)建方式有兩種: oltp.lua (串行) 和 parallel_prepare.lua (并行)。
針對 database driver 還需要指明以下參數(shù):
創(chuàng)建表:
oltp.lua 中提供的 –oltp-tables-count 指明了表的數(shù)量。默認(rèn)的表名是 sbtest。如果制定了 oltp-tables-count,則在表名后加數(shù)字,例如 sbtest1, sbtest2, .. sbtest[oltp-tables-count],注意,此種情況下不會創(chuàng)建 sbtest 表。
通過選項 –oltp-secondary 可以在每個表上使用第二索引來替代主鍵。也就是說通過 KEY xid (ID) 而不是 PRIMARY KEY (ID) 來創(chuàng)建表。這個選項將會使 InnoDB 為每個表創(chuàng)建內(nèi)部 6-byte 的索引。同樣可以使用選項 –oltp-auto-in 將 id 字段設(shè)為遞增。
創(chuàng)建表 SQL 語句示例如下:
CREATE TABLE `sbtest101` (
`id` int(10) unsigned NOT NULL auto_increment,
`k` int(10) unsigned NOT NULL default '0',
`c` char(120) NOT NULL default '',
`pad` char(60) NOT NULL default '',
PRIMARY KEY (`id`),
KEY `k` (`k`));
Parallel.lua(并行) 創(chuàng)建:
./sysbench --test=tests/db/parallel_prepare.lua --mysql-user=USER --mysql-password=SECRET --oltp-tables-count=64 --num-threads=8 run
注意:oltp-tables-count 應(yīng)該是 num-threads 的整數(shù)倍。
oltp.lua(串行)創(chuàng)建:
./sysbench --test=tests/db/oltp.lua --mysql-user=USER --mysql-password=SECRET --mysql-table-engine=myisam --oltp-table-size=1000000 --oltp-tables-count=64 --mysql-socket=/tmp/mysql.sock prepare
階段 3:Run
準(zhǔn)備好測試環(huán)境之后就可以使用 oltp.lua 執(zhí)行一系列的測試了,測試使用的線程數(shù)量通過選項 –num-threads 來指定。每個線程通過隨機產(chǎn)生小于或者等于 oltp-tables-count 的數(shù)字來選擇一個表。
隨機取樣分布通過選項 –oltp-dist-type 來進行設(shè)置,該選項默認(rèn)值是 special。Special 分布還和另外兩個參數(shù)有關(guān):–oltp-dist-pct,用來指定要特殊對待的記錄的百分比,–oltp-dist-res 指定這些記錄的概率。例如,對 1000 行記錄進行 1000 次查詢,–oltp-dist-pct=1 and –oltp-dist-res=50 結(jié)果,開始 10 條記錄(1% of 1000),每條記錄選中五十次,總共 500 次,剩余的查詢將會從 990 條記錄中均勻采樣。
選中表之后,就會執(zhí)行相應(yīng)的測試。他們將會打包為一個事務(wù)(transaction)傳遞給數(shù)據(jù)庫服務(wù)器(除非使用 myisam 引擎,這樣先會鎖住表)。也可以單線程運行 oltp 的子集,例如 oltp_simple.lua, select.lua, insert.lua, delete.lua, update_index.lua, update_non_index.lua
SELECT tests
Select 還可以分為點選擇測試(Point Select tests)和范圍測試(Ranges tests)。
點測試
選項 oltp-point-selects 單次事務(wù)中點選擇測試的查詢次數(shù)。 每次測試,通過制定的分布來隨機產(chǎn)生一個小于或者等于表大小(oltp-table-size)的數(shù)字,然后執(zhí)行下面的查詢語句。 SELECT c FROM sbtestXXX WHERE id=N
范圍測試
通過變量 oltp-range-size 可以制定要查詢的范圍(不大于表大小)
簡單范圍測試
選項 oltp-simple-ranges 單次事務(wù)中范圍選擇測試的查詢次數(shù)。 每次通過指定的分布來產(chǎn)生一個不大于 oltp-talbe-size 的整數(shù) N,然后通過選項設(shè)置 oltp-range-size 設(shè)置整數(shù) M,然后執(zhí)行如下查詢: SELECT c FROM sbtest WHERE id BETWEEN N AND M
范圍求和(Sum in ranges)
選項 oltp_sum_ranges 單次事務(wù)中范圍選擇測試的查詢次數(shù)。查詢語句: SELECT SUM(K) FROM sbtest WHERE id BETWEEN N and M
范圍排序(Order in ranges)
選項 oltp_order_ranges 單次事務(wù)中范圍選擇測試的查詢次數(shù)。查詢語句: SELECT c FROM sbtest WHERE id between N and M ORDER BY c
范圍去重(Distincts in ranges)
選項 oltp-distinct-ranges 單次事務(wù)中范圍選擇測試的查詢次數(shù)。查詢語句:
SELECT DISTINCT c FROM sbtest WHERE id BETWEEN N and M ORDER BY c
UPDATE tests
只要沒有指定 oltp-read-only=on 就能進行更新測試。
1、index_update.lua
選項 oltp_index_updates 單次事務(wù)中范圍選擇測試的查詢次數(shù)。查詢語句:
UPDATE sbtest SET k=k+1 WHERE id=N
2、non_index_update.lua
選項 oltp-non-index-updates 單次事務(wù)中范圍選擇測試的查詢次數(shù)。C 為隨機產(chǎn)生的字符串,查詢語句:
UPDATE sbtest SET c=C WHERE id=N
DELETE test
只要沒有指定 oltp-read-only=on 就能進行更新測試。通過執(zhí)行分布產(chǎn)生一個不大于 oltp-table-siez 的數(shù)字 N,執(zhí)行語句:
DELETE FROM sbtest WHERE id=N
INSERT test
只要沒有指定 oltp-read-only=on 就能進行更新測試。通過執(zhí)行分布產(chǎn)生一個不大于 oltp-table-siez 的數(shù)字 N,執(zhí)行語句:
INSERT INTO sbtest (id, k, c, pad) VALUES N, K, C, PAD
使用舉例:
使用 5 個線程在 25 個 table 上進行默認(rèn)測試:
./sysbench --mysql-user=USER --mysql-password=SECRET --test=tests/db/oltp.lua --oltp-tables-count=25 --num-threads=5 run
使用 10 個線程在 100 個 table 上進行 select 測試,10 個點測試和值為 1000 的范圍測試:
./sysbench --mysql-user=USER --mysql-password=SECRET --test=tests/db/select.lua --oltp-tables-count=100 --num-threads=10
--oltp-point-selects=100 --oltp-range-size=1000 run
階段 4:清理(cleanup)
可以通過清理操作來返回到準(zhǔn)備的階段。必須提供鏈接數(shù)據(jù)庫服務(wù)器的選項和創(chuàng)建的表的數(shù)量。
./sysbench --test=tests/db/oltp.lua --mysql-user=USER --mysql-password=SECRET --oltp-tables-count=64 cleanup
總結(jié)
以上是生活随笔為你收集整理的mysql sysbench_MySQL sysbench基准测试的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android课程设计(健康管理软件开发
- 下一篇: android的wifi直连,WLAN