1. run run_query_parallel.sh , cpu lebih rendah
sh run_query_parallel.sh
[root@teguhth-all pararel]# sh run_query_parallel.sh
Jumlah eksekusi (TOTAL): 10000
Jumlah paralel (THREAD): 10
Menjalankan 10000 query dengan 10 paralel...
Query yang dijalankan: 'SELECT *, SLEEP(0.001) as delay FROM pembelian;'
Progress: 10000/10000 (100%)
Selesai semua eksekusi.
[root@teguhth-all pararel]#
2. run run_query_parallel_agr.sh , cpu lebih tinggi
[root@teguhth-all pararel]# sh run_query_parallel_agr.sh
Jumlah eksekusi (TOTAL): 10000
Jumlah paralel (THREAD): 10
Menjalankan 10000 query dengan 10 paralel...
Query yang dijalankan: 'SELECT *, SLEEP(0.001) as delay FROM pembelian;'
Progress: 10000/10000 (100%)
Selesai semua eksekusi.
[root@teguhth-all pararel]#
3. script run_query_parallel.sh
[root@teguhth-all pararel]# pwd
/data/pararel
[root@teguhth-all pararel]#
[root@teguhth-all pararel]# cat run_query_parallel.sh
#!/bin/bash
# ===== CONFIG DATABASE =====
DB_HOST="10.10.10.90"
DB_PORT="3306"
DB_USER="admin"
DB_PASS="admin"
DB_NAME="teguhth"
#QUERY="select * from pembelian;"
QUERY="SELECT *, SLEEP(0.001) as delay FROM pembelian;"
# ===== INPUT =====
read -p "Jumlah eksekusi (TOTAL): " TOTAL
read -p "Jumlah paralel (THREAD): " PARALLEL
echo "Menjalankan $TOTAL query dengan $PARALLEL paralel..."
echo "Query yang dijalankan: '$QUERY'"
# ===== INIT =====
count=0
running=0
> /tmp/query_done.tmp # bersihkan file sementara
# ===== FUNCTION =====
run_query() {
local idx=$1
# Jalankan query tanpa output
mysql -h "$DB_HOST" -P "$DB_PORT" -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" -e "$QUERY" > /dev/null 2>&1
# Tandai selesai
echo $idx >> /tmp/query_done.tmp
}
# ===== EXECUTION =====
while [ $count -lt $TOTAL ]; do
((count++))
run_query $count & # jalankan di background
((running++))
# Batasi jumlah paralel
if [ $running -ge $PARALLEL ]; then
wait
running=0
fi
# Update progres di satu baris
done_count=$(wc -l < /tmp/query_done.tmp)
percent=$(( done_count * 100 / TOTAL ))
printf "\rProgress: %d/%d (%d%%)" "$done_count" "$TOTAL" "$percent"
done
# Tunggu semua selesai
wait
# Pastikan progres 100%
printf "\rProgress: %d/%d (100%%)\n" "$TOTAL" "$TOTAL"
rm -f /tmp/query_done.tmp
echo "Selesai semua eksekusi."
[root@teguhth-all pararel]#
4. script run_query_parallel_agr.sh
[root@teguhth-all pararel]# pwd
/data/pararel
[root@teguhth-all pararel]# cat run_query_parallel_agr.sh
#!/bin/bash
# ===== CONFIG DATABASE =====
DB_HOST="10.10.10.90"
DB_PORT="3306"
DB_USER="admin"
DB_PASS="admin"
DB_NAME="teguhth"
#QUERY="select * from pembelian;"
QUERY="SELECT *, SLEEP(0.001) as delay FROM pembelian;"
# ===== INPUT =====
read -p "Jumlah eksekusi (TOTAL): " TOTAL
read -p "Jumlah paralel (THREAD): " PARALLEL
echo "Menjalankan $TOTAL query dengan $PARALLEL paralel..."
echo "Query yang dijalankan: '$QUERY'"
# ===== INIT =====
> /tmp/query_done.tmp # bersihkan file sementara
# ===== FUNCTION =====
run_query_xargs() {
local idx=$1
# Jalankan query
mysql -h "$DB_HOST" -P "$DB_PORT" -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" -e "$QUERY" > /dev/null 2>&1
# Tandai selesai
echo $idx >> /tmp/query_done.tmp
# Update progres di satu baris
done_count=$(wc -l < /tmp/query_done.tmp)
percent=$(( done_count * 100 / TOTAL ))
printf "\rProgress: %d/%d (%d%%)" "$done_count" "$TOTAL" "$percent"
}
export -f run_query_xargs
export DB_HOST DB_PORT DB_USER DB_PASS DB_NAME QUERY TOTAL
# ===== EXECUTION =====
seq 1 $TOTAL | xargs -P $PARALLEL -I{} bash -c 'run_query_xargs "$@"' _ {}
# Pastikan progres 100%
printf "\rProgress: %d/%d (100%%)\n" "$TOTAL" "$TOTAL"
rm -f /tmp/query_done.tmp
echo "Selesai semua eksekusi."
[root@teguhth-all pararel]#





No comments:
Post a Comment