Cara menggunakan latensi postgresql

Skrip transaksi bawaan bawaan (juga dipanggil dengan

\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
6) mengeluarkan tujuh perintah per transaksi melalui
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
7,
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
8,
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
9 dan
\sleep 10 ms
0 yang dipilih secara acak. Skenario ini terinspirasi oleh tolok ukur TPC-B, tetapi sebenarnya bukan TPC-B, karena itulah namanya

  1. \sleep 10 ms
    
    _1

  2. \sleep 10 ms
    
    _2

  3. \sleep 10 ms
    
    _3

  4. \sleep 10 ms
    
    _4

  5. \sleep 10 ms
    
    _5

  6. \sleep 10 ms
    
    _6

  7. \sleep 10 ms
    
    _7

Jika Anda memilih

\sleep 10 ms
8 bawaan (juga
\sleep 10 ms
9), langkah 4 dan 5 tidak termasuk dalam transaksi. Ini akan menghindari pertikaian pembaruan pada tabel-tabel ini, tetapi itu membuat kasus uji menjadi kurang seperti TPC-B

Jika Anda memilih

\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
0 bawaan (juga
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
1), hanya
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
2 yang dikeluarkan

Script Kustom

Catatan

Diasumsikan bahwa skrip pgbench tidak berisi blok transaksi SQL yang tidak lengkap. Jika saat runtime klien mencapai akhir skrip tanpa menyelesaikan blok transaksi terakhir, itu akan dibatalkan

Tabel 288. pgbench Variabel Otomatis

VariableDescription

\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
3nomor unik yang mengidentifikasi sesi klien (dimulai dari nol)
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
4seed digunakan dalam fungsi permutasi hash dan pseudorandom secara default
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
5seed generator acak (kecuali ditimpa dengan
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
6)
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
7faktor skala saat ini

Perintah meta file skrip dimulai dengan garis miring terbalik (

\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
8) dan biasanya diperpanjang hingga akhir baris, meskipun dapat dilanjutkan ke baris tambahan dengan menulis garis miring terbalik-kembali. Argumen ke perintah meta dipisahkan oleh spasi putih. Perintah meta ini didukung

\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
_9]
\shell command literal_argument :variable ::literal_starting_with_colon
0]

Perintah ini dapat digunakan untuk mengakhiri kueri SQL, menggantikan titik koma akhir (

\shell command literal_argument :variable ::literal_starting_with_colon
1)

Saat perintah

\shell command literal_argument :variable ::literal_starting_with_colon
2 digunakan, kueri SQL sebelumnya diharapkan mengembalikan satu baris, kolom yang disimpan ke dalam variabel yang dinamai menurut nama kolom, dan diawali dengan
\shell command literal_argument :variable ::literal_starting_with_colon
3 jika disediakan

Saat perintah

\shell command literal_argument :variable ::literal_starting_with_colon
_4 digunakan, semua kueri SQL gabungan (dipisahkan oleh
\shell command literal_argument :variable ::literal_starting_with_colon
5) kolomnya disimpan ke dalam variabel yang dinamai menurut nama kolom, dan diawali dengan
\shell command literal_argument :variable ::literal_starting_with_colon
3 jika disediakan. Jika kueri tidak mengembalikan baris, tidak ada tugas yang dibuat dan variabel dapat diuji keberadaannya untuk mendeteksinya. Jika kueri mengembalikan lebih dari satu baris, nilai terakhir disimpan

\shell command literal_argument :variable ::literal_starting_with_colon
2 dan
\shell command literal_argument :variable ::literal_starting_with_colon
4 tidak dapat digunakan dalam mode pipa, karena hasil kueri belum tersedia pada saat perintah memerlukannya

Contoh berikut menempatkan saldo akun akhir dari kueri pertama ke dalam variabel

\shell command literal_argument :variable ::literal_starting_with_colon
9, dan mengisi variabel
\set size 1000000
\set r random_zipfian(1, :size, 1.07)
\set k 1 + permute(:r, :size)
0 dan
\set size 1000000
\set r random_zipfian(1, :size, 1.07)
\set k 1 + permute(:r, :size)
1 dengan bilangan bulat dari kueri ketiga. Hasil kueri kedua dibuang. Hasil dari dua kueri gabungan terakhir disimpan dalam variabel
\set size 1000000
\set r random_zipfian(1, :size, 1.07)
\set k 1 + permute(:r, :size)
2 dan
\set size 1000000
\set r random_zipfian(1, :size, 1.07)
\set k 1 + permute(:r, :size)
3

UPDATE pgbench_accounts
  SET abalance = abalance + :delta
  WHERE aid = :aid
  RETURNING abalance \gset
-- compound of two queries
SELECT 1 \;
SELECT 2 AS two, 3 AS three \gset p_
SELECT 4 AS four \; SELECT 5 AS five \aset
\set size 1000000
\set r random_zipfian(1, :size, 1.07)
\set k 1 + permute(:r, :size)
4
\set size 1000000
\set r random_zipfian(1, :size, 1.07)
\set k 1 + permute(:r, :size)
5
\set size 1000000
\set r random_zipfian(1, :size, 1.07)
\set k 1 + permute(:r, :size)
6
\set size 1000000
\set r random_zipfian(1, :size, 1.07)
\set k 1 + permute(:r, :size)
5
\set size 1000000
\set r random_zipfian(1, :size, 1.07)
\set k 1 + permute(:r, :size)
8
\set size 1000000
\set r random_zipfian(1, :size, 1.07)
\set k 1 + permute(:r, :size)
_9

Grup perintah ini mengimplementasikan blok bersyarat yang dapat disarangkan, mirip dengan

\set k1 1 + permute(:r, :size, :default_seed + 123)
\set k2 1 + permute(:r, :size, :default_seed + 321)
0. Ekspresi bersyarat identik dengan
\set k1 1 + permute(:r, :size, :default_seed + 123)
\set k2 1 + permute(:r, :size, :default_seed + 321)
3, dengan nilai bukan nol yang ditafsirkan sebagai benar

\set k1 1 + permute(:r, :size, :default_seed + 123)
\set k2 1 + permute(:r, :size, :default_seed + 321)
4
\set size 1000000
\set r random_zipfian(1, :size, 1.07)
\set k 1 + permute(:r, :size)
5

Menetapkan variabel

\set k1 1 + permute(:r, :size, :default_seed + 123)
\set k2 1 + permute(:r, :size, :default_seed + 321)
_6 ke nilai yang dihitung dari
\set size 1000000
\set r random_zipfian(1, :size, 1.07)
\set k 1 + permute(:r, :size)
5. Ekspresi dapat berisi konstanta
\set k1 1 + permute(:r, :size, :default_seed + 123)
\set k2 1 + permute(:r, :size, :default_seed + 321)
8, konstanta Boolean
\set k1 1 + permute(:r, :size, :default_seed + 123)
\set k2 1 + permute(:r, :size, :default_seed + 321)
9 dan
\set size 1000000
\set r random_zipfian(1, 100 * :size, 1.07)
\set k 1 + abs(hash(:r)) % :size
0, konstanta bilangan bulat seperti
\set size 1000000
\set r random_zipfian(1, 100 * :size, 1.07)
\set k 1 + abs(hash(:r)) % :size
1, konstanta ganda seperti
\set size 1000000
\set r random_zipfian(1, 100 * :size, 1.07)
\set k 1 + abs(hash(:r)) % :size
2, referensi ke variabel
\set size 1000000
\set r random_zipfian(1, 100 * :size, 1.07)
\set k 1 + abs(hash(:r)) % :size
3
\set size 1000000
\set r random_zipfian(1, 100 * :size, 1.07)
\set k 1 + abs(hash(:r)) % :size
4, dengan prioritas dan asosiatif SQL yang biasa, SQL dan asosiatif,

Fungsi dan sebagian besar operator menampilkan

\set k1 1 + permute(:r, :size, :default_seed + 123)
\set k2 1 + permute(:r, :size, :default_seed + 321)
_8 pada input
\set k1 1 + permute(:r, :size, :default_seed + 123)
\set k2 1 + permute(:r, :size, :default_seed + 321)
8

Untuk tujuan bersyarat, nilai numerik bukan nol adalah

\set k1 1 + permute(:r, :size, :default_seed + 123)
\set k2 1 + permute(:r, :size, :default_seed + 321)
9, nilai numerik nol dan
\set k1 1 + permute(:r, :size, :default_seed + 123)
\set k2 1 + permute(:r, :size, :default_seed + 321)
8 adalah
\set size 1000000
\set r random_zipfian(1, 100 * :size, 1.07)
\set k 1 + abs(hash(:r)) % :size
0

Konstanta bilangan bulat dan ganda yang terlalu besar atau kecil, serta operator aritmatika bilangan bulat (

\set aid random(1, 100000 * :scale)
\set bid random(1, 1 * :scale)
\set tid random(1, 10 * :scale)
\set delta random(-5000, 5000)
BEGIN;
UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid;
SELECT abalance FROM pgbench_accounts WHERE aid = :aid;
UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid;
UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid;
INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP);
END;
1,
\set aid random(1, 100000 * :scale)
\set bid random(1, 1 * :scale)
\set tid random(1, 10 * :scale)
\set delta random(-5000, 5000)
BEGIN;
UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid;
SELECT abalance FROM pgbench_accounts WHERE aid = :aid;
UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid;
UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid;
INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP);
END;
2,
\set aid random(1, 100000 * :scale)
\set bid random(1, 1 * :scale)
\set tid random(1, 10 * :scale)
\set delta random(-5000, 5000)
BEGIN;
UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid;
SELECT abalance FROM pgbench_accounts WHERE aid = :aid;
UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid;
UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid;
INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP);
END;
3 dan
\set aid random(1, 100000 * :scale)
\set bid random(1, 1 * :scale)
\set tid random(1, 10 * :scale)
\set delta random(-5000, 5000)
BEGIN;
UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid;
SELECT abalance FROM pgbench_accounts WHERE aid = :aid;
UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid;
UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid;
INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP);
END;
4) meningkatkan kesalahan pada luapan

Ketika tidak ada klausa

\set aid random(1, 100000 * :scale)
\set bid random(1, 1 * :scale)
\set tid random(1, 10 * :scale)
\set delta random(-5000, 5000)
BEGIN;
UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid;
SELECT abalance FROM pgbench_accounts WHERE aid = :aid;
UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid;
UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid;
INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP);
END;
5 akhir yang diberikan ke
\set size 1000000
\set r random_zipfian(1, 100 * :size, 1.07)
\set k 1 + abs(hash(:r)) % :size
5, nilai defaultnya adalah
\set k1 1 + permute(:r, :size, :default_seed + 123)
\set k2 1 + permute(:r, :size, :default_seed + 321)
8

Contoh

\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
________63______8 [kita. hal. s ]

Menyebabkan eksekusi skrip untuk tidur selama durasi yang ditentukan dalam mikrodetik (

\set aid random(1, 100000 * :scale)
\set bid random(1, 1 * :scale)
\set tid random(1, 10 * :scale)
\set delta random(-5000, 5000)
BEGIN;
UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid;
SELECT abalance FROM pgbench_accounts WHERE aid = :aid;
UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid;
UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid;
INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP);
END;
9), milidetik (
0 199 2241 0 1175850568 995598
0 200 2465 0 1175850568 998079
0 201 2513 0 1175850569 608
0 202 2038 0 1175850569 2663
0) atau detik (
0 199 2241 0 1175850568 995598
0 200 2465 0 1175850568 998079
0 201 2513 0 1175850569 608
0 202 2038 0 1175850569 2663
1). Jika unit dihilangkan maka detik adalah defaultnya.
0 199 2241 0 1175850568 995598
0 200 2465 0 1175850568 998079
0 201 2513 0 1175850569 608
0 202 2038 0 1175850569 2663
_2 dapat berupa konstanta bilangan bulat atau
\set size 1000000
\set r random_zipfian(1, 100 * :size, 1.07)
\set k 1 + abs(hash(:r)) % :size
3
\set size 1000000
\set r random_zipfian(1, 100 * :size, 1.07)
\set k 1 + abs(hash(:r)) % :size
4 referensi ke variabel yang memiliki nilai bilangan bulat

Contoh

\sleep 10 ms
\setshell ________45_______6 ________73_______6 [ ________73_______7 .. ]

Setel variabel

\set k1 1 + permute(:r, :size, :default_seed + 123)
\set k2 1 + permute(:r, :size, :default_seed + 321)
6 ke hasil perintah shell
0 199 2241 0 1175850568 995598
0 200 2465 0 1175850568 998079
0 201 2513 0 1175850569 608
0 202 2038 0 1175850569 2663
6 dengan
0 199 2241 0 1175850568 995598
0 200 2465 0 1175850568 998079
0 201 2513 0 1175850569 608
0 202 2038 0 1175850569 2663
7(s) yang diberikan. Perintah harus mengembalikan nilai integer melalui keluaran standarnya

0 199 2241 0 1175850568 995598
0 200 2465 0 1175850568 998079
0 201 2513 0 1175850569 608
0 202 2038 0 1175850569 2663
6 dan masing-masing
0 199 2241 0 1175850568 995598
0 200 2465 0 1175850568 998079
0 201 2513 0 1175850569 608
0 202 2038 0 1175850569 2663
7 dapat berupa konstanta teks atau referensi
\set size 1000000
\set r random_zipfian(1, 100 * :size, 1.07)
\set k 1 + abs(hash(:r)) % :size
3
\set size 1000000
\set r random_zipfian(1, 100 * :size, 1.07)
\set k 1 + abs(hash(:r)) % :size
4 ke variabel. Jika Anda ingin menggunakan
0 199 2241 0 1175850568 995598
0 200 2465 0 1175850568 998079
0 201 2513 0 1175850569 608
0 202 2038 0 1175850569 2663
_7 yang dimulai dengan titik dua, tulis titik dua tambahan di awal
0 199 2241 0 1175850568 995598
0 200 2465 0 1175850568 998079
0 201 2513 0 1175850569 608
0 202 2038 0 1175850569 2663
7

Contoh

\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
\shell ________73_______6 [ ________73_______7 .. ]

Sama seperti

\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
_09, tetapi hasil dari perintah tersebut akan dibuang

Contoh

\shell command literal_argument :variable ::literal_starting_with_colon
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
_10
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
_11

Perintah-perintah ini membatasi awal dan akhir pipa pernyataan SQL. Dalam mode pipeline, pernyataan dikirimkan ke server tanpa menunggu hasil dari pernyataan sebelumnya. Lihat Bagian 34. 5 untuk lebih jelasnya. Mode pipeline memerlukan penggunaan protokol kueri yang diperluas

Operator bawaan

Tabel 289. Operator pgbench

Operator

Keterangan

Contoh

\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
12
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
13
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
12 → ________0_______12

Logis ATAU

\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
16 →
\set k1 1 + permute(:r, :size, :default_seed + 123)
\set k2 1 + permute(:r, :size, :default_seed + 321)
9

\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
12
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
19
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
12 → ________0_______12

Logis DAN

\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
22 →
\set size 1000000
\set r random_zipfian(1, 100 * :size, 1.07)
\set k 1 + abs(hash(:r)) % :size
0

\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
24
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
12 → ________0_______12

TIDAK logis

\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
27 →
\set k1 1 + permute(:r, :size, :default_seed + 123)
\set k2 1 + permute(:r, :size, :default_seed + 321)
9

\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
12
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
30 → ________0_______12

Tes nilai Boolean

\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
32 →
\set size 1000000
\set r random_zipfian(1, 100 * :size, 1.07)
\set k 1 + abs(hash(:r)) % :size
0

\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
34
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
35 → ________0_______12

Tes nullness

\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
37 →
\set k1 1 + permute(:r, :size, :default_seed + 123)
\set k2 1 + permute(:r, :size, :default_seed + 321)
9

0 199 2241 0 1175850568 995598
0 200 2465 0 1175850568 998079
0 201 2513 0 1175850569 608
0 202 2038 0 1175850569 2663
2
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
40
0 199 2241 0 1175850568 995598
0 200 2465 0 1175850568 998079
0 201 2513 0 1175850569 608
0 202 2038 0 1175850569 2663
2 → ________0_______12

Setara

\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
43 →
\set size 1000000
\set r random_zipfian(1, 100 * :size, 1.07)
\set k 1 + abs(hash(:r)) % :size
0

________73______2

\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
46
0 199 2241 0 1175850568 995598
0 200 2465 0 1175850568 998079
0 201 2513 0 1175850569 608
0 202 2038 0 1175850569 2663
2 → ________0_______12

Tidak sama

\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
49 →
\set k1 1 + permute(:r, :size, :default_seed + 123)
\set k2 1 + permute(:r, :size, :default_seed + 321)
9

0 199 2241 0 1175850568 995598
0 200 2465 0 1175850568 998079
0 201 2513 0 1175850569 608
0 202 2038 0 1175850569 2663
2
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
52
0 199 2241 0 1175850568 995598
0 200 2465 0 1175850568 998079
0 201 2513 0 1175850569 608
0 202 2038 0 1175850569 2663
2 → ________0_______12

Tidak sama

\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
55 →
\set size 1000000
\set r random_zipfian(1, 100 * :size, 1.07)
\set k 1 + abs(hash(:r)) % :size
0

0 199 2241 0 1175850568 995598
0 200 2465 0 1175850568 998079
0 201 2513 0 1175850569 608
0 202 2038 0 1175850569 2663
2
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
58
0 199 2241 0 1175850568 995598
0 200 2465 0 1175850568 998079
0 201 2513 0 1175850569 608
0 202 2038 0 1175850569 2663
2 → ________0_______12

Kurang dari

\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
61 →
\set size 1000000
\set r random_zipfian(1, 100 * :size, 1.07)
\set k 1 + abs(hash(:r)) % :size
0

0 199 2241 0 1175850568 995598
0 200 2465 0 1175850568 998079
0 201 2513 0 1175850569 608
0 202 2038 0 1175850569 2663
2
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
64
0 199 2241 0 1175850568 995598
0 200 2465 0 1175850568 998079
0 201 2513 0 1175850569 608
0 202 2038 0 1175850569 2663
2 → ________0_______12

Kurang dari atau sama dengan

\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
67 →
\set size 1000000
\set r random_zipfian(1, 100 * :size, 1.07)
\set k 1 + abs(hash(:r)) % :size
0

0 199 2241 0 1175850568 995598
0 200 2465 0 1175850568 998079
0 201 2513 0 1175850569 608
0 202 2038 0 1175850569 2663
2
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
70
0 199 2241 0 1175850568 995598
0 200 2465 0 1175850568 998079
0 201 2513 0 1175850569 608
0 202 2038 0 1175850569 2663
2 → ________0_______12

Lebih besar dari

\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
73 →
\set k1 1 + permute(:r, :size, :default_seed + 123)
\set k2 1 + permute(:r, :size, :default_seed + 321)
9

0 199 2241 0 1175850568 995598
0 200 2465 0 1175850568 998079
0 201 2513 0 1175850569 608
0 202 2038 0 1175850569 2663
2
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
76
0 199 2241 0 1175850568 995598
0 200 2465 0 1175850568 998079
0 201 2513 0 1175850569 608
0 202 2038 0 1175850569 2663
2 → ________0_______12

Lebih dari atau sama dengan

\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
79 →
\set k1 1 + permute(:r, :size, :default_seed + 123)
\set k2 1 + permute(:r, :size, :default_seed + 321)
9

\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
81
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
82
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
81 → ________0_______81

Sedikit demi sedikit ATAU

\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
85 →
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
86

\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
81
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
88
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
81 → ________0_______81

XOR bitwise

\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
_91 →
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
92

\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
81
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
94
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
81 → ________0_______81

Sedikit demi sedikit DAN

\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
_97 →
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
98

\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
_99
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
81 → ________0_______81

Bitwise TIDAK

\sleep 10 ms
_02 →
\sleep 10 ms
03

\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
81
\sleep 10 ms
05
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
81 → ________0_______81

Pergeseran bitwise ke kiri

\sleep 10 ms
_08 →
\sleep 10 ms
09

\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
81
\sleep 10 ms
11
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
81 → ________0_______81

Pergeseran bitwise ke kanan

\sleep 10 ms
_14 →
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
92

0 199 2241 0 1175850568 995598
0 200 2465 0 1175850568 998079
0 201 2513 0 1175850569 608
0 202 2038 0 1175850569 2663
2
\set aid random(1, 100000 * :scale)
\set bid random(1, 1 * :scale)
\set tid random(1, 10 * :scale)
\set delta random(-5000, 5000)
BEGIN;
UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid;
SELECT abalance FROM pgbench_accounts WHERE aid = :aid;
UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid;
UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid;
INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP);
END;
1
0 199 2241 0 1175850568 995598
0 200 2465 0 1175850568 998079
0 201 2513 0 1175850569 608
0 202 2038 0 1175850569 2663
2 → ________73_______2

Tambahan

\sleep 10 ms
_20 →
\sleep 10 ms
21

0 199 2241 0 1175850568 995598
0 200 2465 0 1175850568 998079
0 201 2513 0 1175850569 608
0 202 2038 0 1175850569 2663
2
\set aid random(1, 100000 * :scale)
\set bid random(1, 1 * :scale)
\set tid random(1, 10 * :scale)
\set delta random(-5000, 5000)
BEGIN;
UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid;
SELECT abalance FROM pgbench_accounts WHERE aid = :aid;
UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid;
UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid;
INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP);
END;
2
0 199 2241 0 1175850568 995598
0 200 2465 0 1175850568 998079
0 201 2513 0 1175850569 608
0 202 2038 0 1175850569 2663
2 → ________73_______2

Pengurangan

\sleep 10 ms
_26 →
\sleep 10 ms
27

0 199 2241 0 1175850568 995598
0 200 2465 0 1175850568 998079
0 201 2513 0 1175850569 608
0 202 2038 0 1175850569 2663
2
\set aid random(1, 100000 * :scale)
\set bid random(1, 1 * :scale)
\set tid random(1, 10 * :scale)
\set delta random(-5000, 5000)
BEGIN;
UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid;
SELECT abalance FROM pgbench_accounts WHERE aid = :aid;
UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid;
UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid;
INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP);
END;
3
0 199 2241 0 1175850568 995598
0 200 2465 0 1175850568 998079
0 201 2513 0 1175850569 608
0 202 2038 0 1175850569 2663
2 → ________73_______2

Perkalian

\sleep 10 ms
_32 →
\sleep 10 ms
33

0 199 2241 0 1175850568 995598
0 200 2465 0 1175850568 998079
0 201 2513 0 1175850569 608
0 202 2038 0 1175850569 2663
2
\set aid random(1, 100000 * :scale)
\set bid random(1, 1 * :scale)
\set tid random(1, 10 * :scale)
\set delta random(-5000, 5000)
BEGIN;
UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid;
SELECT abalance FROM pgbench_accounts WHERE aid = :aid;
UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid;
UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid;
INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP);
END;
4
0 199 2241 0 1175850568 995598
0 200 2465 0 1175850568 998079
0 201 2513 0 1175850569 608
0 202 2038 0 1175850569 2663
2 → ________73_______2

Pembagian (memotong hasil ke nol jika kedua input adalah bilangan bulat)

\sleep 10 ms
_38 →
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
98

\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
81
\sleep 10 ms
41
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
81 → ________0_______81

Modulo (sisa)

\sleep 10 ms
_44 →
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
98

\set aid random(1, 100000 * :scale)
\set bid random(1, 1 * :scale)
\set tid random(1, 10 * :scale)
\set delta random(-5000, 5000)
BEGIN;
UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid;
SELECT abalance FROM pgbench_accounts WHERE aid = :aid;
UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid;
UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid;
INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP);
END;
2
0 199 2241 0 1175850568 995598
0 200 2465 0 1175850568 998079
0 201 2513 0 1175850569 608
0 202 2038 0 1175850569 2663
2 → ________73_______2

Penyangkalan

\sleep 10 ms
_49 →
\sleep 10 ms
50


Fungsi Bawaan

Tabel 290. Fungsi pgbench

Fungsi

Keterangan

Contoh

\sleep 10 ms
_51 (
0 199 2241 0 1175850568 995598
0 200 2465 0 1175850568 998079
0 201 2513 0 1175850569 608
0 202 2038 0 1175850569 2663
2 ) → tipe yang sama dengan input

Nilai mutlak

\sleep 10 ms
_53 →
\sleep 10 ms
54

\sleep 10 ms
_55 (
0 199 2241 0 1175850568 995598
0 200 2465 0 1175850568 998079
0 201 2513 0 1175850569 608
0 202 2038 0 1175850569 2663
2 ) → tipe yang sama dengan input

Mencetak argumen ke stderr, dan mengembalikan argumen

\sleep 10 ms
_57 →
\sleep 10 ms
58

\sleep 10 ms
_59 (
0 199 2241 0 1175850568 995598
0 200 2465 0 1175850568 998079
0 201 2513 0 1175850569 608
0 202 2038 0 1175850569 2663
2 ) →
\sleep 10 ms
59

Cast untuk menggandakan

\sleep 10 ms
_62 →
\sleep 10 ms
63

\sleep 10 ms
_64 (
0 199 2241 0 1175850568 995598
0 200 2465 0 1175850568 998079
0 201 2513 0 1175850569 608
0 202 2038 0 1175850569 2663
2 ) →
\sleep 10 ms
59

Eksponensial (

\sleep 10 ms
67 dipangkatkan)

\sleep 10 ms
_68 →
\sleep 10 ms
69

\sleep 10 ms
_70 (
0 199 2241 0 1175850568 995598
0 200 2465 0 1175850568 998079
0 201 2513 0 1175850569 608
0 202 2038 0 1175850569 2663
2 [,
\sleep 10 ms
72 ] ) →
\sleep 10 ms
59 jika ada argumen ganda, selain itu
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
81

Memilih nilai terbesar di antara argumen

\sleep 10 ms
_75 →
\sleep 10 ms
76

\sleep 10 ms
_77 (
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
34 [,
\sleep 10 ms
79 ] ) →
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
81

Ini adalah alias untuk ________4______81

\sleep 10 ms
_82 →
\sleep 10 ms
83

\sleep 10 ms
_84 (
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
34 [,
\sleep 10 ms
79 ] ) →
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
81

Menghitung hash FNV-1a

\sleep 10 ms
_88 →
\sleep 10 ms
89

\sleep 10 ms
_81 (
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
34 [,
\sleep 10 ms
79 ] ) →
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
81

Menghitung hash MurmurHash2

\sleep 10 ms
_94 →
\sleep 10 ms
83

\sleep 10 ms
_96 (
0 199 2241 0 1175850568 995598
0 200 2465 0 1175850568 998079
0 201 2513 0 1175850569 608
0 202 2038 0 1175850569 2663
2 ) →
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
81

Mentransmisikan ke bilangan bulat

\sleep 10 ms
_99 →
\sleep 10 ms
21

\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
_01 (
0 199 2241 0 1175850568 995598
0 200 2465 0 1175850568 998079
0 201 2513 0 1175850569 608
0 202 2038 0 1175850569 2663
2 [,
\sleep 10 ms
72 ] ) →
\sleep 10 ms
59 jika ada argumen ganda, selain itu
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
81

Memilih nilai terkecil di antara argumen

\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
_06 →
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
07

\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
_08 (
0 199 2241 0 1175850568 995598
0 200 2465 0 1175850568 998079
0 201 2513 0 1175850569 608
0 202 2038 0 1175850569 2663
2 ) →
\sleep 10 ms
59

Logaritma alami

\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
_11 →
\sleep 10 ms
27

\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
_13 (
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
81,
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
81 ) →
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
81

Modulo (sisa)

\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
_17 →
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
18

\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
_19 (
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
20,
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
21 [,
\sleep 10 ms
79 ] ) →
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
81

Nilai yang diizinkan

\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
_20, dalam rentang
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
25. Ini adalah posisi baru
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
_20 (modulo
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
21) dalam permutasi pseudorandom bilangan bulat
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
28, diparameterisasi oleh
\sleep 10 ms
79, lihat di bawah

\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
_30 →
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
31

\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
_32 () →
\sleep 10 ms
59

Perkiraan nilai π

\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
_34 →
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
35

\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
_36 (
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
37,
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
38 ) →
\sleep 10 ms
59

\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
_40 (
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
37,
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
38 ) →
\sleep 10 ms
59

\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
_37 dipangkatkan menjadi
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
38

\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
_46 →
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
47

\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
_48 (
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
49,
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
50 ) →
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
81

Menghitung bilangan bulat acak yang terdistribusi secara seragam di

\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
52

\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
_53 →
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
54

\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
_55 (
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
49,
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
50,
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
58 ) →
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
81

Menghitung bilangan bulat acak yang terdistribusi secara eksponensial di

\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
52, lihat di bawah

\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
_61 →
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
54

\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
_63 (
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
49,
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
50,
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
58 ) →
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
81

Menghitung bilangan bulat acak terdistribusi Gaussian di

\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
52, lihat di bawah

\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
_69 →
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
54

\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
_71 (
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
49,
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
50,
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
58 ) →
\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
81

Menghitung bilangan bulat acak terdistribusi Zipfian di

\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
52, lihat di bawah

\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
_77 →
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
54

\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
_79 (
0 199 2241 0 1175850568 995598
0 200 2465 0 1175850568 998079
0 201 2513 0 1175850569 608
0 202 2038 0 1175850569 2663
2 ) →
\sleep 10 ms
59

Akar pangkat dua

\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
_82 →
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
83

Fungsi

\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
_48 menghasilkan nilai menggunakan distribusi yang seragam, yaitu semua nilai diambil dalam rentang yang ditentukan dengan probabilitas yang sama. Fungsi
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
_55,
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
63 dan
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
71 memerlukan parameter ganda tambahan yang menentukan bentuk distribusi yang tepat

  • Untuk distribusi eksponensial,

    \setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
    
    58 mengontrol distribusi dengan memotong distribusi eksponensial yang menurun dengan cepat pada
    \setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
    
    58, lalu memproyeksikan ke bilangan bulat di antara batas. Lebih tepatnya, dengan


    f(x) = exp(-parameter * (x-min)/(max-min+1)/(1-exp(-parameter))

    Maka nilai

    \setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
    
    20 antara
    \setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
    
    91 dan
    \setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
    
    92 inklusif ditarik dengan probabilitas.
    \setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
    
    _93

    Secara intuitif, semakin besar

    \setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
    
    _58, semakin sering nilai yang dekat dengan
    \setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
    
    91 diakses, dan semakin jarang nilai yang dekat dengan
    \setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
    
    92 diakses. Semakin dekat ke 0
    \setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
    
    _58 adalah, semakin datar (lebih seragam) distribusi akses. Perkiraan kasar dari distribusi adalah bahwa nilai 1% paling sering dalam rentang, mendekati
    \setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
    
    91, ditarik
    \setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
    
    58% dari waktu. Nilai
    \setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
    
    _58 harus benar-benar positif

  • Untuk distribusi Gaussian, interval dipetakan ke distribusi normal standar (kurva Gaussian berbentuk lonceng klasik) terpotong di

    \shell command literal_argument :variable ::literal_starting_with_colon
    
    01 di sebelah kiri dan
    \shell command literal_argument :variable ::literal_starting_with_colon
    
    02 di sebelah kanan. Nilai di tengah interval lebih cenderung ditarik. Tepatnya, jika
    \shell command literal_argument :variable ::literal_starting_with_colon
    
    _03 adalah fungsi distribusi kumulatif dari distribusi normal standar, dengan rata-rata
    \shell command literal_argument :variable ::literal_starting_with_colon
    
    04 didefinisikan sebagai
    \shell command literal_argument :variable ::literal_starting_with_colon
    
    05, dengan


    f(x) = PHI(2. 0 * parameter * (x - mu) / (maks - min + 1) /
    (2. 0 * PHI(parameter) - 1)

    maka nilai

    \setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
    
    20 antara
    \setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
    
    91 dan
    \setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
    
    92 inklusif ditarik dengan probabilitas.
    \shell command literal_argument :variable ::literal_starting_with_colon
    
    _09. Secara intuitif, semakin besar
    \setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
    
    _58, semakin sering nilai yang dekat dengan tengah interval ditarik, dan semakin jarang nilai yang dekat dengan batas
    \setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
    
    91 dan
    \setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
    
    92. Sekitar 67% nilai diambil dari tengah
    \shell command literal_argument :variable ::literal_starting_with_colon
    
    13, yaitu kerabat
    \shell command literal_argument :variable ::literal_starting_with_colon
    
    14 di sekitar rata-rata, dan 95% di tengah
    \shell command literal_argument :variable ::literal_starting_with_colon
    
    15, yaitu kerabat
    \shell command literal_argument :variable ::literal_starting_with_colon
    
    13 di sekitar rata-rata; . 0, 67% nilai diambil dari kuartal tengah (1. 0/4. 0) dari interval (i. e. , dari
    \shell command literal_argument :variable ::literal_starting_with_colon
    
    18 hingga
    \shell command literal_argument :variable ::literal_starting_with_colon
    
    19) dan 95% dari paruh tengah (
    \shell command literal_argument :variable ::literal_starting_with_colon
    
    20) interval (kuartil kedua dan ketiga). Nilai minimum yang diizinkan
    \setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
    
    _58 adalah 2. 0

  • \setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
    
    _71 menghasilkan distribusi Zipfian terbatas.
    \setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
    
    _58 mendefinisikan seberapa miring distribusinya. Semakin besar
    \setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
    
    58, semakin sering nilai yang lebih dekat ke awal interval diambil. Distribusi sedemikian rupa sehingga, dengan asumsi rentang dimulai dari 1, rasio probabilitas menggambar
    \shell command literal_argument :variable ::literal_starting_with_colon
    
    25 versus menggambar
    \shell command literal_argument :variable ::literal_starting_with_colon
    
    26 adalah ((________24_______25+1)/________24_______25)**________14_______58. Misalnya,
    \shell command literal_argument :variable ::literal_starting_with_colon
    
    _30 menghasilkan nilai
    \set ntellers 10 * :scale
    \set aid (1021 * random(1, 100000 * :scale)) % \
               (100000 * :scale) + 1
    \set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
    
    98 sekitar
    \shell command literal_argument :variable ::literal_starting_with_colon
    
    32 kali lebih sering daripada
    \set ntellers 10 * :scale
    \set aid (1021 * random(1, 100000 * :scale)) % \
               (100000 * :scale) + 1
    \set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
    
    92, yang dengan sendirinya dihasilkan
    \shell command literal_argument :variable ::literal_starting_with_colon
    
    34 kali lebih sering daripada
    \set ntellers 10 * :scale
    \set aid (1021 * random(1, 100000 * :scale)) % \
               (100000 * :scale) + 1
    \set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
    
    86, dan seterusnya

Catatan

Saat merancang tolok ukur yang memilih baris secara tidak seragam, perhatikan bahwa baris yang dipilih mungkin berkorelasi dengan data lain seperti ID dari urutan atau pengurutan baris fisik, yang dapat mendistorsi pengukuran kinerja

Untuk menghindari hal ini, Anda mungkin ingin menggunakan fungsi

\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
19, atau beberapa langkah tambahan lainnya dengan efek serupa, untuk mengocok baris yang dipilih dan menghapus korelasi tersebut

Fungsi hash

\sleep 10 ms
_77,
\sleep 10 ms
81 dan
\sleep 10 ms
84 menerima nilai input dan parameter seed opsional. Jika benih tidak diberikan nilai
\shell command literal_argument :variable ::literal_starting_with_colon
40 digunakan, yang diinisialisasi secara acak kecuali diatur oleh opsi baris perintah
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
6

\set size 1000000
\set r random_zipfian(1, :size, 1.07)
\set k 1 + permute(:r, :size)

Dalam beberapa kasus diperlukan beberapa distribusi berbeda yang tidak berkorelasi satu sama lain dan ini adalah saat parameter seed opsional berguna

\set k1 1 + permute(:r, :size, :default_seed + 123)
\set k2 1 + permute(:r, :size, :default_seed + 321)

Perilaku serupa juga dapat didekati dengan

\sleep 10 ms
77

\set size 1000000
\set r random_zipfian(1, 100 * :size, 1.07)
\set k 1 + abs(hash(:r)) % :size

Namun, karena

\sleep 10 ms
_77 menghasilkan tabrakan, beberapa nilai tidak akan dapat dijangkau dan nilai lainnya akan lebih sering dari yang diharapkan dari distribusi asli

Sebagai contoh, definisi lengkap dari transaksi mirip TPC-B bawaan adalah

\set aid random(1, 100000 * :scale)
\set bid random(1, 1 * :scale)
\set tid random(1, 10 * :scale)
\set delta random(-5000, 5000)
BEGIN;
UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid;
SELECT abalance FROM pgbench_accounts WHERE aid = :aid;
UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid;
UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid;
INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP);
END;

Skrip ini memungkinkan setiap iterasi transaksi untuk mereferensikan baris berbeda yang dipilih secara acak. (Contoh ini juga menunjukkan mengapa penting bagi setiap sesi klien untuk memiliki variabelnya sendiri — jika tidak, mereka tidak akan menyentuh baris yang berbeda secara independen. )

Pencatatan Per-Transaksi

Setiap baris dalam file log menjelaskan satu transaksi. Ini berisi bidang yang dipisahkan ruang berikut

\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon
_3

mengidentifikasi sesi klien yang menjalankan transaksi

\shell command literal_argument :variable ::literal_starting_with_colon
_45

menghitung berapa banyak transaksi yang telah dijalankan oleh sesi itu

\shell command literal_argument :variable ::literal_starting_with_colon
_46

waktu berlalu transaksi, dalam mikrodetik

\shell command literal_argument :variable ::literal_starting_with_colon
_47

mengidentifikasi file skrip yang digunakan untuk transaksi (berguna saat banyak skrip ditentukan dengan

\shell command literal_argument :variable ::literal_starting_with_colon
48 atau
\shell command literal_argument :variable ::literal_starting_with_colon
49)

\shell command literal_argument :variable ::literal_starting_with_colon
50

waktu penyelesaian transaksi, sebagai stempel waktu Unix-Epoch

\shell command literal_argument :variable ::literal_starting_with_colon
51

pecahan-detik bagian dari waktu penyelesaian transaksi, dalam mikrodetik

\shell command literal_argument :variable ::literal_starting_with_colon
52

penundaan mulai transaksi, yaitu perbedaan antara waktu mulai transaksi yang dijadwalkan dan waktu sebenarnya dimulai, dalam mikrodetik (hanya ada jika

\shell command literal_argument :variable ::literal_starting_with_colon
53 ditentukan)

\shell command literal_argument :variable ::literal_starting_with_colon
_54

jumlah percobaan ulang setelah kesalahan serialisasi atau deadlock selama transaksi (hanya ada jika

\shell command literal_argument :variable ::literal_starting_with_colon
55 tidak sama dengan satu)

Ketika

\shell command literal_argument :variable ::literal_starting_with_colon
53 dan
\shell command literal_argument :variable ::literal_starting_with_colon
57 digunakan,
\shell command literal_argument :variable ::literal_starting_with_colon
46 untuk transaksi yang dilewati akan dilaporkan sebagai
\shell command literal_argument :variable ::literal_starting_with_colon
59. Jika transaksi berakhir dengan kegagalan,
\shell command literal_argument :variable ::literal_starting_with_colon
46 akan dilaporkan sebagai
\shell command literal_argument :variable ::literal_starting_with_colon
61. Jika Anda menggunakan opsi
\shell command literal_argument :variable ::literal_starting_with_colon
_62,
\shell command literal_argument :variable ::literal_starting_with_colon
46 dari transaksi yang gagal akan dilaporkan sebagai
\shell command literal_argument :variable ::literal_starting_with_colon
64 atau
\shell command literal_argument :variable ::literal_starting_with_colon
65 tergantung pada jenis kegagalan (lihat untuk informasi lebih lanjut)

Berikut ini cuplikan file log yang dihasilkan dalam proses klien tunggal

0 199 2241 0 1175850568 995598
0 200 2465 0 1175850568 998079
0 201 2513 0 1175850569 608
0 202 2038 0 1175850569 2663

Contoh lain dengan

\shell command literal_argument :variable ::literal_starting_with_colon
66 dan
\shell command literal_argument :variable ::literal_starting_with_colon
67 (perhatikan kolom tambahan
\shell command literal_argument :variable ::literal_starting_with_colon
52)

\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
0

Dalam contoh ini, transaksi 82 ​​terlambat, karena latensinya (6. 173 ms) melebihi batas 5 ms. Dua transaksi berikutnya dilewati, karena sudah terlambat bahkan sebelum dimulai

Contoh berikut menampilkan cuplikan file log dengan kegagalan dan percobaan ulang, dengan jumlah maksimum percobaan diatur ke 10 (perhatikan kolom

\shell command literal_argument :variable ::literal_starting_with_colon
54 tambahan)

\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
_1

Jika opsi

\shell command literal_argument :variable ::literal_starting_with_colon
_62 digunakan, jenis kegagalan dilaporkan dalam
\shell command literal_argument :variable ::literal_starting_with_colon
46 seperti ini

\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
_2

Saat menjalankan pengujian panjang pada perangkat keras yang dapat menangani banyak transaksi, file log bisa menjadi sangat besar. Opsi

\shell command literal_argument :variable ::literal_starting_with_colon
_72 hanya dapat digunakan untuk mencatat sampel acak transaksi

Pencatatan Gabungan

Dengan opsi

\shell command literal_argument :variable ::literal_starting_with_colon
_73, format yang berbeda digunakan untuk file log. Setiap baris log menggambarkan satu interval agregasi. Ini berisi bidang yang dipisahkan ruang berikut

\shell command literal_argument :variable ::literal_starting_with_colon
74

waktu mulai interval, sebagai stempel waktu Unix-Epoch

\shell command literal_argument :variable ::literal_starting_with_colon
75

jumlah transaksi dalam interval

\shell command literal_argument :variable ::literal_starting_with_colon
76

jumlah latensi transaksi

\shell command literal_argument :variable ::literal_starting_with_colon
77

jumlah kuadrat latensi transaksi

\shell command literal_argument :variable ::literal_starting_with_colon
_78

latensi transaksi minimum

\shell command literal_argument :variable ::literal_starting_with_colon
79

latensi transaksi maksimum

\shell command literal_argument :variable ::literal_starting_with_colon
80

jumlah penundaan mulai transaksi (nol kecuali

\shell command literal_argument :variable ::literal_starting_with_colon
53 ditentukan)

\shell command literal_argument :variable ::literal_starting_with_colon
_82

jumlah kuadrat penundaan mulai transaksi (nol kecuali

\shell command literal_argument :variable ::literal_starting_with_colon
53 ditentukan)

\shell command literal_argument :variable ::literal_starting_with_colon
_84

penundaan mulai transaksi minimum (nol kecuali

\shell command literal_argument :variable ::literal_starting_with_colon
53 ditentukan)

\shell command literal_argument :variable ::literal_starting_with_colon
_86

penundaan mulai transaksi maksimum (nol kecuali

\shell command literal_argument :variable ::literal_starting_with_colon
53 ditentukan)

\shell command literal_argument :variable ::literal_starting_with_colon
59

jumlah transaksi yang dilewati karena akan terlambat dimulai (nol kecuali

\shell command literal_argument :variable ::literal_starting_with_colon
53 dan
\shell command literal_argument :variable ::literal_starting_with_colon
57 ditentukan)

\shell command literal_argument :variable ::literal_starting_with_colon
_91

jumlah transaksi yang dicoba ulang (nol kecuali

\shell command literal_argument :variable ::literal_starting_with_colon
55 tidak sama dengan satu)

\shell command literal_argument :variable ::literal_starting_with_colon
_54

jumlah percobaan ulang setelah kesalahan serialisasi atau kebuntuan (nol kecuali

\shell command literal_argument :variable ::literal_starting_with_colon
55 tidak sama dengan satu)

\shell command literal_argument :variable ::literal_starting_with_colon
_95

jumlah transaksi yang mendapat kesalahan serialisasi dan tidak dicoba lagi setelahnya (nol kecuali

\shell command literal_argument :variable ::literal_starting_with_colon
62 ditentukan)

\shell command literal_argument :variable ::literal_starting_with_colon
_97

jumlah transaksi yang mendapat kesalahan kebuntuan dan tidak dicoba lagi sesudahnya (nol kecuali

\shell command literal_argument :variable ::literal_starting_with_colon
62 ditentukan)

Berikut adalah beberapa contoh keluaran yang dihasilkan dengan opsi ini

\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
_3

Perhatikan bahwa meskipun format log biasa (tidak teragregasi) menunjukkan skrip mana yang digunakan untuk setiap transaksi, format teragregasi tidak. Oleh karena itu, jika Anda memerlukan data per skrip, Anda perlu mengumpulkan datanya sendiri

Laporan Per-Pernyataan

Laporan menampilkan coba lagi statistik hanya jika opsi

\shell command literal_argument :variable ::literal_starting_with_colon
55 tidak sama dengan 1

Semua nilai dihitung untuk setiap pernyataan yang dieksekusi oleh setiap klien dan dilaporkan setelah tolok ukur selesai

Untuk skrip default, hasilnya akan terlihat seperti ini

\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
_4

Contoh lain dari output untuk skrip default menggunakan tingkat isolasi transaksi default serializable (

\set size 1000000
\set r random_zipfian(1, :size, 1.07)
\set k 1 + permute(:r, :size)
00)

\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
5

Jika beberapa file skrip ditentukan, semua statistik dilaporkan secara terpisah untuk setiap file skrip

Perhatikan bahwa mengumpulkan informasi pengaturan waktu tambahan yang diperlukan untuk perhitungan latensi per pernyataan menambahkan beberapa overhead. Ini akan memperlambat kecepatan eksekusi rata-rata dan menurunkan TPS yang dihitung. Jumlah pelambatan sangat bervariasi tergantung pada platform dan perangkat keras. Membandingkan nilai TPS rata-rata dengan dan tanpa mengaktifkan pelaporan latensi adalah cara yang baik untuk mengukur apakah overhead waktu signifikan

Kegagalan dan Serialisasi/Deadlock Retries

    • kesalahan dalam mode inisialisasi (mis. g. kueri untuk membuat tabel untuk skrip bawaan gagal);

    • kesalahan sebelum memulai utas (mis. g. tidak dapat terhubung ke server database, kesalahan sintaks pada perintah meta, kegagalan pembuatan thread);

  • Kesalahan saat utas mengelola kliennya (mis. g. klien tidak dapat memulai koneksi ke server database / soket untuk menghubungkan klien ke server database menjadi tidak valid). Dalam kasus seperti itu, semua klien utas ini berhenti sementara utas lainnya terus bekerja

Jalankan klien dibatalkan jika terjadi kesalahan serius; . Selain itu, jika eksekusi perintah SQL atau meta gagal karena alasan selain kesalahan serialisasi atau kebuntuan, klien dibatalkan. Jika tidak, jika perintah SQL gagal dengan kesalahan serialisasi atau deadlock, klien tidak akan dibatalkan. Dalam kasus seperti itu, transaksi saat ini dibatalkan, yang juga mencakup pengaturan variabel klien seperti sebelum menjalankan transaksi ini (diasumsikan bahwa satu skrip transaksi hanya berisi satu transaksi; lihat informasi lebih lanjut). Transaksi dengan kesalahan serialisasi atau deadlock diulangi setelah rollback hingga selesai dengan sukses atau mencapai jumlah percobaan maksimum (ditentukan oleh opsi

\shell command literal_argument :variable ::literal_starting_with_colon
55) / waktu percobaan ulang maksimum (ditentukan oleh opsi
\shell command literal_argument :variable ::literal_starting_with_colon
57) / akhir tolok ukur (ditentukan oleh
\set size 1000000
\set r random_zipfian(1, :size, 1.07)
\set k 1 + permute(:r, :size)
_03 pilihan). Jika uji coba terakhir gagal, transaksi ini akan dilaporkan gagal tetapi klien tidak dibatalkan dan terus bekerja

Catatan

Tanpa menentukan opsi

\shell command literal_argument :variable ::literal_starting_with_colon
_55, transaksi tidak akan pernah dicoba lagi setelah kesalahan serialisasi atau kebuntuan karena nilai standarnya adalah 1. Gunakan jumlah percobaan yang tidak terbatas (
\set size 1000000
\set r random_zipfian(1, :size, 1.07)
\set k 1 + permute(:r, :size)
05) dan opsi
\shell command literal_argument :variable ::literal_starting_with_colon
57 untuk membatasi hanya waktu maksimum percobaan. Anda juga dapat menggunakan opsi
\set size 1000000
\set r random_zipfian(1, :size, 1.07)
\set k 1 + permute(:r, :size)
_03 untuk membatasi durasi benchmark dengan jumlah percobaan yang tidak terbatas

Berhati-hatilah saat mengulang skrip yang berisi banyak transaksi. skrip selalu dicoba ulang sepenuhnya, sehingga transaksi yang berhasil dapat dilakukan beberapa kali

Hati-hati saat mengulang transaksi dengan perintah shell. Berbeda dengan hasil perintah SQL, hasil perintah shell tidak digulung kembali, kecuali untuk nilai variabel dari perintah

\set ntellers 10 * :scale
\set aid (1021 * random(1, 100000 * :scale)) % \
           (100000 * :scale) + 1
\set divx CASE WHEN :x <> 0 THEN :y/:x ELSE NULL END
09

Latensi transaksi yang berhasil mencakup keseluruhan waktu eksekusi transaksi dengan pengembalian dan percobaan ulang. Latensi diukur hanya untuk transaksi dan perintah yang berhasil tetapi tidak untuk transaksi atau perintah yang gagal

Laporan utama berisi jumlah transaksi yang gagal. Jika opsi

\shell command literal_argument :variable ::literal_starting_with_colon
_55 tidak sama dengan 1, laporan utama juga berisi statistik yang terkait dengan percobaan ulang. jumlah total transaksi yang dicoba ulang dan jumlah total percobaan ulang. Laporan per skrip mewarisi semua bidang ini dari laporan utama. Laporan per pernyataan menampilkan statistik coba lagi hanya jika opsi
\shell command literal_argument :variable ::literal_starting_with_colon
55 tidak sama dengan 1

Jika Anda ingin mengelompokkan kegagalan menurut jenis dasar dalam log per transaksi dan agregasi, serta dalam laporan utama dan per skrip, gunakan opsi

\shell command literal_argument :variable ::literal_starting_with_colon
62. Jika Anda juga ingin membedakan semua kesalahan dan kegagalan (kesalahan tanpa mencoba ulang) menurut jenis termasuk batas percobaan ulang mana yang terlampaui dan berapa banyak yang terlampaui untuk kegagalan serialisasi/kebuntuan, gunakan opsi
\set size 1000000
\set r random_zipfian(1, :size, 1.07)
\set k 1 + permute(:r, :size)
12

Latihan yang baik

Pertama-tama, jangan pernah percaya tes apa pun yang berjalan hanya beberapa detik. Gunakan opsi

\set size 1000000
\set r random_zipfian(1, :size, 1.07)
\set k 1 + permute(:r, :size)
13 atau
\set size 1000000
\set r random_zipfian(1, :size, 1.07)
\set k 1 + permute(:r, :size)
14 untuk membuat lari berlangsung setidaknya beberapa menit, untuk meratakan kebisingan. Dalam beberapa kasus, Anda mungkin memerlukan waktu berjam-jam untuk mendapatkan angka yang dapat direproduksi. Sebaiknya coba uji coba beberapa kali, untuk mengetahui apakah nomor Anda dapat direproduksi atau tidak

Untuk skenario pengujian seperti TPC-B default, faktor skala inisialisasi (

\set size 1000000
\set r random_zipfian(1, :size, 1.07)
\set k 1 + permute(:r, :size)
15) setidaknya harus sebesar jumlah terbesar klien yang ingin Anda uji (
\set size 1000000
\set r random_zipfian(1, :size, 1.07)
\set k 1 + permute(:r, :size)
16); . Hanya ada
\set size 1000000
\set r random_zipfian(1, :size, 1.07)
\set k 1 + permute(:r, :size)
15 baris di tabel
\set size 1000000
\set r random_zipfian(1, :size, 1.07)
\set k 1 + permute(:r, :size)
18, dan setiap transaksi ingin memperbarui salah satunya, jadi
\set size 1000000
\set r random_zipfian(1, :size, 1.07)
\set k 1 + permute(:r, :size)
16 nilai lebih dari
\set size 1000000
\set r random_zipfian(1, :size, 1.07)
\set k 1 + permute(:r, :size)
15 niscaya akan mengakibatkan banyak transaksi diblokir menunggu transaksi lainnya

Skenario pengujian default juga cukup sensitif terhadap berapa lama sejak tabel diinisialisasi. akumulasi baris mati dan ruang mati dalam tabel mengubah hasil. Untuk memahami hasil, Anda harus melacak jumlah total pembaruan dan saat penyedot debu terjadi. Jika autovacuum diaktifkan, ini dapat mengakibatkan perubahan tak terduga dalam kinerja terukur

Bahasa apa yang digunakan PostgreSQL?

PostgreSQL adalah sistem manajemen basis data relasional atau RDBMS yang bersifat open source. Sistem manajemen basis data ini menggunakan bahasa kueri utama SQL , sama seperti MySQL.

Kapan menggunakan PostgreSQL?

PostgreSQL merupakan database yang cocok digunakan pada sistem berskala besar, karena dapat menangani banyak transaksi data sekaligus . Misalnya pada aplikasi berbasis GIS (Geographical Information System). Aplikasi GIS menyimpan dan mengolah banyak data spasial, atau pemetaan lokasi.

Apakah PostgreSQL gratis?

PostgreSQL adalah salah satu jenis database relasional atau biasa disebut Relation Database Management System (RDBMS) yang bersifat open source seperti halnya MySQL. Selain itu, PostgreSQL dapat mengolah data dalam tabel yang memiliki hubungan satu sama lain dan dapat digunakan gratis .

Jelaskan apa yang Anda ketahui tentang PostgreSQL?

PostgreSQL adalah sistem manajemen basis data relasional yang Anda dapat menggunakan dan mengembangkannya dalam sumber terbuka dan gratis. Software ini dapat berjalan di sistem operasi berbasis Linux seperti Debian, Ubuntu, Fedora, dan lainnya.