Mysql5.1 - mysqlslap效能測試工具

Steven1981發表於2009-10-29
看到GOOGLE有一個好東東: TCMalloc:執行緒快取的Malloc
對高併發的效能提高很多.想拿來測一把.
於是挑了一個效能測試工具: MYSQL 5.1 帶來的mysqlslap效能測試工具.
[@more@]

1. 安裝

下載: http://dev.mysql.com/downloads/mysql/5.1.html

這是MYSQL 5.1版本自帶的工具. 所以你裝完5.1後就可以用了.

在安裝過程中,你可能會遇到關於libmysqlclient.so.16的錯誤.
見: http://steven1981.itpub.net/post/7967/493101

2. 使用

# 幫助
mysqlslap --help


常用的選項:
--concurrency 代表併發數量,多個可以用逗號隔開,當然你也可以用自己的分隔符隔開,這個時候要用到--delimiter開關。
--engines 代表要測試的引擎,可以有多個,用分隔符隔開。
--iterations 代表要執行這些測試多少次。
--auto-generate-sql 代表用系統自己生成的SQL指令碼來測試。
--auto-generate-sql-load-type 代表要測試的是讀還是寫還是兩者混合的(read,write,update,mixed)
--number-of-queries 代表總共要執行多少次查詢。每個客戶執行的查詢數量可以用查詢總數/併發數來計算。比如倒數第二個結果2=200/100。
--debug-info 代表要額外輸出CPU以及記憶體的相關資訊。
--number-int-cols 代表示例表中的INTEGER型別的屬性有幾個。
--number-char-cols 意思同上。
--create-schema 代表自己定義的模式(在MySQL中也就是庫)。
--query 代表自己的SQL指令碼。
--only-print 如果只想列印看看SQL語句是什麼,可以用這個選項。


3. 測試

#測試環境
PowerEdge 1950 / 單盤 /10G MEM
OS: RHEL 5.3
MySQL版本為5.1.40
innodb_buffer_pool_size=2G
innodb_additional_mem_pool_size = 100M
innodb_max_dirty_pages_pct = 10
key_buffer_size=320M
bulk_insert_buffer_size = 64M
sync_binlog=0

#簡單的測試結果:

mysqlslap --defaults-file=/etc/my.cnf --concurrency=50,100,200 --iterations=1 --auto-generate-sql-unique-query-number=1 --number-int-cols=4 --number-char-cols=35 --auto-generate-sql --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=write --engine=innodb --number-of-queries=200000 --commit=2000 --debug-info -uroot -palisoftdb -h127.0.0.1 -S /tmp/mysql.sock

Benchmark
Running for engine innodb
Average number of seconds to run all queries: 131.013 seconds
Minimum number of seconds to run all queries: 131.013 seconds
Maximum number of seconds to run all queries: 131.013 seconds
Number of clients running queries: 50
Average number of queries per client: 4000

Benchmark
Running for engine innodb
Average number of seconds to run all queries: 131.258 seconds
Minimum number of seconds to run all queries: 131.258 seconds
Maximum number of seconds to run all queries: 131.258 seconds
Number of clients running queries: 100
Average number of queries per client: 2000

Benchmark
Running for engine innodb
Average number of seconds to run all queries: 128.142 seconds
Minimum number of seconds to run all queries: 128.142 seconds
Maximum number of seconds to run all queries: 128.142 seconds
Number of clients running queries: 200
Average number of queries per client: 1000



mysqlslap --defaults-file=/etc/my.cnf --concurrency=50,100,200 --iterations=1 --auto-generate-sql-unique-query-number=1 --number-int-cols=4 --number-char-cols=35 --auto-generate-sql --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=write --engine=myisam --number-of-queries=200000 --debug-info -uroot -palisoftdb -h127.0.0.1 -S /tmp/mysql.sock
Benchmark
Running for engine myisam
Average number of seconds to run all queries: 42.607 seconds
Minimum number of seconds to run all queries: 42.607 seconds
Maximum number of seconds to run all queries: 42.607 seconds
Number of clients running queries: 50
Average number of queries per client: 4000

Benchmark
Running for engine myisam
Average number of seconds to run all queries: 45.547 seconds
Minimum number of seconds to run all queries: 45.547 seconds
Maximum number of seconds to run all queries: 45.547 seconds
Number of clients running queries: 100
Average number of queries per client: 2000

Benchmark
Running for engine myisam
Average number of seconds to run all queries: 47.517 seconds
Minimum number of seconds to run all queries: 47.517 seconds
Maximum number of seconds to run all queries: 47.517 seconds
Number of clients running queries: 200
Average number of queries per client: 1000


對MYISAM, 如果只作插入操作, 相當於 40000條/秒
對INNODB, 如果只作插入操作, 相當於 15000條/秒

光從以上兩個測試結果來看,如果只作插入操作. MYISAM確實要比INNODB效能好很多.
但這樣的資料不具有代表性.還需進一步詳細測試.這裡只作一個演示.

官方文件: http://dev.mysql.com/doc/refman/5.1/en/mysqlslap.html

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

相關文章