Tuesday, March 31, 2026

.::: Shell script to simulate pararel query thread or Injector CPU in MariaDB :::.

  

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

Popular Posts