tpcc-mysql的安裝和使用


tpcc-mysql介紹

      TPC(Tracsaction Processing Performance Council) 事務處理性能協會是一個評價大型數據庫系統軟硬件性能的非盈利的組織,TPC-C是TPC協會制定的,用來測試典型的復雜OLTP系統的性能。Tpcc-mysql是percona基於tpcc衍生出來的產品,專用於mysql基准測試.

安裝與使用

官網地址:https://github.com/Percona-Lab/tpcc-mysql

實驗環境:阿里雲輕量應用服務器

步驟:

1)下載源代碼

git clone https://github.com/Percona-Lab/tpcc-mysql.git

2)編譯

在編譯之前需要安裝mysql和mysql編譯時鏈接的庫

sudo apt-get install mysql-server
sudo apt-get install mysql-client 
sudo apt-get install libmysqlclient-dev

 

cd tpcc-mysql/src
make

編譯完成后會生成兩個可執行文件,tpcc_load是導入數據的腳本,tpcc_start是執行測試的腳本.

3) 加載數據

  • 創建數據庫  mysqladmin -u root -p passwd create tpcc1000
  • 創建表  mysql tpcc1000 < create_table.sql
  • 創建相關索引和主外鍵(這一步也可以在加載數據之后完成) mysql tpcc1000 < add_fkey_idx.sql
  • 填充數據
    • 簡單的步驟是 ./tpcc_load -h127.0.0.1 -d tpcc1000 -u root -p passwd -w 100 ,可以通過tpcc_load --help 查看所有的選項,最后一個參數是倉庫的個數,例如創建100個倉庫(warehouse)並填充數據
    • 加載數據比較慢(20分鍾),可用loah.sh 腳本並行加載,后面有寫

顯示一下創建的表:

$mysql -uroot -p -e "show tables from  TPCC"
+--------------------+
| Tables_in_tpcctest |
+--------------------+
| customer           |
| district           |
| history            |
| item               |
| new_orders         |
| order_line         |
| orders             |
| stock              |
| warehouse          |
+--------------------+

4)開始基准測

  • ./tpcc_start -h 127.0.0.1 -p 3306 -d tpcc1000 -u root -p "123123" -w 100 -c 10 -r 100 -l 300 -i 20 -f /var/log/tpcc_mysql.log -t /var/log/tpcc_mysql.rtx
  • |hostname| |port| |dbname| |user| |WAREHOUSES| |CONNECTIONS| |WARMUP TIME| |BENCHMARK TIME|
  • pcc_start --help 查看所有選項

 參數說明:
-w warehouse 倉庫;
-c 連接數;
-r warmup_time:指定預熱時間,以秒為單位,默認是10秒,主要目的是為了將數據加載到內存;
-l running_time:指定測試執行時間,以秒為單位,默認是20秒;
-i report_interval:指定生產報告的時間間隔,默認是10秒,我這里設置了20秒;
-f report_file:將測試中各項操作的記錄輸出到指定文件內保存;
-t trx_file:輸出更詳細的操作信息到指定文件內保存;

 結果解讀

 見下一篇博客 tpcc-mysql運行結果解讀

至此基本的已經完成,沒有遇到問題不用往下看了

 

並發加載數據

 單進程加載

./tpcc_load -h127.0.0.1 -d tpcc1000 -u root -p passwd -w 100

 並發加載

需要根據你的實際情況修改一下(主要是改密碼

方法一

./load.sh tpcc1000 100

通過load.sh並發加載數據(創建100個warsehouse)

造數據成功后,會提示:…DATA LOADING COMPLETED SUCCESSFULLY.

方法二

GitHub上另一個並行加載腳本: https://gist.github.com/sh2/3458844

根據實際情況情況修改用戶名、密碼、數據庫名,初始倉庫為10個。

由於最新版本tpcc_load使用方法需要顯示使用參數,修改腳本如下

vim tpcc_load_parallel.sh

 1 #!/bin/bash
 2 
 3 # Configration
 4 
 5 MYSQL=/usr/bin/mysql
 6 TPCCLOAD=./tpcc_load
 7 TABLESQL=./create_table.sql
 8 CONSTRAINTSQL=./add_fkey_idx.sql
 9 DEGREE=`getconf _NPROCESSORS_ONLN`
10 
11 SERVER=localhost
12 DATABASE=tpcc1000
13 USER=root
14 PASS=123123
15 WAREHOUSE=10
16 
17 # Load
18 
19 set -e
20 $MYSQL -u $USER -p$PASS -e "DROP DATABASE IF EXISTS $DATABASE"
21 $MYSQL -u $USER -p$PASS -e "CREATE DATABASE $DATABASE"
22 $MYSQL -u $USER -p$PASS $DATABASE < $TABLESQL
23 $MYSQL -u $USER -p$PASS $DATABASE < $CONSTRAINTSQL
24 
25 echo 'Loading item ...'
26 $TPCCLOAD  -h $SERVER -d $DATABASE -u $USER -p $PASS -w $WAREHOUSE 1 1 -n $WAREHOUSE > /dev/null
27 
28 set +e
29 STATUS=0
30 trap 'STATUS=1; kill 0' INT TERM
31 
32 for ((WID = 1; WID <= WAREHOUSE; WID++)); do
33     echo "Loading warehouse id $WID ..."
34     
35     (
36         set -e
37         
38         # warehouse, stock, district
39         $TPCCLOAD -h $SERVER -d $DATABASE -u $USER -p $PASS -w $WAREHOUSE 2 -m $WID  -n $WID > /dev/null
40         
41         # customer, history
42         $TPCCLOAD -h $SERVER -d $DATABASE -u $USER -p $PASS -w $WAREHOUSE 3 -m $WID  -n $WID > /dev/null
43         
44         # orders, new_orders, order_line
45         $TPCCLOAD -h $SERVER -d $DATABASE -u $USER -p $PASS -w $WAREHOUSE 4 -m $WID  -n $WID > /dev/null
46     ) &
47     
48     PIDLIST=(${PIDLIST[@]} $!)
49     
50     if [ $((WID % DEGREE)) -eq 0 ]; then
51         for PID in ${PIDLIST[@]}; do
52             wait $PID
53             
54             if [ $? -ne 0 ]; then
55                 STATUS=1
56             fi
57         done
58         
59         if [ $STATUS -ne 0 ]; then
60             exit $STATUS
61         fi
62         
63         PIDLIST=()
64     fi
65 done
66 
67 for PID in ${PIDLIST[@]}; do
68     wait $PID
69     
70     if [ $? -ne 0 ]; then
71         STATUS=1
72     fi
73 done
74 
75 if [ $STATUS -eq 0 ]; then
76     echo 'Completed.'
77 fi
78 
79 exit $STATUS
tpcc_load_parallel.sh

 遇到的幾個問題

1. 需要安裝mysql,對應的鏈接庫也要安裝,makefile中需要(不然make命令報錯)

!sudo apt-get install mysql-server          //服務端
!sudo apt-get install mysql-client          //客戶端
!sudo apt-get install libmysqlclient-dev    //程序編譯時鏈接的庫

2. 執行 tpcc_load -h127.0.0.1 -d tpcc1000 -u root -p "" -w 100時,報錯ERROR 1698 (28000): Access denied for user 'root'@'localhost' (using password: NO)

解決方法:

方法很簡單,查看一下user表,錯誤的起因就是在這里, root的plugin被修改成了auth_socket,用密碼登陸的plugin應該是mysql_native_password。(由於可以用sudo mysql -uroot -p進入,所以並不需要以安全模式啟動)

mysql> select user, plugin from mysql.user;
+-----------+-----------------------+
| user      | plugin                |
+-----------+-----------------------+
| root      | auth_socket           |
| mysql.sys | mysql_native_password |
| dev       | mysql_native_password |
+-----------+-----------------------+
3 rows in set (0.01 sec)

只要把auth_socket改成mysql_native_password就行了:

mysql> update mysql.user set authentication_string=PASSWORD('mima'), 
plugin='mysql_native_password' where user='root';
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 1

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

之后退出mysql,重啟一下,就可以了.

原因應該是安裝時沒有給root設置密碼,但是步驟3的前三個命令默認無密碼...,直接運行會報錯:

root@iZj6c9c6vaqj1i0a9j7h78Z:/home/admin/tpcc-mysql# mysqladmin create tpcc1000
mysqladmin: connect to server at 'localhost' failed

只需再后面加上 -p密碼 ,警告不安全可不管。 

 

 

 

參考鏈接:

 1. https://www.jianshu.com/p/2b63c65caf6a

 2. https://blog.51cto.com/goome/1958328

 3. 官網教程 https://github.com/Percona-Lab/tpcc-mysql

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM