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 END6] 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 END7,
\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 END8,
\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 END9 dan
\sleep 10 ms0 yang dipilih secara acak. Skenario ini terinspirasi oleh tolok ukur TPC-B, tetapi sebenarnya bukan TPC-B, karena itulah namanya
\sleep 10 ms
_1\sleep 10 ms
_2\sleep 10 ms
_3\sleep 10 ms
_4\sleep 10 ms
_5\sleep 10 ms
_6\sleep 10 ms
_7
Jika Anda memilih
\sleep 10 ms8 bawaan [juga
\sleep 10 ms9], 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_colon0 bawaan [juga
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon1], hanya
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon2 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_colon3nomor unik yang mengidentifikasi sesi klien [dimulai dari nol]
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon4seed digunakan dalam fungsi permutasi hash dan pseudorandom secara default
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon5seed generator acak [kecuali ditimpa dengan
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon6]
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon7faktor skala saat ini
Perintah meta file skrip dimulai dengan garis miring terbalik [
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon8] 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_colon0]
Perintah ini dapat digunakan untuk mengakhiri kueri SQL, menggantikan titik koma akhir [
\shell command literal_argument :variable ::literal_starting_with_colon1]
Saat perintah
\shell command literal_argument :variable ::literal_starting_with_colon2 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_colon3 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_colon5] kolomnya disimpan ke dalam variabel yang dinamai menurut nama kolom, dan diawali dengan
\shell command literal_argument :variable ::literal_starting_with_colon3 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_colon2 dan
\shell command literal_argument :variable ::literal_starting_with_colon4 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_colon9, 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]] % :size0, konstanta bilangan bulat seperti
\set size 1000000 \set r random_zipfian[1, 100 * :size, 1.07] \set k 1 + abs[hash[:r]] % :size1, konstanta ganda seperti
\set size 1000000 \set r random_zipfian[1, 100 * :size, 1.07] \set k 1 + abs[hash[:r]] % :size2, referensi ke variabel
\set size 1000000 \set r random_zipfian[1, 100 * :size, 1.07] \set k 1 + abs[hash[:r]] % :size3
\set size 1000000 \set r random_zipfian[1, 100 * :size, 1.07] \set k 1 + abs[hash[:r]] % :size4, 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]] % :size0
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]] % :size5, 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 26630] 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 26631]. 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]] % :size3
\set size 1000000 \set r random_zipfian[1, 100 * :size, 1.07] \set k 1 + abs[hash[:r]] % :size4 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 26636 dengan
0 199 2241 0 1175850568 995598 0 200 2465 0 1175850568 998079 0 201 2513 0 1175850569 608 0 202 2038 0 1175850569 26637[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 26636 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 26637 dapat berupa konstanta teks atau referensi
\set size 1000000 \set r random_zipfian[1, 100 * :size, 1.07] \set k 1 + abs[hash[:r]] % :size3
\set size 1000000 \set r random_zipfian[1, 100 * :size, 1.07] \set k 1 + abs[hash[:r]] % :size4 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 26637
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 END12
\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 END13
\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 END12 →
________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 END16 →
\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 END12
\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 END19
\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 END12 →
________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 END22 →
\set size 1000000 \set r random_zipfian[1, 100 * :size, 1.07] \set k 1 + abs[hash[:r]] % :size0
\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 END24
\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 END12 →
________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 END27 →
\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 END12
\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 END30 →
________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 END32 →
\set size 1000000 \set r random_zipfian[1, 100 * :size, 1.07] \set k 1 + abs[hash[:r]] % :size0
\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 END34
\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 END35 →
________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 END37 →
\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 26632
\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 END40
0 199 2241 0 1175850568 995598 0 200 2465 0 1175850568 998079 0 201 2513 0 1175850569 608 0 202 2038 0 1175850569 26632 →
________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 END43 →
\set size 1000000 \set r random_zipfian[1, 100 * :size, 1.07] \set k 1 + abs[hash[:r]] % :size0
________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 END46
0 199 2241 0 1175850568 995598 0 200 2465 0 1175850568 998079 0 201 2513 0 1175850569 608 0 202 2038 0 1175850569 26632 →
________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 END49 →
\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 26632
\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 END52
0 199 2241 0 1175850568 995598 0 200 2465 0 1175850568 998079 0 201 2513 0 1175850569 608 0 202 2038 0 1175850569 26632 →
________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 END55 →
\set size 1000000 \set r random_zipfian[1, 100 * :size, 1.07] \set k 1 + abs[hash[:r]] % :size0
0 199 2241 0 1175850568 995598 0 200 2465 0 1175850568 998079 0 201 2513 0 1175850569 608 0 202 2038 0 1175850569 26632
\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 END58
0 199 2241 0 1175850568 995598 0 200 2465 0 1175850568 998079 0 201 2513 0 1175850569 608 0 202 2038 0 1175850569 26632 →
________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 END61 →
\set size 1000000 \set r random_zipfian[1, 100 * :size, 1.07] \set k 1 + abs[hash[:r]] % :size0
0 199 2241 0 1175850568 995598 0 200 2465 0 1175850568 998079 0 201 2513 0 1175850569 608 0 202 2038 0 1175850569 26632
\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 END64
0 199 2241 0 1175850568 995598 0 200 2465 0 1175850568 998079 0 201 2513 0 1175850569 608 0 202 2038 0 1175850569 26632 →
________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 END67 →
\set size 1000000 \set r random_zipfian[1, 100 * :size, 1.07] \set k 1 + abs[hash[:r]] % :size0
0 199 2241 0 1175850568 995598 0 200 2465 0 1175850568 998079 0 201 2513 0 1175850569 608 0 202 2038 0 1175850569 26632
\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 END70
0 199 2241 0 1175850568 995598 0 200 2465 0 1175850568 998079 0 201 2513 0 1175850569 608 0 202 2038 0 1175850569 26632 →
________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 END73 →
\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 26632
\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 END76
0 199 2241 0 1175850568 995598 0 200 2465 0 1175850568 998079 0 201 2513 0 1175850569 608 0 202 2038 0 1175850569 26632 →
________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 END79 →
\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 END81
\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 END82
\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 END81 →
________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 END85 →
\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 END86
\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 END81
\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 END88
\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 END81 →
________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 END92
\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 END81
\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 END94
\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 END81 →
________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 END98
\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 END81 →
________0_______81
Bitwise TIDAK
\sleep 10 ms_02 →
\sleep 10 ms03
\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 END81
\sleep 10 ms05
\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 END81 →
________0_______81
Pergeseran bitwise ke kiri
\sleep 10 ms_08 →
\sleep 10 ms09
\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 END81
\sleep 10 ms11
\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 END81 →
________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 END92
0 199 2241 0 1175850568 995598 0 200 2465 0 1175850568 998079 0 201 2513 0 1175850569 608 0 202 2038 0 1175850569 26632
\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 26632 →
________73_______2
Tambahan
\sleep 10 ms_20 →
\sleep 10 ms21
0 199 2241 0 1175850568 995598 0 200 2465 0 1175850568 998079 0 201 2513 0 1175850569 608 0 202 2038 0 1175850569 26632
\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 26632 →
________73_______2
Pengurangan
\sleep 10 ms_26 →
\sleep 10 ms27
0 199 2241 0 1175850568 995598 0 200 2465 0 1175850568 998079 0 201 2513 0 1175850569 608 0 202 2038 0 1175850569 26632
\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 26632 →
________73_______2
Perkalian
\sleep 10 ms_32 →
\sleep 10 ms33
0 199 2241 0 1175850568 995598 0 200 2465 0 1175850568 998079 0 201 2513 0 1175850569 608 0 202 2038 0 1175850569 26632
\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 26632 →
________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 END98
\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 END81
\sleep 10 ms41
\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 END81 →
________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 END98
\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 26632 →
________73_______2
Penyangkalan
\sleep 10 ms_49 →
\sleep 10 ms50
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 26632 ] → tipe yang sama dengan input
Nilai mutlak
\sleep 10 ms_53 →
\sleep 10 ms54
\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 26632 ] → tipe yang sama dengan input
Mencetak argumen ke stderr, dan mengembalikan argumen
\sleep 10 ms_57 →
\sleep 10 ms58
\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 26632 ] →
\sleep 10 ms59
Cast untuk menggandakan
\sleep 10 ms_62 →
\sleep 10 ms63
\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 26632 ] →
\sleep 10 ms59
Eksponensial [
\sleep 10 ms67 dipangkatkan]
\sleep 10 ms_68 →
\sleep 10 ms69
\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 26632 [,
\sleep 10 ms72 ] ] →
\sleep 10 ms59 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 END81
Memilih nilai terbesar di antara argumen
\sleep 10 ms_75 →
\sleep 10 ms76
\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 END34 [,
\sleep 10 ms79 ] ] →
\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 END81
Ini adalah alias untuk ________4______81
\sleep 10 ms_82 →
\sleep 10 ms83
\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 END34 [,
\sleep 10 ms79 ] ] →
\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 END81
Menghitung hash FNV-1a
\sleep 10 ms_88 →
\sleep 10 ms89
\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 END34 [,
\sleep 10 ms79 ] ] →
\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 END81
Menghitung hash MurmurHash2
\sleep 10 ms_94 →
\sleep 10 ms83
\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 26632 ] →
\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 END81
Mentransmisikan ke bilangan bulat
\sleep 10 ms_99 →
\sleep 10 ms21
\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 26632 [,
\sleep 10 ms72 ] ] →
\sleep 10 ms59 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 END81
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_colon07
\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 26632 ] →
\sleep 10 ms59
Logaritma alami
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon_11 →
\sleep 10 ms27
\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 END81,
\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 END81 ] →
\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 END81
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_colon18
\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_colon20,
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon21 [,
\sleep 10 ms79 ] ] →
\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 END81
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_colon25. 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_colon21] dalam permutasi pseudorandom bilangan bulat
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon28, diparameterisasi oleh
\sleep 10 ms79, 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_colon31
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon_32 [] →
\sleep 10 ms59
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_colon35
\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_colon37,
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon38 ] →
\sleep 10 ms59
\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_colon37,
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon38 ] →
\sleep 10 ms59
\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_colon38
\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_colon47
\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_colon49,
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon50 ] →
\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 END81
Menghitung bilangan bulat acak yang terdistribusi secara seragam di
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon52
\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_colon54
\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_colon49,
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon50,
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon58 ] →
\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 END81
Menghitung bilangan bulat acak yang terdistribusi secara eksponensial di
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon52, 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_colon54
\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_colon49,
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon50,
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon58 ] →
\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 END81
Menghitung bilangan bulat acak terdistribusi Gaussian di
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon52, 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_colon54
\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_colon49,
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon50,
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon58 ] →
\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 END81
Menghitung bilangan bulat acak terdistribusi Zipfian di
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon52, 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_colon54
\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 26632 ] →
\sleep 10 ms59
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_colon83
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_colon63 dan
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon71 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
_93Secara 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 positifUntuk 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_colon19, 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 ms81 dan
\sleep 10 ms84 menerima nilai input dan parameter seed opsional. Jika benih tidak diberikan nilai
\shell command literal_argument :variable ::literal_starting_with_colon40 digunakan, yang diinisialisasi secara acak kecuali diatur oleh opsi baris perintah
\setshell variable_to_be_assigned command literal_argument :variable ::literal_starting_with_colon6
\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 ms77
\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_colon48 atau
\shell command literal_argument :variable ::literal_starting_with_colon49]
\shell command literal_argument :variable ::literal_starting_with_colon50
waktu penyelesaian transaksi, sebagai stempel waktu Unix-Epoch
\shell command literal_argument :variable ::literal_starting_with_colon51
pecahan-detik bagian dari waktu penyelesaian transaksi, dalam mikrodetik
\shell command literal_argument :variable ::literal_starting_with_colon52
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_colon53 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_colon55 tidak sama dengan satu]
Ketika
\shell command literal_argument :variable ::literal_starting_with_colon53 dan
\shell command literal_argument :variable ::literal_starting_with_colon57 digunakan,
\shell command literal_argument :variable ::literal_starting_with_colon46 untuk transaksi yang dilewati akan dilaporkan sebagai
\shell command literal_argument :variable ::literal_starting_with_colon59. Jika transaksi berakhir dengan kegagalan,
\shell command literal_argument :variable ::literal_starting_with_colon46 akan dilaporkan sebagai
\shell command literal_argument :variable ::literal_starting_with_colon61. Jika Anda menggunakan opsi
\shell command literal_argument :variable ::literal_starting_with_colon_62,
\shell command literal_argument :variable ::literal_starting_with_colon46 dari transaksi yang gagal akan dilaporkan sebagai
\shell command literal_argument :variable ::literal_starting_with_colon64 atau
\shell command literal_argument :variable ::literal_starting_with_colon65 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_colon66 dan
\shell command literal_argument :variable ::literal_starting_with_colon67 [perhatikan kolom tambahan
\shell command literal_argument :variable ::literal_starting_with_colon52]
\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 END0
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_colon54 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_colon46 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_colon74
waktu mulai interval, sebagai stempel waktu Unix-Epoch
\shell command literal_argument :variable ::literal_starting_with_colon75
jumlah transaksi dalam interval
\shell command literal_argument :variable ::literal_starting_with_colon76
jumlah latensi transaksi
\shell command literal_argument :variable ::literal_starting_with_colon77
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_colon79
latensi transaksi maksimum
\shell command literal_argument :variable ::literal_starting_with_colon80
jumlah penundaan mulai transaksi [nol kecuali
\shell command literal_argument :variable ::literal_starting_with_colon53 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_colon53 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_colon53 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_colon53 ditentukan]
\shell command literal_argument :variable ::literal_starting_with_colon59
jumlah transaksi yang dilewati karena akan terlambat dimulai [nol kecuali
\shell command literal_argument :variable ::literal_starting_with_colon53 dan
\shell command literal_argument :variable ::literal_starting_with_colon57 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_colon55 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_colon55 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_colon62 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_colon62 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_colon55 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 END5
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_colon55] / waktu percobaan ulang maksimum [ditentukan oleh opsi
\shell command literal_argument :variable ::literal_starting_with_colon57] / 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_colon57 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 END09
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_colon55 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_colon62. 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