close

個人在處理測試的情況分為兩部分,
 

一是壓力測試

常見工具,如下
Mariadb內建的工具有mysqlslap
Percona的工具有tpcc-mysql
廣受歡迎的sysbench

sysbench
安裝方式,使用percona的repository

yum install https://www.percona.com/redir/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm -y
yum install sysbench -y

否則使用編譯安裝,參考 CentOS下安裝和使用SysBench.md

基本用法
請參考 数据库性能测试:sysbench用法详解

每次壓測都盡量做到 prepare -> run -> cleanup -> sync -> echo 3 > /proc/sys/vm/drop_caches -> swapoff -a && swapon -a [如果swap進用不需此步驟] -> systemctl restart mariadb
寫成shell會比較方便,
另外也有一種方式 : 僅run執行多次,其他跑一次(個人不建議),如Sysbench

mysqlslap
基本用法
mysqlslap -a --number-char-cols=測試表有幾個字元類型的欄 --number-int-cols=測試表有幾個數字類型的欄 --concurrency=併發數1,併發數2 --number-of-queries=總查詢次數 --iterations=反覆次數 --debug-info


tpcc-mysql
安裝方式

wget https://github.com/Percona-Lab/tpcc-mysql/archive/master.zip

unzip master.zip && rm -f master.zip

mv tpcc-mysql-master tpcc-mysql

cd tpcc-mysql/src && make   
==>>這邊make沒有錯誤就成了,但會出很多錯誤,請參考 MySQL/Mariadb基准测试工具-tpcc-mysql使用1 
==>>並且在缺少libmariadb.so時,有另外的解法 missing libmariadb.so.3 on redhat 7 (不過小弟安裝時Mariadb-shared和mariadb-compat有衝突)

基本用法
按照README.md準備資料,使用tpcc_load_parallel.sh多程序載入,
不過小弟使用時
tpcc_load [server] [DB] [user] [pass] [warehouse] [part] [min_wh] [max_wh] => 參數塞不進去,
必須使用tpcc_load -h [server] -d [DB] -u [user] -p [pass] -w [warehouse] -l [part] -m [min_wh] -n [max_wh]來改寫一下tpcc_load_parallel.sh再來執行.

最後

./tpcc_start -h server_host -P port -d database_name -u mysql_user -p mysql_password -w warehouses -c connections -r warmup_time -l running_time [-i report_interval -f report_file -t trx_file]

二是調校測試

調校時常需要避免cache造成回傳沒意義的執行時間,

mariadb是否有包含query cache功能

SHOW VARIABLES LIKE 'have_query_cache'; => No,就重裝一版有的吧.

關於是否使用cache可以查看變數,

show variables like 'query_cache_type'; => 0:關閉; 1:開啟; 2:有情求則使用cache => 此時使用Select SQL_CACHE
(有文章顯示儘管此功能可以線上啟/停用,但實測有遺毒,建議若不開起則在開mysql服務時就關閉,[參考]第二篇)
show variables like 'query_cache_size'; => 在10.1.7版後,只要此設定值非0,就開啟cache

Select SQL_NO_CACHE 就可以在調校時避免這個問題.(SQL_NO_CACHE必須加在第一個SELECT之後)

SQL_NO_CACHE本身會有以下作用(聽說Mysql的情況是不一樣)

不將結果存入cache之中且不使用cache的內容來回傳查詢結果

另外在mariadb官網可以看到儘管查詢結果相同,不同的T-SQL語句是如何被當成沒有hit cache的.(有興趣自行上官網).

但這不是重點,因為調校時一概將SQL_NO_CACHE加入查詢語法內,

這樣也不用擔心調整過的查詢,會hit cache導致誤判結果.

如果要清空暫存,使用RESET QUERY CACHE;或 FLUSH TABLES;即可.
 

參考

Query Cache
[MySQL FAQ]系列 — 为什么要关闭query cache,如何关闭
mysqlslap
sysbench官網
测试| iMySQL | 老叶茶馆
Linux上使用TPCC-MySQL 笔记
tpcc-mysql安装、使用、结果解读

arrow
arrow
    全站熱搜

    abcg5 發表在 痞客邦 留言(0) 人氣()