實(shí)驗(yàn)介紹:
YCSB(全稱為Yahoo! Cloud Serving Benchmark),該性能測(cè)試工具由Java語言編寫(在之前的MC文章中也提到過這個(gè),如果沒看過的讀者可以去看看之前MC那一期),主要用于云端或者服務(wù)器端的數(shù)據(jù)庫性能測(cè)試工具,其內(nèi)部涵蓋了常見的NoSQL數(shù)據(jù)庫產(chǎn)品,如Cassandra、MongoDB、HBase、Redis等等。
MySQL數(shù)據(jù)庫服務(wù)是一個(gè)完全托管的數(shù)據(jù)庫服務(wù),可使用世界上最受歡迎的開源數(shù)據(jù)庫來部署云原生應(yīng)用程序。它是百分百由MySQL原廠開發(fā),管理和提供支持。
當(dāng)然,本次實(shí)驗(yàn)所用到的平臺(tái)還是衡山-2(HS-2)RISC-V通用主板,該主板是一款專為開發(fā)者設(shè)計(jì)的標(biāo)準(zhǔn)mATX主板,該主板最高支持128GB內(nèi)存,通過類似PC的豐富的接口和較強(qiáng)的兼容性,賦予開發(fā)者桌面級(jí)的RISC-V開發(fā)體驗(yàn)。
HS-2主板搭載了一顆國產(chǎn)的服務(wù)器級(jí)RISC-V 64核處理器(SG2042)。SG2042是目前已量產(chǎn)的性能最高的RISC-V處理器,主要針對(duì)高性能計(jì)算領(lǐng)域需求設(shè)計(jì),適用于科學(xué)計(jì)算、工程計(jì)算、AI計(jì)算、融合計(jì)算等大算力應(yīng)用場(chǎng)景。
實(shí)驗(yàn)材料:
MySQL/MySQL源代碼
一臺(tái)SG2042服務(wù)器(HS-2)
TPCC源代碼
YCSB源代碼
JDK(本教程使用系統(tǒng)自帶的JDK 11)
實(shí)驗(yàn)過程:
安裝MySQL:
方式一:直接通過apt安裝
sudo apt install mysql-server
方式二:編譯安裝(此路不通)
下載源碼
wget
https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.34.tar.gz
如果wget太慢,可以先提前下載到電腦上,然后再傳到服務(wù)器上。
解壓并進(jìn)入
tar -xzvf mysql-8.0.34.tar.gz
cd mysql-8.0.34/
mkdir build
cd build/
由于MySQL需要boost,而且直接下載boost比較慢,因此我們選擇手動(dòng)下載boost
https://boostorg.jfrog.io/artifactory/main/release/1.77.0/source/boost_1_77_0.tar.gz
解壓
tar -xzvf boost_1_77_0.tar.gz
回到mysql的build文件夾下:
cd mysql-8.0.34/build/
運(yùn)行cmake
sudo cmake .. -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_unicode_ci
-DENABLED_LOCAL_INFILE=ON -DWITH_SSL=system
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql/server -DMYSQL_DATADIR=/usr/local/mysql/data
-DMYSQL_TCP_PORT=3306 -DDOWNLOAD_BOOST=0
-DWITH_BOOST=/home/perfxlab01/boost_1_77_0/
編譯并安裝
sudo make -j64
結(jié)果提示SHM_Buffer.hpp上的代碼報(bào)錯(cuò),后來發(fā)現(xiàn)當(dāng)時(shí)不支持RISC-V平臺(tái)編譯,因此在此建議還是通過包管理器安裝mysql。
注意,如果是之前已經(jīng)卸載并重裝過mysql,如果出現(xiàn)sock無法訪問,請(qǐng)參考:
https://stackoverflow.com/questions/70813122/getting-error-mysql-service-failed-because-the-control-process-exited-with-erro
如果提示mysql.cnf出錯(cuò),只要執(zhí)行以下命令即可修復(fù)。
sudo touch /etc/mysql/mysql.cnf(新建mysql.cnf文件)
sudo dpkg --configure -a(重新配置)
初始化設(shè)置:
sudo mysql_secure_installation
發(fā)現(xiàn)沒有權(quán)限
進(jìn)入mysql
sudo mysql
執(zhí)行以下命令:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by '[你想設(shè)置的密碼]';
然后退出mysql shell
接下來我們運(yùn)行YCSB測(cè)試
獲取YCSB
https://hub.yzuu.cf/brianfrankcooper/YCSB/releases/download/0.17.0/ycsb-0.17.0.tar.gz
或
https://github.com/brianfrankcooper/YCSB/releases/download/0.17.0/ycsb-0.17.0.tar.gz
如果wget下載太慢的話可以先在電腦上使用多線程下載工具下載到電腦上,然后上傳到服務(wù)器上
傳到服務(wù)器上后解壓:
tar -xzvf ycsb-0.17.0.tar.gz
進(jìn)入YCSB文件夾
cd ycsb-0.17.0/
由于YCSB使用的Java語言編寫,因此我們還需要JDK。不過系統(tǒng)以已經(jīng)提前提供了JDK11,因此無需另外安裝JDK。
登錄數(shù)據(jù)庫,創(chuàng)建數(shù)據(jù)庫和表:
create database ycsb;
use ycsb;
CREATE TABLE usertable (
YCSB_KEY VARCHAR(255) PRIMARY KEY,
FIELD0 TEXT, FIELD1 TEXT,
FIELD2 TEXT, FIELD3 TEXT,
FIELD4 TEXT, FIELD5 TEXT,
FIELD6 TEXT, FIELD7 TEXT,
FIELD8 TEXT, FIELD9 TEXT
);
編輯db.properties
cd jdbc-binding/conf/
mv db.properties db.properties.bak
vim db.properties
db.properties內(nèi)容如下:
db.driver=com.mysql.cj.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/ycsb
db.user=root
db.passwd=[你的密碼]
然后下載所需要的數(shù)據(jù)庫驅(qū)動(dòng)
wget
https://downloads.mysql.com/archives/get/p/3/file/mysql-connector-j-8.0.33.tar.gz
解壓并將驅(qū)動(dòng)安裝到指定文件夾下:
tar -xzvf mysql-connector-j-8.0.33.tar.gz
cp mysql-connector-j-8.0.33/mysql-connector-j-8.0.33.jar ~/ycsb-0.17.0/jdbc-binding/lib/
載入數(shù)據(jù):
bin/ycsb load jdbc -P workloads/workloada -P ./jdbc-binding/conf/db.properties
-cp ./jdbc-binding/lib/mysql-connector-j-8.0.33.jar
然后就是跑分時(shí)間:
bin/ycsb run jdbc -P workloads/workloada -P ./jdbc-binding/conf/db.properties
-cp ./jdbc-binding/lib/mysql-connector-j-8.0.33.jar
(上面兩個(gè)步驟時(shí)間比較長,可以在等的時(shí)候順便泡杯咖啡或者看一會(huì)番等等)
如果提示Python報(bào)錯(cuò),那是因?yàn)閅CSB使用的是Python 2代碼,雖然有人試圖將Python3支持與主倉庫合并,但是卻一直沒有被合并進(jìn)去(0.17.0依舊還是使用Python 2)。
先安裝python2
sudo apt install python2
更改鏈接
sudo rm /usr/bin/python
sudo ln -s /usr/bin/python2 /usr/bin/python
測(cè)試一下:
python --version
如果提示Python 2.7.18那就說明已經(jīng)成功將鏈接改到python 2了。
然后重新嘗試執(zhí)行載入數(shù)據(jù)并跑分
跑分結(jié)果:
[OVERALL], RunTime(ms), 1180970
[OVERALL], Throughput(ops/sec), 84.67615604122035
[TOTAL_GCS_Copy], Count, 127
[TOTAL_GC_TIME_Copy], Time(ms), 2214
[TOTAL_GC_TIME_%_Copy], Time(%), 0.18747300947526185
[TOTAL_GCS_MarkSweepCompact], Count, 6
[TOTAL_GC_TIME_MarkSweepCompact], Time(ms), 526
[TOTAL_GC_TIME_%_MarkSweepCompact], Time(%), 0.044539658077681905
[TOTAL_GCs], Count, 133
[TOTAL_GC_TIME], Time(ms), 2740
[TOTAL_GC_TIME_%], Time(%), 0.23201266755294375
[READ], Operations, 49947
[READ], AverageLatency(us), 1485119.70881134
[READ], MinLatency(us), 20192
[READ], MaxLatency(us), 66584575
[READ], 95thPercentileLatency(us), 3217407
[READ], 99thPercentileLatency(us), 3725311
[READ], Return=OK, 49947
[CLEANUP], Operations, 100
[CLEANUP], AverageLatency(us), 207285.48
[CLEANUP], MinLatency(us), 4828
[CLEANUP], MaxLatency(us), 6111231
[CLEANUP], 95thPercentileLatency(us), 999935
[CLEANUP], 99thPercentileLatency(us), 1299455
[UPDATE], Operations, 50053
[UPDATE], AverageLatency(us), 609746.7518030887
[UPDATE], MinLatency(us), 22224
[UPDATE], MaxLatency(us), 2666495
[UPDATE], 95thPercentileLatency(us), 1309695
[UPDATE], 99thPercentileLatency(us), 1539071
[UPDATE], Return=OK, 50053
總結(jié):
從跑分結(jié)果來看,SG2042在數(shù)據(jù)庫應(yīng)用方面還是比較不錯(cuò)的,但是由于YCSB使用的是Python 2,而Python 2已于2020年1月1日停止支持,因此也希望YCSM盡快遷移到Python 3上。
參考資料:
MySQL中文官網(wǎng):
https://www.mysql.com/cn/
YCSB的jdbc文檔
https://github.com/brianfrankcooper/YCSB/tree/master/jdbc
Port ycsb to Python3 and also make it Python2 compatible #1421(Github)
https://github.com/brianfrankcooper/YCSB/pull/1421
MySQL server fails to build on RISC-V 64
https://bugs.mysql.com/bug.php?id=100356