「Oltpbenchmark」:修訂間差異
跳至導覽
跳至搜尋
(未顯示同一使用者於中間所作的 3 次修訂) | |||
第65行: | 第65行: | ||
./oltpbenchmark -b tpcc -c config/tpcc.xml --execute=true 2>&1 | grep --line-buffered 'Rate limited' | ./oltpbenchmark -b tpcc -c config/tpcc.xml --execute=true 2>&1 | grep --line-buffered 'Rate limited' | ||
done) | awk '{sum += $(NF - 1); print $(NF - 1)} END {print sum / NR}' | done) | awk '{sum += $(NF - 1); print $(NF - 1)} END {print sum / NR}' | ||
# Brute-force to run all cases: | |||
echo 2 4 8 16 32 64 128 256 512 768 | xargs -n1 | xargs -n1 -I% bash -c "sed -i -e 's/<terminals>[0-9]*/<terminals>%/' config/tpcc.xml; echo %; (for i in {1..100}; do ./oltpbenchmark -b tpcc -c config/tpcc.xml --execute=true 2>&1 | grep 'Rate limited'; done) | awk '{sum += \$(NF - 1)} END {print sum / NR}'" | |||
</syntaxhighlight> | </syntaxhighlight> | ||
第72行: | 第75行: | ||
== 其他 == | == 其他 == | ||
=== CockroachDB === | |||
{{See also|CockroachDB}} | |||
如果以[[PostgreSQL]]的界面測試[[CockroachDB]]時,會因為CockroachDB不支援<code>CONSTRAINT</code>指到沒有index的欄位,會需要修改PostgreSQL產生表格時的設定,並且重新編譯: | 如果以[[PostgreSQL]]的界面測試[[CockroachDB]]時,會因為CockroachDB不支援<code>CONSTRAINT</code>指到沒有index的欄位,會需要修改PostgreSQL產生表格時的設定,並且重新編譯: | ||
第77行: | 第84行: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
cd ~/oltpbench | cd ~/oltpbench | ||
sed -i -e 's/^ALTER TABLE /-- ALTER TABLE/' src/com/oltpbenchmark/benchmarks/tpcc/ddls/tpcc-postgres-ddl.sql | |||
# Then rebuild oltpbenchmark: | # Then rebuild oltpbenchmark: | ||
第86行: | 第92行: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
另外CockroachDB只支援<code>SERIALIZE</code>模式,所以<code>tpcc.xml</code>內也修改成<code>TRANSACTION_SERIALIZABLE</code> | 另外CockroachDB只支援<code>SERIALIZE</code>模式,所以<code>tpcc.xml</code>內也修改成<code>TRANSACTION_SERIALIZABLE</code>: | ||
<syntaxhighlight lang="bash"> | |||
cd ~/oltpbench | |||
sed -i -e 's/TRANSACTION_READ_COMMITTED/TRANSACTION_SERIALIZABLE/' config/tpcc.xml | |||
</syntaxhighlight> | |||
== 外部連結 == | == 外部連結 == |
於 2018年12月31日 (一) 20:25 的最新修訂
oltpbenchmark是一套Java寫的資料庫效能測試程式。
環境
這篇所提到的設定主要是在Ubuntu 18.04下的Kubernetes(Docker)內的情境。
安裝
先安裝並且設定需要的軟體:
sudo apt install -y ant default-jdk openjdk-8-jdk git locales tzdata
update-alternatives --config java
# Use Java 8
取得並且編譯:
cd ~
git clone https://github.com/oltpbenchmark/oltpbench.git
cd ~/oltpbench
ant clean
ant
設定
cd ~/oltpbench
cp config/tpcc_config_postgres.xml config/tpcc.xml
vim config/tpcc.xml
# Change "DBUrl", "username", and "password".
測試
先建立表格並且產生測試資料:
cd ~/oltpbench
./oltpbenchmark -b tpcc -c config/tpcc.xml --create=true
./oltpbenchmark -b tpcc -c config/tpcc.xml --load=true
實際測試:
# Test it:
cd ~/oltpbench
./oltpbenchmark -b tpcc -c config/tpcc.xml --execute=true
# Filter rate data only:
cd ~/oltpbench
./oltpbenchmark -b tpcc -c config/tpcc.xml --execute=true | grep --line-buffered 'Rate limited'
# Do benchmark 100 times:
cd ~/oltpbench
for i in {1..100}; do
./oltpbenchmark -b tpcc -c config/tpcc.xml --execute=true 2>&1 | grep --line-buffered 'Rate limited'
done
# Get average result:
cd ~/oltpbench
(for i in {1..100}; do
./oltpbenchmark -b tpcc -c config/tpcc.xml --execute=true 2>&1 | grep --line-buffered 'Rate limited'
done) | awk '{sum += $(NF - 1); print $(NF - 1)} END {print sum / NR}'
# Brute-force to run all cases:
echo 2 4 8 16 32 64 128 256 512 768 | xargs -n1 | xargs -n1 -I% bash -c "sed -i -e 's/<terminals>[0-9]*/<terminals>%/' config/tpcc.xml; echo %; (for i in {1..100}; do ./oltpbenchmark -b tpcc -c config/tpcc.xml --execute=true 2>&1 | grep 'Rate limited'; done) | awk '{sum += \$(NF - 1)} END {print sum / NR}'"
調整
在tpcc.xml
內的terminals
參數可以調整,以產生足夠多的client模擬測試。
其他
CockroachDB
如果以PostgreSQL的界面測試CockroachDB時,會因為CockroachDB不支援CONSTRAINT
指到沒有index的欄位,會需要修改PostgreSQL產生表格時的設定,並且重新編譯:
cd ~/oltpbench
sed -i -e 's/^ALTER TABLE /-- ALTER TABLE/' src/com/oltpbenchmark/benchmarks/tpcc/ddls/tpcc-postgres-ddl.sql
# Then rebuild oltpbenchmark:
cd ~/oltpbench
ant clean
ant
另外CockroachDB只支援SERIALIZE
模式,所以tpcc.xml
內也修改成TRANSACTION_SERIALIZABLE
:
cd ~/oltpbench
sed -i -e 's/TRANSACTION_READ_COMMITTED/TRANSACTION_SERIALIZABLE/' config/tpcc.xml