pgbench
pgbench â запÑÑÑиÑÑ ÑеÑÑ Ð¿ÑоизводиÑелÑноÑÑи Postgres Pro
СинÑакÑиÑ
pgbench -i [паÑамеÑÑ...] [имÑ_бд]
pgbench [паÑамеÑÑ...] [имÑ_бд]
ÐпиÑание
pgbench â ÑÑо пÑоÑÑÐ°Ñ Ð¿ÑогÑамма Ð´Ð»Ñ Ð·Ð°Ð¿ÑÑка ÑеÑÑов пÑоизводиÑелÑноÑÑи Postgres Pro. Ðна многокÑаÑно вÑполнÑÐµÑ Ð¾Ð´Ð½Ñ Ð¿Ð¾ÑледоваÑелÑноÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´, возможно в паÑаллелÑнÑÑ
ÑеанÑаÑ
Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
, а заÑем вÑÑиÑлÑÐµÑ ÑÑеднÑÑ ÑкоÑоÑÑÑ ÑÑанзакÑий (ÑиÑло ÑÑанзакÑий в ÑекÑндÑ). Ðо ÑмолÑÐ°Ð½Ð¸Ñ pgbench ÑеÑÑиÑÑÐµÑ ÑÑенаÑий, пÑимеÑно ÑооÑвеÑÑÑвÑÑÑий TPC-B, коÑоÑÑй ÑоÑÑÐ¾Ð¸Ñ Ð¸Ð· пÑÑи команд SELECT, UPDATE и INSERT в одной ÑÑанзакÑии. Ðднако Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе легко пÑоÑеÑÑиÑоваÑÑ Ð¸ дÑÑгие ÑÑенаÑии, напиÑав ÑобÑÑвеннÑе ÑкÑипÑÑ ÑÑанзакÑий.
ТипиÑнÑй вÑвод pgbench вÑглÑÐ´Ð¸Ñ Ñак:
transaction type: <builtin: TPC-B (sort of)> scaling factor: 10 query mode: simple number of clients: 10 number of threads: 1 number of transactions per client: 1000 number of transactions actually processed: 10000/10000 tps = 85.184871 (including connections establishing) tps = 85.296346 (excluding connections establishing)
РпеÑвÑÑ
ÑеÑÑи ÑÑÑокаÑ
вÑводÑÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð½ÐµÐºÐ¾ÑоÑÑÑ
ÑамÑÑ
важнÑÑ
паÑамеÑÑов. Ð ÑледÑÑÑей ÑÑÑоке показÑваеÑÑÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво вÑполненнÑÑ
и запланиÑованнÑÑ
ÑÑанзакÑий (ÑÑо бÑÐ´ÐµÑ Ð¿Ñоизведение ÑиÑла клиенÑов и ÑиÑла ÑÑанзакÑий Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ клиенÑа); ÑÑи колиÑеÑÑва бÑдÑÑ ÑавнÑ, еÑли ÑолÑко вÑполнение не завеÑÑиÑÑÑ Ð´Ð¾ÑÑоÑно. (Ð Ñежиме -T вÑводиÑÑÑ ÑолÑко ÑиÑло ÑакÑиÑеÑки вÑполненнÑÑ
ÑÑанзакÑий.) РпоÑледниÑ
двÑÑ
ÑÑÑокаÑ
показÑваеÑÑÑ ÑиÑло ÑÑанзакÑий в ÑекÑндÑ, подÑÑиÑанное Ñ ÑÑÑÑом и без ÑÑÑÑа вÑемени ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ðº ÑеÑвеÑÑ.
ÐÐ»Ñ Ð·Ð°Ð¿ÑÑкаемого по ÑмолÑÐ°Ð½Ð¸Ñ ÑеÑÑа Ñипа TPC-B ÑÑебÑеÑÑÑ Ð¿ÑедваÑиÑелÑно подгоÑовиÑÑ Ð¾Ð¿ÑеделÑннÑе ÑаблиÑÑ. ЧÑÐ¾Ð±Ñ ÑоздаÑÑ Ð¸ наполниÑÑ ÑÑи ÑаблиÑÑ, ÑледÑÐµÑ Ð·Ð°Ð¿ÑÑÑиÑÑ pgbench Ñ ÐºÐ»ÑÑом -i (иниÑиализиÑоваÑÑ). (ÐÑли Ð²Ñ Ð¿ÑименÑеÑе неÑÑандаÑÑнÑй ÑкÑипÑ, ÑÑо не ÑÑебÑеÑÑÑ, но Ñем не менее нÑжно подгоÑовиÑÑ ÐºÐ¾Ð½ÑигÑÑаÑиÑ, нÑжнÑÑ Ð²Ð°ÑÐµÐ¼Ñ ÑеÑÑÑ.) ÐапÑÑк иниÑиализаÑии вÑглÑÐ´Ð¸Ñ Ñак:
pgbench -i [дÑÑгие-паÑамеÑÑÑ]имÑ_базÑ
где имÑ_Ð±Ð°Ð·Ñ â Ð¸Ð¼Ñ Ñже ÑÑÑеÑÑвÑÑÑей базÑ, в коÑоÑой бÑÐ´ÐµÑ Ð¿ÑоводиÑÑÑÑ ÑеÑÑ. (ЧÑÐ¾Ð±Ñ ÑказаÑÑ, как подклÑÑиÑÑÑÑ Ðº ÑеÑвеÑÑ Ð±Ð°Ð· даннÑÑ
, Ð²Ñ Ñакже можеÑе добавиÑÑ Ð¿Ð°ÑамеÑÑÑ -h, -p и/или -U.)
Ðнимание
pgbench -i ÑоздаÑÑ ÑеÑÑÑе ÑаблиÑÑ pgbench_accounts, pgbench_branches, pgbench_history и pgbench_tellers, пÑедваÑиÑелÑно ÑниÑÑÐ¾Ð¶Ð°Ñ ÑÑÑеÑÑвÑÑÑие ÑаблиÑÑ Ñ ÑÑими именами. ÐÑли Ð²Ñ Ð²Ð´ÑÑг иÑполÑзÑеÑе ÑÑи имена в Ñвоей базе даннÑÑ
, обÑзаÑелÑно пеÑеклÑÑиÑеÑÑ Ð½Ð° дÑÑгÑÑ Ð±Ð°Ð·Ñ!
С «коÑÑÑиÑиенÑом маÑÑÑаба», по ÑмолÑÐ°Ð½Ð¸Ñ ÑавнÑм 1, ÑÑи ÑаблиÑÑ Ð¸Ð·Ð½Ð°ÑалÑно ÑодеÑÐ¶Ð°Ñ Ñакое колиÑеÑÑво ÑÑÑок:
table # of rows --------------------------------- pgbench_branches 1 pgbench_tellers 10 pgbench_accounts 100000 pgbench_history 0
ÐÑи ÑиÑла можно (и в болÑÑинÑÑве ÑлÑÑаев даже нÑжно) ÑвелиÑиÑÑ, воÑполÑзовавÑиÑÑ Ð¿Ð°ÑамеÑÑом -s (коÑÑÑиÑÐ¸ÐµÐ½Ñ Ð¼Ð°ÑÑÑаба). ÐÑи ÑÑом Ñакже Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·ÐµÐ½ клÑÑ -F (ÑакÑÐ¾Ñ Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ).
ÐодгоÑовив ÑÑебÑемÑÑ ÐºÐ¾Ð½ÑигÑÑаÑиÑ, можно запÑÑÑиÑÑ ÑеÑÑ Ð¿ÑоизводиÑелÑноÑÑи командой без -i, Ñо еÑÑÑ:
pgbench [паÑамеÑÑÑ]имÑ_базÑ
ÐÑакÑиÑеÑки во вÑеÑ
ÑлÑÑаÑÑ
, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ñе ÑезÑлÑÑаÑÑ, необÑ
одимо пеÑедаÑÑ ÐºÐ°ÐºÐ¸Ðµ-либо дополниÑелÑнÑе паÑамеÑÑÑ. Ðаиболее важнÑе паÑамеÑÑÑ: -c (ÑиÑло клиенÑов), -t (ÑиÑло ÑÑанзакÑий), -T (длиÑелÑноÑÑÑ) и -f (Ñайл Ñо ÑкÑипÑом). ÐолнÑй ÑпиÑок паÑамеÑÑов пÑиведÑн ниже.
ÐаÑамеÑÑÑ
СледÑÑÑий ÑпиÑок ÑазделÑн на ÑÑи подÑаздела: одни паÑамеÑÑÑ Ð¸ÑполÑзÑÑÑÑÑ Ð¿Ñи иниÑиализаÑии Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ , дÑÑгие пÑи пÑоведении ÑеÑÑиÑованиÑ, а ÑÑеÑÑи в Ð¾Ð±Ð¾Ð¸Ñ ÑлÑÑаÑÑ .
ÐаÑамеÑÑÑ Ð¸Ð½Ð¸ÑиализаÑии
pgbench пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑледÑÑÑие аÑгÑменÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ ÑÑÑоки Ð´Ð»Ñ Ð¸Ð½Ð¸ÑиализаÑии:
имÑ_бдУказÑÐ²Ð°ÐµÑ Ð¸Ð¼Ñ Ð±Ð°Ð·Ñ, в коÑоÑой бÑÐ´ÐµÑ Ð¿ÑоводиÑÑÑÑ ÑеÑÑ. ÐÑли Ð¸Ð¼Ñ Ð½Ðµ задано, Ñо иÑполÑзÑеÑÑÑ Ð·Ð½Ð°Ñение пеÑеменной окÑÑжениÑ
PGDATABASE. ÐÑли и пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð½Ðµ задана, Ñо в каÑеÑÑве имени Ð±Ð°Ð·Ñ Ð±ÑÐ´ÐµÑ Ð²Ð·ÑÑо Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑелÑ, под коÑоÑÑм оÑÑÑеÑÑвлÑеÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑение.-i--initializeТÑебÑеÑÑÑ Ð´Ð»Ñ Ð²Ñзова Ñежима иниÑиализаÑии.
-IÑÑапÑ_иниÑиализаÑии--init-steps=ÑÑапÑ_иниÑиализаÑииÐÑполнÑÑÑ ÑолÑко вÑбÑаннÑе из вÑÐµÑ Ð¾Ð±ÑÑнÑÑ Ð¿Ð¾Ð´Ð³Ð¾ÑовиÑелÑнÑÑ ÑÑапов. РпаÑамеÑÑе
ÑÑапÑ_иниÑиализаÑииоÑделÑнÑе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑÑапа вÑбиÑаÑÑ, какие ÑÑÐ°Ð¿Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð²ÑполнÑÑÑÑÑ. ÐÑе ÑÑÐ°Ð¿Ñ Ð²ÑполнÑÑÑÑÑ Ð² опÑеделÑнном поÑÑдке. СпиÑок ÑÑапов по ÑмолÑаниÑ:dtgvp. ÐолнÑй пеÑеÑÐµÐ½Ñ Ð¿Ð¾Ð´Ð³Ð¾ÑовиÑелÑнÑÑ ÑÑапов:d(Drop, ÑдалиÑÑ)УдалиÑÑ Ð²Ñе ÑÑÑеÑÑвÑÑÑие ÑаблиÑÑ pgbench.
t(create Tables, ÑоздаÑÑ ÑаблиÑÑ)СоздаÑÑ ÑаблиÑÑ, иÑполÑзÑемÑе ÑÑандаÑÑнÑм ÑÑенаÑием pgbench, а именно:
pgbench_accounts,pgbench_branches,pgbench_historyиpgbench_tellers.g(Generate data, ÑгенеÑиÑоваÑÑ Ð´Ð°Ð½Ð½Ñе)СгенеÑиÑоваÑÑ Ð´Ð°Ð½Ð½Ñе и загÑÑзиÑÑ Ð¸Ñ Ð² ÑÑандаÑÑнÑе ÑаблиÑÑ, заменив вÑе Ñже ÑÑÑеÑÑвÑÑÑие даннÑе.
v(Vacuum, оÑиÑÑка)ÐÑзÑваÑÑ
VACUUMÐ´Ð»Ñ ÑÑандаÑÑнÑÑ ÑаблиÑ.p(create Primary keys, ÑоздаÑÑ Ð¿ÐµÑвиÑнÑе клÑÑи)СоздаÑÑ Ð¿ÐµÑвиÑнÑе клÑÑи в ÑÑандаÑÑнÑÑ ÑаблиÑÐ°Ñ .
f(create Foreign keys, ÑоздаÑÑ Ð²Ð½ÐµÑние клÑÑи)СоздаÑÑ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ Ð²Ð½ÐµÑÐ½Ð¸Ñ ÐºÐ»ÑÑей Ð¼ÐµÐ¶Ð´Ñ ÑÑандаÑÑнÑми ÑаблиÑами. (ÐамеÑÑÑе, ÑÑо ÑÑо дейÑÑвие по ÑмолÑÐ°Ð½Ð¸Ñ Ð½Ðµ вÑполнÑеÑÑÑ.)
-FÑакÑоÑ_заполнениÑ--fillfactor=ÑакÑоÑ_заполнениÑСоздаÑÑ ÑаблиÑÑ
pgbench_accounts,pgbench_tellersиpgbench_branchesÑ Ð·Ð°Ð´Ð°Ð½Ð½Ñм ÑакÑоÑом заполнениÑ. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ â 100.-n--no-vacuumÐе вÑполнÑÑÑ Ð¾ÑиÑÑÐºÑ Ð²Ð¾ вÑÐµÐ¼Ñ Ð¸Ð½Ð¸ÑиализаÑии. (ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð²ÑклÑÑÐ°ÐµÑ ÑÑап иниÑиализаÑии
v, даже еÑли он бÑл Ñказан в-I.)-q--quietÐеÑеклÑÑиÑÑ Ð²Ñвод в немногоÑловнÑй Ñежим, когда вÑводиÑÑÑ ÑолÑко одно ÑообÑение о пÑогÑеÑÑе в 5 ÑекÑнд. Ð Ñежиме по ÑмолÑÐ°Ð½Ð¸Ñ Ð¾Ð´Ð½Ð¾ ÑообÑение вÑводиÑÑÑ Ð½Ð° каждÑе 100000 ÑÑÑок, пÑи ÑÑом за ÑекÑÐ½Ð´Ñ Ð¾Ð±ÑÑно вÑводиÑÑÑ Ð´Ð¾Ð²Ð¾Ð»Ñно много ÑÑÑок (оÑобенно на Ñ Ð¾ÑоÑем обоÑÑдовании).
-sкоÑÑÑиÑиенÑ_маÑÑÑаба--scale=коÑÑÑиÑиенÑ_маÑÑÑабаУмножиÑÑ ÑиÑло генеÑиÑÑемÑÑ ÑÑÑок на заданнÑй коÑÑÑиÑиенÑ. ÐапÑимеÑ, Ñ ÐºÐ»ÑÑом
-s 100в ÑаблиÑÑpgbench_accountsбÑдÑÑ Ð·Ð°Ð¿Ð¸ÑÐ°Ð½Ñ 10 000 000 ÑÑÑок. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ â 1. ÐÑи коÑÑÑиÑиенÑе, Ñавном 20 000 или болÑÑе, ÑÑолбÑÑ, ÑодеÑжаÑие иденÑиÑикаÑоÑÑ ÑÑеÑов (ÑÑолбÑÑaid), пеÑейдÑÑ Ðº болÑÑим ÑелÑм ÑиÑлам (ÑипÑbigint), ÑÑÐ¾Ð±Ñ Ð² Ð½Ð¸Ñ Ð¼Ð¾Ð³Ð»Ð¸ ÑмеÑÑиÑÑÑÑ Ð²Ñе возможнÑе знаÑÐµÐ½Ð¸Ñ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑов.--foreign-keysСоздаÑÑ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ Ð²Ð½ÐµÑÐ½Ð¸Ñ ÐºÐ»ÑÑей Ð¼ÐµÐ¶Ð´Ñ ÑÑандаÑÑнÑми ÑаблиÑами. (ÐÑÐ¾Ñ ÐºÐ»ÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÑÐµÑ ÑÑап
fк поÑледоваÑелÑноÑÑи подгоÑовиÑелÑнÑÑ ÑÑапов, еÑли он оÑÑÑÑÑÑвÑеÑ.)--index-tablespace=Ñабл_пÑоÑÑÑанÑÑво_индекÑовСоздаÑÑ Ð¸Ð½Ð´ÐµÐºÑÑ Ð² Ñказанном ÑаблиÑном пÑоÑÑÑанÑÑве, а не в пÑоÑÑÑанÑÑве по ÑмолÑаниÑ.
--tablespace=ÑаблиÑное_пÑоÑÑÑанÑÑвоСоздаÑÑ ÑаблиÑÑ Ð² Ñказанном ÑаблиÑном пÑоÑÑÑанÑÑве, а не в пÑоÑÑÑанÑÑве по ÑмолÑаниÑ.
--unlogged-tablesСоздаÑÑ Ð²Ñе ÑаблиÑÑ ÐºÐ°Ðº нежÑÑналиÑÑемÑе, а не как поÑÑоÑннÑе ÑаблиÑÑ.
ÐаÑамеÑÑÑ ÑеÑÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¿ÑоизводиÑелÑноÑÑи
pgbench пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑледÑÑÑие аÑгÑменÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ ÑÑÑоки Ð´Ð»Ñ ÑеÑÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¿ÑоизводиÑелÑноÑÑи:
-bимÑ_ÑкÑипÑа[@веÑ]--builtin=имÑ_ÑкÑипÑа[@веÑ]ÐобавлÑÐµÑ Ð² ÑпиÑок ÑкÑипÑов, коÑоÑÑе бÑдÑÑ Ð²ÑполнÑÑÑÑÑ, ÑказаннÑй вÑÑÑоеннÑй ÑкÑипÑ. Ð ÑиÑло вÑÑÑоеннÑÑ ÑкÑипÑов Ð²Ñ Ð¾Ð´ÑÑ
tpcb-like,simple-updateиselect-only. Также пÑинимаÑÑÑÑ Ð¾Ð´Ð½Ð¾Ð·Ð½Ð°ÑнÑе наÑала Ð¸Ñ Ð¸Ð¼Ñн. Со ÑпеÑиалÑнÑм именемlistпÑогÑамма вÑÐ²Ð¾Ð´Ð¸Ñ ÑпиÑок вÑÑÑоеннÑÑ ÑкÑипÑов и немедленно завеÑÑаеÑÑÑ.ÐополниÑелÑно можно задаÑÑ ÑелоÑиÑленнÑй Ð²ÐµÑ Ð¿Ð¾Ñле
@, менÑÑÑий веÑоÑÑноÑÑÑ Ð²ÑбоÑа ÑÑого ÑкÑипÑа оÑноÑиÑелÑно дÑÑÐ³Ð¸Ñ . Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð²ÐµÑ ÑÑиÑаеÑÑÑ ÑавнÑм 1. ÐодÑобноÑÑи ÑледÑÑÑ Ð½Ð¸Ð¶Ðµ.-cклиенÑÑ--client=клиенÑÑЧиÑло имиÑиÑÑемÑÑ ÐºÐ»Ð¸ÐµÐ½Ñов, Ñо еÑÑÑ ÑиÑло одновÑеменнÑÑ ÑеанÑов Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ . ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ â 1.
-C--connectУÑÑанавливаÑÑ Ð½Ð¾Ð²Ð¾Ðµ подклÑÑение Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ ÑÑанзакÑии вмеÑÑо одного Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ клиенÑа. ÐÑо полезно Ð´Ð»Ñ Ð¾ÑÐµÐ½Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¸Ð·Ð´ÐµÑжек подклÑÑений.
-d--debugÐÑводиÑÑ Ð¾ÑладоÑнÑе ÑообÑениÑ.
-DимÑ_пеÑеменной=знаÑение--define=имÑ_пеÑеменной=знаÑениеÐпÑеделиÑÑ Ð¿ÐµÑеменнÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑзоваÑелÑÑкого ÑкÑипÑа (Ñм. ниже). ÐаÑамеÑÑ
-DÐ¼Ð¾Ð¶ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÑÑÑÑÑ Ð½ÐµÐ¾Ð´Ð½Ð¾ÐºÑаÑно.-fимÑ_Ñайла[@веÑ]--file=имÑ_Ñайла[@веÑ]ÐобавиÑÑ Ð² ÑпиÑок вÑполнÑемÑÑ ÑкÑипÑов ÑкÑÐ¸Ð¿Ñ ÑÑанзакÑии из Ñайла
имÑ_Ñайла.ÐополниÑелÑно можно задаÑÑ ÑелоÑиÑленнÑй Ð²ÐµÑ Ð¿Ð¾Ñле
@, менÑÑÑий веÑоÑÑноÑÑÑ Ð²ÑбоÑа ÑÑого ÑкÑипÑа оÑноÑиÑелÑно дÑÑÐ³Ð¸Ñ . Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð²ÐµÑ ÑÑиÑаеÑÑÑ ÑавнÑм 1. (ÐÑли вам нÑжно пеÑедаÑÑ Ð¸Ð¼Ñ ÑкÑипÑа, ÑодеÑжаÑее Ñимвол@, добавÑÑе к ÑÐ°ÐºÐ¾Ð¼Ñ Ð¸Ð¼ÐµÐ½Ð¸ веÑ, ÑÑÐ¾Ð±Ñ Ð¸ÑклÑÑиÑÑ Ð½ÐµÐ¾Ð´Ð½Ð¾Ð·Ð½Ð°ÑноÑÑÑ Ð¿ÑоÑÑениÑ, напÑимеÑfilen@me@1.) ÐодÑобноÑÑи ÑледÑÑÑ Ð½Ð¸Ð¶Ðµ.-jпоÑоки--jobs=поÑокиЧиÑло ÑабоÑÐ¸Ñ Ð¿Ð¾Ñоков в pgbench. ÐÑполÑзоваÑÑ Ð½ÐµÑколÑÐºÐ¸Ñ Ð¿Ð¾Ñоков Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾ на многопÑоÑеÑÑоÑнÑÑ ÐºÐ¾Ð¼Ð¿ÑÑÑеÑÐ°Ñ . ÐлиенÑÑ ÑаÑпÑеделÑÑÑÑÑ Ð¿Ð¾ доÑÑÑпнÑм поÑокам ÑавномеÑно, наÑколÑко ÑÑо возможно. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ â 1.
-l--logÐапиÑаÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ каждой ÑÑанзакÑии в Ñайл пÑоÑокола. ÐодÑобноÑÑи опиÑÐ°Ð½Ñ Ð½Ð¸Ð¶Ðµ.
-LпÑедел--latency-limit=пÑеделТÑанзакÑии, пÑодолжаÑÑиеÑÑ Ð´Ð¾Ð»ÑÑе Ñказанного
пÑедела(в миллиÑекÑÐ½Ð´Ð°Ñ ), подÑÑиÑÑваÑÑÑÑ Ð¸ оÑмеÑаÑÑÑÑ Ð¾ÑделÑно, как опаздÑваÑÑие.Ð Ñежиме огÑаниÑÐµÐ½Ð¸Ñ ÑкоÑоÑÑи (
--rate=...) ÑÑанзакÑии, коÑоÑÑе оÑÑÑаÑÑ Ð¾Ñ Ð³ÑаÑика более Ñем на заданнÑйпÑедел(в мÑ) и поÑÑÐ¾Ð¼Ñ Ð½Ð¸ÐºÐ°Ðº не могÑÑ ÑложиÑÑÑÑ Ð² оÑведÑннÑй инÑеÑвал, не пеÑедаÑÑÑÑ ÑеÑвеÑÑ Ð²Ð¾Ð²Ñе. Ðни подÑÑиÑÑваÑÑÑÑ Ð¸ оÑмеÑаÑÑÑÑ Ð¾ÑделÑно как пÑопÑÑеннÑе.-MÑежим_запÑоÑов--protocol=Ñежим_запÑоÑовÐÑоÑокол, вÑбиÑаемÑй Ð´Ð»Ñ Ð¿ÐµÑедаÑи запÑоÑов на ÑеÑвеÑ:
simple: иÑполÑзоваÑÑ Ð¿ÑоÑÑой пÑоÑокол запÑоÑов.extended: иÑполÑзоваÑÑ ÑаÑÑиÑеннÑй пÑоÑокол запÑоÑов.prepared: иÑполÑзоваÑÑ ÑаÑÑиÑеннÑй пÑоÑокол запÑоÑов Ñ Ð¿Ð¾Ð´Ð³Ð¾ÑовленнÑми опеÑаÑоÑами.
Ð Ñежиме
preparedpgbench повÑоÑно иÑполÑзÑÐµÑ ÑезÑлÑÑÐ°Ñ ÑазбоÑа запÑоÑа, наÑÐ¸Ð½Ð°Ñ Ñо вÑоÑой иÑеÑаÑии, и поÑÑÐ¾Ð¼Ñ ÑабоÑÐ°ÐµÑ Ð±ÑÑÑÑее, Ñем в дÑÑÐ³Ð¸Ñ ÑÐµÐ¶Ð¸Ð¼Ð°Ñ .Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð²ÑбиÑаеÑÑÑ Ð¿ÑоÑÑой пÑоÑокол запÑоÑов. (Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº Ðлаве 51.)
-n--no-vacuumÐе пÑоизводиÑÑ Ð¾ÑиÑÑÐºÑ ÑÐ°Ð±Ð»Ð¸Ñ Ð¿ÐµÑед запÑÑком ÑеÑÑа. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼, еÑли Ð²Ñ Ð¿ÑименÑеÑе ÑобÑÑвеннÑй ÑÑенаÑий, не заÑÑагиваÑÑий ÑÑандаÑÑнÑе ÑаблиÑÑ
pgbench_accounts,pgbench_branches,pgbench_historyиpgbench_tellers.-N--skip-some-updatesÐапÑÑÑиÑÑ Ð²ÑÑÑоеннÑй ÑпÑоÑÑннÑй ÑкÑÐ¸Ð¿Ñ simple-update. ÐÑаÑкий ваÑÐ¸Ð°Ð½Ñ Ð·Ð°Ð¿Ð¸Ñи
-b simple-update.-PÑек--progress=ÑекÐÑводиÑÑ Ð¾ÑÑÑÑ Ð¾ пÑогÑеÑÑе ÑеÑез заданное ÑиÑло ÑекÑнд (
Ñек). ÐÑдаваемÑй оÑÑÑÑ Ð²ÐºÐ»ÑÑÐ°ÐµÑ Ð²ÑемÑ, пÑоÑедÑее Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñа запÑÑка, ÑкоÑоÑÑÑ (в TPS) Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñа пÑедÑдÑÑего оÑÑÑÑа, а Ñакже ÑÑеднее вÑÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ ÑÑанзакÑий и ÑÑандаÑÑное оÑклонение. Ð Ñежиме огÑаниÑÐµÐ½Ð¸Ñ ÑкоÑоÑÑи (-R) вÑÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ð²ÑÑиÑлÑеÑÑÑ Ð¾ÑноÑиÑелÑно назнаÑенного вÑемени запÑÑка ÑÑанзакÑии, а не ÑакÑиÑеÑкого вÑемени ÐµÑ Ð½Ð°Ñала, Ñак ÑÑо оно вклÑÑÐ°ÐµÑ Ð¸ ÑÑеднее вÑÐµÐ¼Ñ Ð¾ÑÑÑÐ°Ð²Ð°Ð½Ð¸Ñ Ð¾Ñ Ð³ÑаÑика.-r--report-latenciesÐÑводиÑÑ Ð¿Ð¾ завеÑÑении ÑеÑÑиÑовании ÑÑеднÑÑ Ð²ÑÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑов (вÑÐµÐ¼Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñ ÑоÑки зÑÐµÐ½Ð¸Ñ ÐºÐ»Ð¸ÐµÐ½Ñа) Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ командÑ. ÐодÑобноÑÑи опиÑÐ°Ð½Ñ Ð½Ð¸Ð¶Ðµ.
-RÑкоÑоÑÑÑ Ð¿ÐµÑедаÑи--rate=ÑкоÑоÑÑÑ Ð¿ÐµÑедаÑиÐÑполнÑÑÑ ÑÑанзакÑии, оÑиенÑиÑÑÑÑÑ Ð½Ð° заданнÑÑ ÑкоÑоÑÑÑ, а не макÑималÑно бÑÑÑÑо (по ÑмолÑаниÑ). СкоÑоÑÑÑ Ð·Ð°Ð´Ð°ÑÑÑÑ Ð² ÑÑанзакÑиÑÑ Ð² ÑекÑндÑ. ÐÑли Ð·Ð°Ð´Ð°Ð½Ð½Ð°Ñ ÑкоÑоÑÑÑ Ð¿ÑевÑÑÐ°ÐµÑ Ð¼Ð°ÐºÑималÑно возможнÑÑ, ÑÑо огÑаниÑение ÑкоÑоÑÑи не повлиÑÐµÑ Ð½Ð° ÑезÑлÑÑаÑÑ.
ÐÐ»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð½Ñжной ÑкоÑоÑÑи ÑÑанзакÑии запÑÑкаÑÑÑÑ Ñо ÑлÑÑайнÑми задеÑжками, имеÑÑими ÑаÑпÑеделение ÐÑаÑÑона. ÐÑи ÑÑом запланиÑованное вÑÐµÐ¼Ñ Ð·Ð°Ð¿ÑÑка оÑÑÑиÑÑваеÑÑÑ Ð¾Ñ Ð½Ð°ÑалÑного вÑемени, а не Ð¾Ñ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ Ð¿ÑедÑдÑÑей ÑÑанзакÑии. ÐÑо ознаÑаеÑ, ÑÑо еÑли какие-Ñо ÑÑанзакÑии оÑÑÑанÑÑ Ð¾Ñ Ð¸Ð·Ð½Ð°ÑалÑно ÑаÑÑÑиÑанного вÑемени завеÑÑениÑ, вÑÑ Ð¶Ðµ возможно, ÑÑо поÑледÑÑÑие нагонÑÑ Ð³ÑаÑик.
Ð Ñежиме огÑаниÑÐµÐ½Ð¸Ñ ÑкоÑоÑÑи вÑÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ ÑÑанзакÑий, вÑводимое по иÑогам ÑеÑÑиÑованиÑ, вÑÑиÑлÑеÑÑÑ, иÑÑ Ð¾Ð´Ñ Ð¸Ð· запланиÑованного вÑемени запÑÑка, Ñак ÑÑо в него Ð²Ñ Ð¾Ð´Ð¸Ñ Ð²ÑемÑ, коÑоÑое оÑеÑÐµÐ´Ð½Ð°Ñ ÑÑанзакÑÐ¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° бÑла ждаÑÑ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ Ð¿ÑедÑдÑÑей ÑÑанзакÑии. ÐÑо вÑÐµÐ¼Ñ Ð½Ð°Ð·ÑваеÑÑÑ Ð²Ñеменем оÑÐºÐ»Ð¾Ð½ÐµÐ½Ð¸Ñ Ð¾Ñ Ð³ÑаÑика, и его ÑÑеднее и макÑималÑное знаÑÐµÐ½Ð¸Ñ Ð²ÑводÑÑÑÑ Ð¾ÑделÑно. ÐÑÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ ÑÑанзакÑий Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñа Ð¸Ñ ÑакÑиÑеÑкого запÑÑка, Ñо еÑÑÑ Ð²ÑемÑ, поÑÑаÑенное на вÑполнение ÑÑанзакÑий в базе даннÑÑ , можно полÑÑиÑÑ, еÑли вÑÑеÑÑÑ Ð²ÑÐµÐ¼Ñ Ð¾ÑÐºÐ»Ð¾Ð½ÐµÐ½Ð¸Ñ Ð¾Ñ Ð³ÑаÑика из вÑемени Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ ÑÑанзакÑий.
ÐÑли огÑаниÑение
--latency-limitзадаÑÑÑÑ Ð²Ð¼ÐµÑÑе Ñ--rate, ÑÑанзакÑÐ¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð²ÐµÐ´Ð¾Ð¼Ð¾ не впиÑÑваÑÑÑÑ Ð² оÑведÑнное ей вÑемÑ, еÑли пÑедÑдÑÑÐ°Ñ ÑÑанзакÑÐ¸Ñ Ð·Ð°Ð²ÐµÑÑиÑÑÑ ÑлиÑком поздно, Ñак как ожидаемое вÑÐµÐ¼Ñ Ð¾ÐºÐ¾Ð½ÑÐ°Ð½Ð¸Ñ ÑÑанзакÑии оÑÑÑиÑÑваеÑÑÑ Ð¾Ñ Ð²Ñемени запÑÑка по гÑаÑикÑ. Такие ÑÑанзакÑии не пеÑедаÑÑÑÑ ÑеÑвеÑÑ, а пÑопÑÑкаÑÑÑÑ Ð¸ подÑÑиÑÑваÑÑÑÑ Ð¾ÑделÑно.ÐолÑÑое знаÑение оÑÐºÐ»Ð¾Ð½ÐµÐ½Ð¸Ñ Ð¾Ñ Ð³ÑаÑика ÑвидеÑелÑÑÑвÑÐµÑ Ð¾ Ñом, ÑÑо ÑиÑÑема не ÑÑÐ¿ÐµÐ²Ð°ÐµÑ Ð²ÑполнÑÑÑ ÑÑанзакÑии Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð¹ ÑкоÑоÑÑÑÑ Ð¸ вÑбÑаннÑм ÑиÑлом клиенÑов и поÑоков. Ðогда ÑÑеднее вÑÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ ÑÑанзакÑии пÑевÑÑÐ°ÐµÑ Ð·Ð°Ð¿Ð»Ð°Ð½Ð¸ÑованнÑй инÑеÑвал Ð¼ÐµÐ¶Ð´Ñ ÑÑанзакÑиÑми, ÐºÐ°Ð¶Ð´Ð°Ñ Ð¿Ð¾ÑледÑÑÑÐ°Ñ ÑÑанзакÑÐ¸Ñ Ð±ÑÐ´ÐµÑ Ð¾ÑÑÑаваÑÑ Ð¾Ñ Ð³ÑаÑика, и Ñем долÑÑе бÑÐ´ÐµÑ Ð²ÑполнÑÑÑÑÑ ÑеÑÑиÑование, Ñем болÑÑе бÑÐ´ÐµÑ Ð¾ÑÑÑавание. Ðогда ÑÑо наблÑдаеÑÑÑ, нÑжно ÑменÑÑиÑÑ ÑкоÑоÑÑÑ ÑÑанзакÑий.
-sкоÑÑÑиÑиенÑ_маÑÑÑаба--scale=коÑÑÑиÑиенÑ_маÑÑÑабаÐоказаÑÑ Ð·Ð°Ð´Ð°Ð½Ð½Ñй коÑÑÑиÑÐ¸ÐµÐ½Ñ Ð¼Ð°ÑÑÑаба в вÑводе pgbench. ÐÐ»Ñ Ð²ÑÑÑоеннÑÑ ÑеÑÑов ÑÑо не ÑÑебÑеÑÑÑ; коÑÑекÑнÑй коÑÑÑиÑÐ¸ÐµÐ½Ñ Ð¼Ð°ÑÑÑаба бÑÐ´ÐµÑ Ð¿Ð¾Ð»ÑÑен в ÑезÑлÑÑаÑе подÑÑÑÑа ÑÑÑок в ÑаблиÑе
pgbench_branches. Ðднако пÑи иÑполÑзовании ÑолÑко неÑÑандаÑÑнÑÑ ÑеÑÑов (запÑÑкаемÑÑ Ñ ÐºÐ»ÑÑом-f) без ÑÑого паÑамеÑÑа в каÑеÑÑве коÑÑÑиÑиенÑа маÑÑÑаба бÑÐ´ÐµÑ Ð²ÑводиÑÑÑÑ 1.-S--select-onlyÐапÑÑÑиÑÑ Ð²ÑÑÑоеннÑй ÑкÑÐ¸Ð¿Ñ select-only (ÑолÑко вÑбоÑка). ÐÑаÑкий ваÑÐ¸Ð°Ð½Ñ Ð·Ð°Ð¿Ð¸Ñи
-b select-only.-tÑÑанзакÑии--transactions=ÑÑанзакÑииЧиÑло ÑÑанзакÑий, коÑоÑÑе бÑдÑÑ Ð²ÑполнÑÑÑÑÑ ÐºÐ°Ð¶Ð´Ñм клиенÑом (по ÑмолÑÐ°Ð½Ð¸Ñ 10).
-TÑекÑндÑ--time=ÑекÑндÑÐÑполнÑÑÑ ÑеÑÑ Ñ Ð¾Ð³ÑаниÑением по вÑемени (в ÑекÑÐ½Ð´Ð°Ñ ), а не по ÑиÑÐ»Ñ ÑÑанзакÑий Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ клиенÑа. ÐаÑамеÑÑÑ
-tи-TÑвлÑÑÑÑÑ Ð²Ð·Ð°Ð¸Ð¼Ð¾Ð¸ÑклÑÑаÑÑими.-v--vacuum-allÐÑиÑаÑÑ Ð²Ñе ÑеÑÑÑе ÑÑандаÑÑнÑе ÑаблиÑÑ Ð¿ÐµÑед запÑÑком ÑеÑÑа. Ðез паÑамеÑÑов
-nи-vpgbench бÑÐ´ÐµÑ Ð¾ÑиÑаÑÑ Ð¾Ñ ÑÑаÑÑÑ Ð·Ð°Ð¿Ð¸Ñей ÑаблиÑÑpgbench_tellersиpgbench_branches, а Ñакже опÑÑÑоÑаÑÑpgbench_history.--aggregate-interval=ÑекÑндÑÐлиÑелÑноÑÑÑ Ð¸Ð½ÑеÑвала агÑегаÑии (в ÑекÑÐ½Ð´Ð°Ñ ). ÐÐ¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ ÑолÑко Ñ ÐºÐ»ÑÑом
-l. С даннÑм паÑамеÑÑом в пÑоÑокол вÑводиÑÑÑ Ñводка по инÑеÑвалам, как опиÑано ниже.--log-prefix=пÑеÑикÑÐадаÑÑ Ð¿ÑеÑÐ¸ÐºÑ Ð¸Ð¼Ñн Ñайлов Ð´Ð»Ñ Ñайлов пÑоÑоколов, ÑоздаваемÑÑ Ñ ÐºÐ»ÑÑом
--log. ÐÑеÑÐ¸ÐºÑ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ âpgbench_log.--progress-timestampÐÑи оÑобÑажении пÑогÑеÑÑа (Ñ Ð¿Ð°ÑамеÑÑом
-P) вÑводиÑÑ ÑекÑÑее вÑÐµÐ¼Ñ (в ÑоÑмаÑе Unix), а не колиÑеÑÑво ÑекÑнд Ð¾Ñ Ð½Ð°Ñала запÑÑка. ÐÑÐµÐ¼Ñ Ð·Ð°Ð´Ð°ÑÑÑÑ Ð² ÑекÑÐ½Ð´Ð°Ñ Ñ ÑоÑноÑÑÑÑ Ð´Ð¾ миллиÑекÑнд. ÐÑо Ð¿Ð¾Ð¼Ð¾Ð³Ð°ÐµÑ ÑÑавниваÑÑ Ð¶ÑÑналÑ, запиÑÑваемÑе ÑазнÑми ÑÑедÑÑвами.--random-seed=ÐÐТРÐÐÐÐУÑÑановиÑÑ Ð·Ð°ÑÑÐ°Ð²ÐºÑ Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑаÑоÑа ÑлÑÑайнÑÑ ÑиÑел. ÐниÑиализиÑÑÐµÑ Ð³ÐµÐ½ÐµÑаÑÐ¾Ñ ÑлÑÑайнÑÑ ÑиÑел, коÑоÑÑй заÑем вÑдаÑÑ Ð¿Ð¾ÑледоваÑелÑноÑÑÑ Ð½Ð°ÑалÑнÑÑ ÑоÑÑоÑний оÑделÑнÑÑ Ð³ÐµÐ½ÐµÑаÑоÑов Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ поÑока.
ÐÐТРÐÐÐÐÐ¼Ð¾Ð¶ÐµÑ Ð¿ÑинимаÑÑ ÑледÑÑÑие знаÑениÑ:time(по ÑмолÑаниÑ, заÑÑавка базиÑÑеÑÑÑ Ð½Ð° ÑекÑÑем вÑемени),rand(задейÑÑвоваÑÑ Ð½Ð°Ð´ÑжнÑй генеÑаÑÐ¾Ñ ÑлÑÑайнÑÑ ÑиÑел или вÑдаÑÑ Ð¾ÑибкÑ, еÑли он оÑÑÑÑÑÑвÑеÑ) или беззнаковое деÑÑÑиÑное ÑиÑло. ÐенеÑаÑÐ¾Ñ ÑлÑÑайнÑÑ ÑиÑел Ð¼Ð¾Ð¶ÐµÑ Ð²ÑзÑваÑÑÑÑ Ñвно из ÑкÑипÑа pgbench (ÑÑнкÑиÑмиrandom...) или неÑвно (напÑимеÑ, Ð´Ð»Ñ Ð¿Ð»Ð°Ð½Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑÑанзакÑий Ñ ÐºÐ»ÑÑом--rate). Ð ÑлÑÑае ÑÑÑановки знаÑÐµÐ½Ð¸Ñ ÑвнÑм обÑазом оно вÑводиÑÑÑ Ð² ÑеÑминале. ÐÑбое знаÑение, допÑÑÑимое в каÑеÑÑвеÐÐТРÐÐÐÐ, можно Ñакже задаÑÑ Ð² пеÑеменной окÑÑжениÑPGBENCH_RANDOM_SEED. ЧÑÐ¾Ð±Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ð°Ñ Ð·Ð°ÑÑавка пÑименÑлаÑÑ Ð²Ð¾ вÑÐµÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½ÑÑ ÑлÑÑаÑÑ Ð¸ÑполÑзованиÑ, задайÑе ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¿ÐµÑвÑм или ÑÑÑановиÑе пеÑеменнÑÑ Ð¾ÐºÑÑжениÑ.Явное Ñказание опÑеделÑнной заÑÑавки позволÑÐµÑ ÑоÑно воÑпÑоизвеÑÑи вÑполнение
pgbenchв ÑаÑÑи иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑлÑÑайнÑÑ ÑиÑел. Так как ÑлÑÑайное ÑоÑÑоÑние поддеÑживаеÑÑÑ Ð²Ð½ÑÑÑи поÑока, ÑÑо ознаÑаеÑ, ÑÑо вÑполнениеpgbenchпÑи одинаковÑÑ Ð·Ð°Ð¿ÑÑÐºÐ°Ñ Ð¿Ð¾Ð²ÑоÑиÑÑÑ Ð² ÑоÑноÑÑи, еÑли один поÑок иÑполÑзÑеÑÑÑ Ð¾Ð´Ð½Ð¸Ð¼ клиенÑом и оÑÑÑÑÑÑвÑÑÑ Ð²Ð½ÐµÑние завиÑимоÑÑи или завиÑимоÑÑи Ð¾Ñ Ð´Ð°Ð½Ð½ÑÑ . Со ÑÑаÑиÑÑиÑеÑкой ÑоÑки зÑÐµÐ½Ð¸Ñ ÑоÑное воÑпÑоизведение вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð½ÐµÐ¶ÐµÐ»Ð°ÑелÑно, Ñак как ÑÑо Ð¼Ð¾Ð¶ÐµÑ ÑкÑÑÑÑ Ð²Ð°ÑиаÑивноÑÑÑ Ð¿ÑоизводиÑелÑноÑÑи или показаÑÑ Ð·Ð°Ð²ÑÑеннÑÑ ÑкоÑоÑÑÑ, напÑÐ¸Ð¼ÐµÑ Ð¸Ð·-за Ð¿Ð¾Ð¿Ð°Ð´Ð°Ð½Ð¸Ñ Ð² одни и Ñе же ÑÑÑаниÑÑ Ð´Ð°Ð½Ð½ÑÑ . Ðднако ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾ÑÐµÐ½Ñ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾ Ð´Ð»Ñ Ð¾Ñладки, напÑимеÑ, Ð´Ð»Ñ Ð¿Ð¾Ð²ÑоÑÐµÐ½Ð¸Ñ Ñедкого ÑÑенаÑиÑ, пÑиводÑÑего к оÑибке. ÐÑполÑзÑйÑе даннÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð¾Ð±Ð´Ñманно.--sampling-rate=ÑкоÑоÑÑÑ Ð¿ÐµÑедаÑиЧаÑÑоÑа вÑбоÑки Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи даннÑÑ Ð² пÑоÑокол, изменÑÑ ÐºÐ¾ÑоÑÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ ÑменÑÑиÑÑ Ð¾Ð±ÑÑм пÑоÑокола. ÐÑи Ñказании ÑÑого паÑамеÑÑа в пÑоÑокол вÑводиÑÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ ÑолÑко о заданном пÑоÑенÑе ÑÑанзакÑий. Со знаÑением 1.0 в нÑм бÑдÑÑ Ð¾ÑмеÑаÑÑÑÑ Ð²Ñе ÑÑанзакÑии, а Ñ 0.05 ÑолÑко 5%.
ÐбÑабаÑÑÐ²Ð°Ñ Ð¿ÑоÑокол, не забÑдÑÑе ÑÑеÑÑÑ ÑаÑÑоÑÑ Ð²ÑбоÑки. ÐапÑимеÑ, вÑÑиÑлÑÑ ÑкоÑоÑÑÑ (TPS), вам нÑжно бÑÐ´ÐµÑ ÑооÑвеÑÑÑвенно ÑмножиÑÑ ÑодеÑжаÑиеÑÑ Ð² нÑм ÑиÑла (напÑимеÑ, Ñ ÑаÑÑоÑой вÑбоÑки 0.01 Ð²Ñ Ð¿Ð¾Ð»ÑÑиÑе ÑолÑко 1/100 ÑакÑиÑеÑкой ÑкоÑоÑÑи).
ÐбÑие паÑамеÑÑÑ
pgbench пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑледÑÑÑие обÑие аÑгÑменÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ ÑÑÑоки:
-hкомпÑÑÑеÑ--host=компÑÑÑеÑÐдÑÐµÑ ÑеÑвеÑа баз даннÑÑ
-pпоÑÑ--port=поÑÑÐÐ¾Ð¼ÐµÑ Ð¿Ð¾ÑÑа ÑеÑвеÑа баз даннÑÑ
-UимÑ_полÑзоваÑелÑ--username=имÑ_полÑзоваÑелÑÐÐ¼Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ
-V--versionÐÑвеÑÑи веÑÑÐ¸Ñ pgbench и завеÑÑиÑÑÑÑ.
-?--helpÐÑвеÑÑи ÑпÑÐ°Ð²ÐºÑ Ð¾Ð± аÑгÑменÑÐ°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ ÑÑÑоки pgbench и завеÑÑиÑÑÑÑ.
Ðод завеÑÑениÑ
Ð ÑлÑÑае ÑÑпеÑного вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑÑÑ ÐºÐ¾Ð´ 0. Ðод завеÑÑÐµÐ½Ð¸Ñ 1 ÑказÑÐ²Ð°ÐµÑ Ð½Ð° ÑÑаÑиÑнÑе пÑоблемÑ, напÑимеÑ, оÑибки в паÑамеÑÑÐ°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ ÑÑÑоки. ÐÑи возникновении оÑибок во вÑÐµÐ¼Ñ Ð²ÑполнениÑ, напÑÐ¸Ð¼ÐµÑ Ð¿Ñи обÑаÑении к базе даннÑÑ Ð¸Ð»Ð¸ вÑполнении ÑкÑипÑа, вÑдаÑÑÑÑ ÐºÐ¾Ð´ завеÑÑÐµÐ½Ð¸Ñ 2. РпоÑледнем ÑлÑÑае pgbench вÑÐ²ÐµÐ´ÐµÑ ÑаÑÑиÑнÑе ÑезÑлÑÑаÑÑ.
ÐеÑеменнÑе окÑÑжениÑ
PGDATABASEPGHOSTPGPORTPGUSERÐаÑамеÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ.
Ðак и болÑÑинÑÑво дÑÑÐ³Ð¸Ñ ÑÑÐ¸Ð»Ð¸Ñ Postgres Pro, пÑиложение Ñакже иÑполÑзÑÐµÑ Ð¿ÐµÑеменнÑе окÑÑжениÑ, поддеÑживаемÑе libpq (Ñм. Раздел 32.14).
ÐÑимеÑаниÑ
Ðаково ÑодеÑжание «ÑÑанзакÑии», коÑоÑÑÑ Ð²ÑполнÑÐµÑ pgbench?
ÐÑогÑамма pgbench вÑполнÑÐµÑ ÑеÑÑовÑе ÑкÑипÑÑ, вÑбиÑÐ°Ñ Ð¸Ñ
ÑлÑÑайнÑм обÑазом из заданного ÑпиÑка. ÐÑо могÑÑ Ð±ÑÑÑ ÐºÐ°Ðº вÑÑÑоеннÑе ÑкÑипÑÑ, задаваемÑе аÑгÑменÑами -b, Ñак и полÑзоваÑелÑÑкие, задаваемÑе аÑгÑменÑами -f. ÐÐ»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑкÑипÑа можно задаÑÑ Ð¾ÑноÑиÑелÑнÑй Ð²ÐµÑ Ð¿Ð¾Ñле @, ÑÑÐ¾Ð±Ñ ÑкоÑÑекÑиÑоваÑÑ Ð²ÐµÑоÑÑноÑÑÑ ÐµÐ³Ð¾ вÑбоÑа. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð²ÐµÑ ÑÑиÑаеÑÑÑ ÑавнÑм 1. СкÑипÑÑ Ñ Ð²ÐµÑом 0 игноÑиÑÑÑÑÑÑ.
СÑандаÑÑнÑй вÑÑÑоеннÑй ÑкÑÐ¸Ð¿Ñ (Ñакже вÑзÑваемÑй Ñ ÐºÐ»ÑÑом -b tpcb-like) вÑдаÑÑ ÑÐµÐ¼Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´ в ÑÑанзакÑии Ñо ÑлÑÑайно вÑбÑаннÑми aid, tid, bid и delta. Ðго ÑÑенаÑий напиÑан по моÑивам ÑеÑÑа пÑоизводиÑелÑноÑÑи TPC-B, но ÑÑо не ÑобÑÑвенно TPC-B, поÑÐ¾Ð¼Ñ Ð¾Ð½ назÑваеÑÑÑ Ñак.
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;
ÐÑи вÑбоÑе вÑÑÑоенного ÑкÑипÑа simple-update (или Ñказании -N) Ñаги 4 и 5 иÑклÑÑаÑÑÑÑ Ð¸Ð· ÑÑанзакÑии. ÐÑо позволÑÐµÑ Ð¸Ð·Ð±ÐµÐ¶Ð°ÑÑ ÐºÐ¾Ð½ÐºÑÑенÑии пÑи обÑаÑении к ÑÑим ÑаблиÑам, но ÑеÑÑ ÑÑановиÑÑÑ ÐµÑÑ Ð¼ÐµÐ½ÐµÐµ поÑ
ожим на TPC-B.
ÐÑи вÑбоÑе вÑÑÑоенного ÑеÑÑа select-only (или Ñказании -S) вÑполнÑеÑÑÑ ÑолÑко SELECT.
ÐолÑзоваÑелÑÑкие ÑкÑипÑÑ
ÐÑогÑамма pgbench поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð·Ð°Ð¿ÑÑк полÑзоваÑелÑÑкиÑ
ÑÑенаÑиев оÑенки пÑоизводиÑелÑноÑÑи, позволÑÑ Ð·Ð°Ð¼ÐµÐ½ÑÑÑ ÑÑандаÑÑнÑй ÑкÑÐ¸Ð¿Ñ ÑÑанзакÑии (опиÑаннÑй вÑÑе) ÑкÑипÑом, ÑÑиÑÑваемÑм из Ñайла (Ñ Ð¿Ð°ÑамеÑÑом -f). Ð ÑÑом ÑлÑÑае «ÑÑанзакÑией» ÑÑиÑаеÑÑÑ Ð¾Ð´Ð½Ð¾ вÑполнение данного ÑкÑипÑа.
Файл ÑкÑипÑа ÑодеÑÐ¶Ð¸Ñ Ð¾Ð´Ð½Ñ Ð¸Ð»Ð¸ неÑколÑко команд SQL, ÑазделÑннÑÑ
ÑоÑкой Ñ Ð·Ð°Ð¿ÑÑой. ÐÑÑÑÑе ÑÑÑоки и ÑÑÑоки, наÑинаÑÑиеÑÑ Ñ --, игноÑиÑÑÑÑÑÑ. Ð ÑайлаÑ
ÑкÑипÑов Ñакже могÑÑ ÑодеÑжаÑÑÑÑ Â«Ð¼ÐµÑакомандÑ», коÑоÑÑе обÑабаÑÑÐ²Ð°ÐµÑ Ñама пÑогÑамма pgbench, как опиÑано ниже.
ÐÑимеÑание
Ðо веÑÑии Postgres Pro 9.6, SQL-ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð² ÑÐ°Ð¹Ð»Ð°Ñ ÑкÑипÑов завеÑÑалиÑÑ Ñимволами пеÑевода ÑÑÑоки, и поÑÑÐ¾Ð¼Ñ Ð¾Ð½Ð¸ не могли занимаÑÑ Ð½ÐµÑколÑко ÑÑÑок. ТепеÑÑ Ð´Ð»Ñ ÑÐ°Ð·Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ð¾ÑледоваÑелÑнÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´ SQL ÑÑебÑеÑÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÑÑÑ ÑоÑÐºÑ Ñ Ð·Ð°Ð¿ÑÑой (Ñ Ð¾ÑÑ Ð±ÐµÐ· Ð½ÐµÑ Ð¼Ð¾Ð¶Ð½Ð¾ обойÑиÑÑ Ð² конÑе SQL-командÑ, за коÑоÑой идÑÑ Ð¼ÐµÑакоманда). ÐÑли вам нÑжно ÑоздаÑÑ Ñайл ÑкÑипÑа, ÑабоÑаÑÑий и Ñо ÑÑаÑÑми веÑÑиÑми pgbench, запиÑÑвайÑе каждÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ SQL в оÑделÑной ÑÑÑоке и завеÑÑайÑе ÐµÑ ÑоÑкой Ñ Ð·Ð°Ð¿ÑÑой.
ÐÐ»Ñ Ñайлов ÑкÑипÑов Ñеализован пÑоÑÑой меÑ
анизм подÑÑановки пеÑеменнÑÑ
. ÐÐ¼Ñ Ð¿ÐµÑеменнÑÑ
должно ÑоÑÑоÑÑÑ Ð¸Ð· бÑкв (бÑÐºÐ²Ñ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð½Ðµ лаÑинÑкими), подÑÑÑкиваний и ÑиÑÑ (но ÑиÑÑа не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÐµÑвÑм Ñимволом). ÐеÑеменнÑе можно задаÑÑ Ð² командной ÑÑÑоке паÑамеÑÑами -D, опиÑаннÑми вÑÑе, или меÑакомандами, ÑаÑÑмаÑÑиваемÑми ниже. Ðомимо пеÑеменнÑÑ
, коÑоÑÑе можно ÑÑÑановиÑÑ Ð¿Ð°ÑамеÑÑами командной ÑÑÑоки -D, еÑÑÑ Ð½ÐµÑколÑко авÑомаÑиÑеÑки ÑÑÑанавливаемÑÑ
пеÑеменнÑÑ
; они пеÑеÑиÑÐ»ÐµÐ½Ñ Ð² ТаблиÑе 260. ÐÑли знаÑение ÑÑиÑ
пеÑеменнÑÑ
задаÑÑÑÑ Ð² паÑамеÑÑе -D, оно пеÑеопÑеделÑÐµÑ Ð°Ð²ÑомаÑиÑеÑкое знаÑение. Ðогда знаÑение пеÑеменной опÑеделено, его можно вÑÑавиÑÑ Ð² ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ SQL, напиÑав :имÑ_пеÑеменной. ÐаждÑй клиенÑÑкий ÑеанÑ, еÑли иÑ
неÑколÑко, полÑÑÐ°ÐµÑ ÑобÑÑвеннÑй Ð½Ð°Ð±Ð¾Ñ Ð¿ÐµÑеменнÑÑ
. Родном опеÑаÑоÑе pgbench поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð´Ð¾ 255 ÑÑÑлок на пеÑеменнÑе.
ТаблиÑа 260. ÐвÑомаÑиÑеÑкие пеÑеменнÑе
| ÐеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ | ÐпиÑание |
|---|---|
client_id | ÑникалÑное ÑиÑло, иденÑиÑиÑиÑÑÑÑее клиенÑÑкий ÑÐµÐ°Ð½Ñ (наÑÐ¸Ð½Ð°Ñ Ñ Ð½ÑлÑ) |
default_seed | заÑÑавка, иÑполÑзÑÐµÐ¼Ð°Ñ Ð² Ñ ÐµÑ-ÑÑнкÑиÑÑ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ |
random_seed | заÑÑавка генеÑаÑоÑа ÑлÑÑайнÑÑ
ÑиÑел (в оÑÑÑÑÑÑвие пеÑеопÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ ÐºÐ»ÑÑом -D) |
маÑÑÑаб | ÑекÑÑий коÑÑÑиÑÐ¸ÐµÐ½Ñ Ð¼Ð°ÑÑÑаба |
ÐеÑÐ°ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð² ÑкÑипÑе наÑинаÑÑÑÑ Ñ Ð¾Ð±ÑаÑной коÑой ÑеÑÑÑ (\) и обÑÑно пÑодолжаÑÑÑÑ Ð´Ð¾ конÑа ÑÑÑоки, Ñ
оÑÑ Ð¸Ñ
можно пеÑеноÑиÑÑ Ð½Ð° ÑледÑÑÑÑÑ ÑÑÑÐ¾ÐºÑ Ð¿Ð¾ÑледоваÑелÑноÑÑÑÑ Ñимволов: обÑаÑÐ½Ð°Ñ ÐºÐ¾ÑаÑ, возвÑÐ°Ñ ÐºÐ°ÑеÑки. ÐÑгÑменÑÑ Ð¼ÐµÑакоманд ÑазделÑÑÑÑÑ Ð¿Ñобелами. ÐоддеÑживаемÑе меÑÐ°ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð¿ÑедÑÑÐ°Ð²Ð»ÐµÐ½Ñ Ð½Ð¸Ð¶Ðµ:
-
\gset [пÑеÑикÑ] ÐÑа команда Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑименÑÑÑÑÑ Ð´Ð»Ñ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ SQL-запÑоÑов вмеÑÑо завеÑÑаÑÑей ÑоÑки Ñ Ð·Ð°Ð¿ÑÑой (
;).Ðогда иÑполÑзÑеÑÑÑ ÑÑа команда, ожидаеÑÑÑ, ÑÑо пÑедÑдÑÑий SQL-запÑÐ¾Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ¸Ñ Ð¾Ð´Ð½Ñ ÑÑÑокÑ; знаÑÐµÐ½Ð¸Ñ ÑÑолбÑов бÑдÑÑ ÑÐ¾Ñ ÑÐ°Ð½ÐµÐ½Ñ Ð² пеÑеменнÑе Ñ Ð¸Ð¼ÐµÐ½Ð°Ð¼Ð¸ ÑÑолбÑов, а еÑли Ñказан
пÑеÑикÑ, он бÑÐ´ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½ к ÑÑим именам.Ð ÑледÑÑÑем пÑимеÑе оконÑаÑелÑнÑй Ð±Ð°Ð»Ð°Ð½Ñ ÑÑÑÑа из пеÑвого запÑоÑа возвÑаÑаеÑÑÑ Ð² пеÑеменной
abalance, а ÑелоÑиÑленнÑе знаÑÐµÐ½Ð¸Ñ Ð¸Ð· ÑÑеÑÑего запÑоÑа попадаÑÑ Ð² пеÑеменнÑеp_twoиp_three. РезÑлÑÑÐ°Ñ Ð²ÑоÑого запÑоÑа оÑбÑаÑÑваеÑÑÑ.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_
\ifвÑÑажение\elifвÑÑажение\else\endifÐÑа гÑÑппа команд ÑеализÑÐµÑ Ð²ÐºÐ»Ð°Ð´ÑваемÑе ÑÑловнÑе блоки, подобнÑе
\ifвÑÑажениевpsql. РкаÑеÑÑве ÑÑловнÑÑ Ð·Ð°Ð´Ð°ÑÑÑÑ Ñе же вÑÑажениÑ, ÑÑо и в\set, пÑи ÑÑом иÑÑиннÑм ÑÑиÑаеÑÑÑ Ð»Ñбое ненÑлевое знаÑение.-
\setимÑ_пеÑеменнойвÑÑажение УÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð´Ð»Ñ Ð¿ÐµÑеменной
имÑ_пеÑеменнойзнаÑение, вÑÑиÑленное извÑÑажениÑ. ÐÑÑажение Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ ÐºÐ¾Ð½ÑÑанÑÑNULL, логиÑеÑкие конÑÑанÑÑTRUEиFALSE, ÑелоÑиÑленнÑе конÑÑанÑÑ (напÑимеÑ,5432), конÑÑанÑÑ Ñ Ð¿Ð»Ð°Ð²Ð°ÑÑей ÑоÑкой (напÑимеÑ,3.14159), ÑÑÑлки на пеÑеменнÑе:имÑ_пеÑеменной, опеÑаÑоÑÑ Ñ Ð¾Ð±ÑÑнÑми Ð´Ð»Ñ SQL пÑиоÑиÑеÑами и аÑÑоÑиаÑивноÑÑÑÑ, вÑÐ·Ð¾Ð²Ñ ÑÑнкÑий, обÑие ÑÑловнÑе SQL-вÑÑажениÑCASE, а Ñакже Ñкобки.ФÑнкÑии и болÑÑинÑÑво опеÑаÑоÑов возвÑаÑаÑÑ
NULLÐ´Ð»Ñ Ð°ÑгÑменÑовNULL.ÐÑи пÑовеÑке ÑÑÐ»Ð¾Ð²Ð¸Ñ Ð¾ÑлиÑнÑе Ð¾Ñ Ð½ÑÐ»Ñ ÑиÑловÑе знаÑÐµÐ½Ð¸Ñ Ð²Ð¾ÑпÑинимаÑÑÑÑ ÐºÐ°Ðº
TRUE, а ÑиÑловÑе нÑлевÑе знаÑÐµÐ½Ð¸Ñ Ð¸NULLâ какFALSE.ÐÑи пеÑеполнениÑÑ , вÑзваннÑÑ ÑлиÑком болÑÑими ÑиÑлами Ñ Ð¿Ð»Ð°Ð²Ð°ÑÑей ÑоÑкой или ÑелÑми, а Ñакже ÑелоÑиÑленнÑми опеÑаÑиÑми (
+,-,*и/), вÑдаÑÑÑÑ Ð¾Ñибки.ÐÑли в конÑÑÑÑкÑии
CASEоÑÑÑÑÑÑвÑÐµÑ Ð·Ð°ÐºÐ»ÑÑиÑелÑноеELSE, знаÑением по ÑмолÑÐ°Ð½Ð¸Ñ ÑÑиÑаеÑÑÑNULL.ÐÑимеÑÑ:
\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-
\sleepномеÑ[ us | ms | s ] ÐÑиоÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð²Ñполнение ÑкÑипÑа на заданное ÑиÑло микÑоÑекÑнд (
us), миллиÑекÑнд (ms) или ÑекÑнд (s). Ðогда единиÑÑ Ð½Ðµ ÑказÑваÑÑÑÑ, подÑазÑмеваÑÑÑÑ ÑекÑндÑ. ÐдеÑÑÑиÑÐ»Ð¾Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑелоÑиÑленной конÑÑанÑой или ÑÑÑлкой:имÑ_пеÑеменнойна пеÑеменнÑÑ Ñ ÑелоÑиÑленнÑм знаÑением.ÐÑимеÑ:
\sleep 10 ms
-
\setshellимÑ_пеÑеменнойкоманда[аÑгÑменÑ... ] ÐÑиÑÐ²Ð°Ð¸Ð²Ð°ÐµÑ Ð¿ÐµÑеменной
имÑ_пеÑеменнойÑезÑлÑÑÐ°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð¾Ð±Ð¾Ð»Ð¾ÑÐºÐ¸ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°Ñ ÑказаннÑмиаÑгÑменÑами. ÐÑа команда должна пÑоÑÑо вÑдаÑÑ ÑелоÑиÑленное знаÑение в ÑÑандаÑÑнÑй вÑвод.ÐдеÑÑ
командаи каждÑйаÑгÑменÑÐ¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð»Ð¸Ð±Ð¾ ÑекÑÑовой конÑÑанÑой, либо ÑÑÑлкой на пеÑеменнÑÑ:имÑ_пеÑеменной. ÐÑли Ð²Ñ Ñ Ð¾ÑиÑе запиÑаÑÑаÑгÑменÑ, наÑинаÑÑийÑÑ Ñ Ð´Ð²Ð¾ÐµÑоÑиÑ, добавÑÑе пеÑедаÑгÑменÑомдополниÑелÑное двоеÑоÑие.ÐÑимеÑ:
\setshell назнаÑаемаÑ_пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° ÑÑÑоковÑй_аÑгÑÐ¼ÐµÐ½Ñ :пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ ::ÑÑÑока_наÑинаÑÑаÑÑÑ_двоеÑоÑием
-
\shellкоманда[аÑгÑменÑ... ] ÐейÑÑвÑÐµÑ Ñак же, как и
\setshell, но не ÑÑиÑÑÐ²Ð°ÐµÑ ÑезÑлÑÑÐ°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ.ÐÑимеÑ:
\shell команда ÑÑÑоковÑй_аÑгÑÐ¼ÐµÐ½Ñ :пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ ::ÑÑÑока_наÑинаÑÑаÑÑÑ_двоеÑоÑием
ÐÑÑÑоеннÑе опеÑаÑоÑÑ
ÐÑиÑмеÑиÑеÑкие, биÑовÑе и логиÑеÑкие опеÑаÑоÑÑ, а Ñакже опеÑаÑоÑÑ ÑÑавнениÑ, пеÑеÑиÑленнÑе в ТаблиÑе 261, вÑÑÑÐ¾ÐµÐ½Ñ Ð² pgbench и могÑÑ Ð¿ÑименÑÑÑÑÑ Ð² вÑÑажениÑÑ
в \set.
ТаблиÑа 261. ÐпеÑаÑоÑÑ pgbench, в поÑÑдке ÑвелиÑÐµÐ½Ð¸Ñ Ð¿ÑиоÑиÑеÑа
| ÐпеÑаÑÐ¾Ñ | ÐпиÑание | ÐÑÐ¸Ð¼ÐµÑ | РезÑлÑÑÐ°Ñ |
|---|---|---|---|
OR | логиÑеÑкое ÐÐÐ | 5 or 0 | TRUE |
AND | логиÑеÑкое Ð | 3 and 0 | FALSE |
NOT | логиÑеÑкое ÐÐ | not false | TRUE |
IS [NOT] (NULL|TRUE|FALSE) | пÑовеÑки знаÑений | 1 is null | FALSE |
ISNULL|NOTNULL | пÑовеÑки на NULL | 1 notnull | TRUE |
= | Ñавно | 5 = 4 | FALSE |
<> | не Ñавно | 5 <> 4 | TRUE |
!= | не Ñавно | 5 != 5 | FALSE |
< | менÑÑе | 5 < 4 | FALSE |
<= | менÑÑе или Ñавно | 5 <= 4 | FALSE |
> | болÑÑе | 5 > 4 | TRUE |
>= | болÑÑе или Ñавно | 5 >= 4 | TRUE |
| | ÑелоÑиÑленное биÑовое ÐÐÐ | 1 | 2 | 3 |
# | ÑелоÑиÑленное биÑовое иÑклÑÑаÑÑее ÐÐÐ | 1 # 3 | 2 |
& | ÑелоÑиÑленное биÑовое Ð | 1 & 3 | 1 |
~ | ÑелоÑиÑленное биÑовое ÐÐ | ~ 1 | -2 |
<< | ÑелоÑиÑленнÑй биÑовÑй Ñдвиг влево | 1 << 2 | 4 |
>> | ÑелоÑиÑленнÑй биÑовÑй Ñдвиг впÑаво | 8 >> 2 | 2 |
+ | Ñложение | 5 + 4 | 9 |
- | вÑÑиÑание | 3 - 2.0 | 1.0 |
* | Ñмножение | 5 * 4 | 20 |
/ | деление (пÑи ÑелоÑиÑленном оÑÑаÑок оÑбÑаÑÑваеÑÑÑ) | 5 / 3 | 1 |
% | оÑÑаÑок Ð¾Ñ Ð´ÐµÐ»ÐµÐ½Ð¸Ñ | 3 % 2 | 1 |
- | Ñмена знака | - 2.0 | -2.0 |
ÐÑÑÑоеннÑе ÑÑнкÑии
ФÑнкÑии, пеÑеÑиÑленнÑе в ТаблиÑе 262, вÑÑÑÐ¾ÐµÐ½Ñ Ð² pgbench и могÑÑ Ð¿ÑименÑÑÑÑÑ Ð² вÑÑажениÑÑ
в меÑакоманде \set.
ТаблиÑа 262. ФÑнкÑии pgbench
| ФÑнкÑÐ¸Ñ | Тип ÑезÑлÑÑаÑа | ÐпиÑание | ÐÑÐ¸Ð¼ÐµÑ | РезÑлÑÑÐ°Ñ |
|---|---|---|---|---|
| Ñо же, ÑÑо и a | модÑÐ»Ñ ÑиÑла (абÑолÑÑное знаÑение) | abs(-17) | 17 |
| Ñо же, ÑÑо и a | вÑÐ²Ð¾Ð´Ð¸Ñ a в stderr и возвÑаÑÐ°ÐµÑ a | debug(5432.1) | 5432.1 |
| double | пÑиведение к ÑÐ¸Ð¿Ñ Ñ Ð¿Ð»Ð°Ð²Ð°ÑÑей ÑоÑкой | double(5432) | 5432.0 |
| double | ÑкÑпоненÑа | exp(1.0) | 2.718281828459045 |
| double, еÑли лÑбой из аÑгÑменÑов (a) â double, а инаÑе Ñелое ÑиÑло | наиболÑÑее знаÑение ÑÑеди аÑгÑменÑов | greatest(5, 4, 3, 2) | 5 |
| integer | пÑевдоним Ð´Ð»Ñ hash_murmur2() | hash(10, 5432) | -5817877081768721676 |
| integer | Ñ ÐµÑ FNV-1a | hash_fnv1a(10, 5432) | -7793829335365542153 |
| integer | Ñ ÐµÑ MurmurHash2 | hash_murmur2(10, 5432) | -5817877081768721676 |
| integer | пÑиведение к ÑелоÑиÑÐ»ÐµÐ½Ð½Ð¾Ð¼Ñ ÑÐ¸Ð¿Ñ | int(5.4 + 3.8) | 9 |
| double, еÑли лÑбой из аÑгÑменÑов (a) â double, а инаÑе Ñелое ÑиÑло | наименÑÑее знаÑение ÑÑеди аÑгÑменÑов | least(5, 4, 3, 2.1) | 2.1 |
| double | наÑÑÑалÑнÑй логаÑиÑм | ln(2.718281828459045) | 1.0 |
| integer | оÑÑаÑок Ð¾Ñ Ð´ÐµÐ»ÐµÐ½Ð¸Ñ | mod(54, 32) | 22 |
| double | знаÑение конÑÑанÑÑ PI | pi() | 3.1415926535â8979323846 |
| double | возведение в ÑÑÐµÐ¿ÐµÐ½Ñ | pow(2.0, 10), power(2.0, 10) | 1024.0 |
| integer | ÑлÑÑайное Ñелое ÑиÑло Ñ ÑавномеÑнÑм ÑаÑпÑеделением в инÑеÑвале [lb, ub] | random(1, 10) | Ñелое Ð¼ÐµÐ¶Ð´Ñ 1 и 10 |
| integer | ÑлÑÑайное Ñелое ÑиÑло Ñ ÑкÑпоненÑиалÑнÑм ÑаÑпÑеделением в инÑеÑвале [lb, ub], Ñм. ниже | random_exponential(1, 10, 3.0) | Ñелое Ð¼ÐµÐ¶Ð´Ñ 1 и 10 |
| integer | Ñелое ÑиÑло Ñ ÑаÑпÑеделением ÐаÑÑÑа в инÑеÑвале [lb, ub], Ñм. ниже | random_gaussian(1, 10, 2.5) | Ñелое Ð¼ÐµÐ¶Ð´Ñ 1 и 10 |
| integer | Ñелое ÑиÑло Ñ ÑаÑпÑеделением ЦипÑа в инÑеÑвале [lb, ub], Ñм. ниже | random_zipfian(1, 10, 1.5) | Ñелое Ð¼ÐµÐ¶Ð´Ñ 1 и 10 |
| double | квадÑаÑнÑй коÑÐµÐ½Ñ | sqrt(2.0) | 1.414213562 |
ФÑнкÑÐ¸Ñ random вÑдаÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ñ ÑавномеÑнÑм ÑаÑпÑеделением, Ñо еÑÑÑ Ð²ÐµÑоÑÑноÑÑи полÑÑÐµÐ½Ð¸Ñ Ð²ÑеÑ
ÑиÑел в инÑеÑвале ÑавнÑ. ФÑнкÑии random_exponential, random_gaussian и random_zipfian ÑÑебÑÑÑ ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑного паÑамеÑÑа Ñипа double, опÑеделÑÑÑего ÑоÑнÑÑ ÑоÑÐ¼Ñ ÑаÑпÑеделениÑ.
ÐÐ»Ñ ÑкÑпоненÑиалÑного ÑаÑпÑеделениÑ
parameterÑпÑавлÑÐµÑ ÑаÑпÑеделением, обÑÐµÐ·Ð°Ñ Ð±ÑÑÑÑо ÑпадаÑÑее ÑкÑпоненÑиалÑное ÑаÑпÑеделение в ÑоÑкеparameter, а заÑем ÑÑо ÑаÑпÑеделение пÑоеÑиÑÑеÑÑÑ Ð½Ð° ÑелÑе ÑиÑла Ð¼ÐµÐ¶Ð´Ñ Ð³ÑаниÑами. ТоÑнее говоÑÑ, Ñ
f(x) = exp(-parameter * (x - min) / (max - min + 1)) / (1 - exp(-parameter))знаÑение
iмеждÑminиmaxвÑдаÑÑÑÑ Ñ Ð²ÐµÑоÑÑноÑÑÑÑ:f(i) - f(i + 1).ÐнÑÑиÑÐ¸Ñ Ð¿Ð¾Ð´ÑказÑваеÑ, ÑÑо Ñем болÑÑе
parameter, Ñем ÑаÑе бÑдÑÑ Ð²ÑдаваÑÑÑÑ Ð·Ð½Ð°ÑениÑ, близкие кmin, и Ñем Ñеже знаÑениÑ, близкие кmax. Чемparameterближе к 0, Ñем более плоÑким (более ÑавномеÑнÑм) бÑÐ´ÐµÑ ÑаÑпÑеделение. РгÑÑбом пÑиближении пÑи Ñаком ÑаÑпÑеделении наиболее ÑаÑÑÑй 1% знаÑений в диапазоне ÑÑдом ÑminвÑдаÑÑÑÑparameter% вÑемени. ÐнаÑениеparameterдолжно бÑÑÑ ÑÑÑого положиÑелÑнÑм.ÐÐ»Ñ ÑаÑпÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÐаÑÑÑа по инÑеÑÐ²Ð°Ð»Ñ ÑÑÑоиÑÑÑ Ð¾Ð±ÑÑное ноÑмалÑное ÑаÑпÑеделение (клаÑÑиÑеÑÐºÐ°Ñ ÐºÑÐ¸Ð²Ð°Ñ ÐаÑÑÑа в ÑоÑме колокола) и ÑÑÐ¾Ñ Ð¸Ð½ÑеÑвал обÑезаеÑÑÑ Ð² ÑоÑке
-parameterÑлева и+parameterÑпÑава. ÐеÑоÑÑнее вÑего пÑи Ñаком ÑаÑпÑеделении вÑдаÑÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¸Ð· ÑеÑÐµÐ´Ð¸Ð½Ñ Ð¸Ð½ÑеÑвала. ТоÑнее говоÑÑ, еÑлиPHI(x)â ÑÑнкÑÐ¸Ñ ÑаÑпÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð½Ð¾ÑмалÑной ÑлÑÑайной велиÑÐ¸Ð½Ñ Ñо ÑÑедним знаÑениемmu, ÑавнÑм(max + min) / 2.0, и
f(x) = PHI(2.0 * parameter * (x - mu) / (max - min + 1)) /
       (2.0 * PHI(parameter) - 1)Ñогда знаÑение
iмеждÑminиmaxвклÑÑиÑелÑно вÑдаÑÑÑÑ Ñ Ð²ÐµÑоÑÑноÑÑÑÑ:f(i + 0.5) - f(i - 0.5). ÐнÑÑиÑÐ¸Ñ Ð¿Ð¾Ð´ÑказÑваеÑ, ÑÑо Ñем болÑÑеparameter, Ñем ÑаÑе бÑдÑÑ Ð²ÑдаваÑÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð² ÑеÑедине инÑеÑвала, и Ñем Ñеже знаÑÐµÐ½Ð¸Ñ Ñ Ð³ÑаниÑminиmax. Ðколо 67% знаÑений бÑдÑÑ Ð²ÑдаваÑÑÑÑ Ð¸Ð· ÑÑеднего инÑеÑвала1.0 / parameter, Ñо еÑÑÑ Ð¿Ð»ÑÑ/минÑÑ0.5 / parameterÐ¾Ñ ÑÑеднего знаÑениÑ, и 95% из ÑÑеднего инÑеÑвала2.0 / parameter, Ñо еÑÑÑ Ð¿Ð»ÑÑ/минÑÑ1.0 / parameterÐ¾Ñ ÑÑеднего знаÑениÑ; напÑимеÑ, еÑлиparameterÑавен 4.0, 67% знаÑений вÑдаÑÑÑÑ Ð¸Ð· ÑÑедней ÑеÑвеÑÑи (1.0 / 4.0) инÑеÑвала (Ñо еÑÑÑ Ð¾Ñ3.0 / 8.0до5.0 / 8.0) и 95% из ÑÑедней Ð¿Ð¾Ð»Ð¾Ð²Ð¸Ð½Ñ (2.0 / 4.0) инÑеÑвала (из вÑоÑой и ÑÑеÑÑей ÑеÑвеÑÑей). ÐнаÑениеparameterне Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¼ÐµÐ½ÑÑе 2.0.ФÑнкÑиÑ
random_zipfianгенеÑиÑÑÐµÑ Ð¾Ð³ÑаниÑенное ÑаÑпÑеделение по Ð·Ð°ÐºÐ¾Ð½Ñ Ð¦Ð¸Ð¿Ñа.parameterопÑеделÑеÑ, наÑколÑко неÑавномеÑно ÑаÑпÑеделение. Чем болÑÑеparameter, Ñем ÑаÑе вÑдаÑÑÑÑ Ð·Ð½Ð°ÑениÑ, близкие к наÑÐ°Ð»Ñ Ð¸Ð½ÑеÑвала. ÐÑо ÑаÑпÑеделение Ñаково, ÑÑо пÑи диапазоне, наÑинаÑÑемÑÑ Ñ 1, оÑноÑение веÑоÑÑноÑÑи полÑÑиÑÑkк веÑоÑÑноÑÑи полÑÑениÑk+1ÑавнÑеÑÑÑ((. ÐапÑимеÑ,k+1)/k)**parameterrandom_zipfian(1, ..., 2.5)бÑÐ´ÐµÑ Ð²ÑдаваÑÑ ÑиÑло1пÑимеÑно в(2/1)**2.5 = 5.66Ñаза ÑаÑе, Ñем ÑиÑло2, а оно, в ÑÐ²Ð¾Ñ Ð¾ÑеÑедÑ, бÑÐ´ÐµÑ Ð²ÑдаваÑÑÑÑ Ð¿ÑимеÑно в(3/2)**2.5 = 2.76Ñаза ÑаÑе, Ñем3, и Ñак далее.ÐÑо ÑаÑпÑеделение Ñеализовано в pgbench по маÑеÑÐ¸Ð°Ð»Ñ ÐºÐ½Ð¸Ð³Ð¸ «Non-Uniform Random Variate Generation» («ÐенеÑаÑÐ¸Ñ Ð½ÐµÑавномеÑно ÑаÑпÑеделÑннÑÑ ÑлÑÑайнÑÑ ÑиÑел» ÐÑк ÐевÑой, ÑÑÑ. 550-551, Springer 1986. ÐÑледÑÑвие огÑаниÑений алгоÑиÑма
parameterÐ¼Ð¾Ð¶ÐµÑ Ð¿ÑинимаÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ ÑолÑко в инÑеÑвале [1.001, 1000].
ФÑнкÑии Ñ
еÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ hash, hash_murmur2 и hash_fnv1a пÑинимаÑÑ Ð½Ð° вÑ
од аÑгÑÐ¼ÐµÐ½Ñ Ð¸ необÑзаÑелÑнÑй паÑамеÑÑ Ñ Ð·Ð°ÑÑавкой. ÐÑли знаÑение заÑÑавки не задаÑÑÑÑ, иÑполÑзÑеÑÑÑ Ð·Ð½Ð°Ñение пеÑеменной :default_seed, коÑоÑÐ°Ñ Ð¸Ð½Ð¸ÑиализиÑÑеÑÑÑ ÑлÑÑайнÑм ÑиÑлом (еÑли не задаÑÑÑÑ Ñвно клÑÑом командной ÑÑÑоки -D). ФÑнкÑии Ñ
еÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð¸ÑполÑзоваÑÑÑÑ Ð´Ð»Ñ ÑазбÑоÑа ÑаÑпÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑлÑÑайнÑÑ
ÑÑнкÑий, ÑакиÑ
как random_zipfian или random_exponential. ÐапÑимеÑ, ÑледÑÑÑий ÑкÑÐ¸Ð¿Ñ pgbench ÑмÑлиÑÑÐµÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½ÑÑ ÑеалÑнÑÑ Ð½Ð°Ð³ÑÑзкÑ, ÑипиÑнÑÑ Ð´Ð»Ñ ÑоÑиалÑнÑÑ
медиа- и блог-плаÑÑоÑм, где неÑколÑко полÑзоваÑелей генеÑиÑÑÑÑ Ð»ÑвинÑÑ Ð´Ð¾Ð»Ñ Ð½Ð°Ð³ÑÑзки:
\set r random_zipfian(0, 100000000, 1.07) \set k abs(hash(:r)) % 1000000
РнекоÑоÑÑÑ ÑлÑÑаÑÑ ÑÑебÑÑÑÑÑ Ð´ÑÑгие ÑазнообÑазнÑе ÑаÑпÑеделениÑ, не коÑÑелиÑÑÑÑие дÑÑг Ñ Ð´ÑÑгом, и Ñогда Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾ Ñвное Ñказание заÑÑавки:
\set k1 abs(hash(:r, :default_seed + 123)) % 1000000 \set k2 abs(hash(:r, :default_seed + 321)) % 1000000
РкаÑеÑÑве пÑимеÑа взглÑниÑе на вÑÑÑоенное опÑеделение ÑÑанзакÑии Ñипа TPC-B:
\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;
С Ñаким ÑкÑипÑом ÑÑанзакÑÐ¸Ñ Ð½Ð° каждой иÑеÑаÑии бÑÐ´ÐµÑ Ð¾Ð±ÑаÑаÑÑÑÑ Ðº ÑазнÑм, ÑлÑÑайно вÑбиÑаемÑм ÑÑÑокам. (ÐÑÐ¾Ñ Ð¿ÑÐ¸Ð¼ÐµÑ Ð¿Ð¾ÐºÐ°Ð·ÑваеÑ, поÑÐµÐ¼Ñ Ð²Ð°Ð¶Ð½Ð¾, ÑÑÐ¾Ð±Ñ Ð² каждом клиенÑÑком ÑеанÑе бÑли ÑобÑÑвеннÑе пеÑеменнÑе â в пÑоÑивном ÑлÑÑае они не бÑдÑÑ Ð½ÐµÐ·Ð°Ð²Ð¸Ñимо обÑаÑаÑÑÑÑ Ðº ÑазнÑм ÑÑÑокам.)
ÐÑоÑоколиÑование ÑÑанзакÑий
С паÑамеÑÑом -l (но без --aggregate-interval), pgbench запиÑÑÐ²Ð°ÐµÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ каждой ÑÑанзакÑии в пÑоÑокол. ÐÑÐ¾Ñ Ñайл пÑоÑокола бÑÐ´ÐµÑ Ð½Ð°Ð·ÑваÑÑÑÑ , где пÑеÑикÑ.nnnпÑеÑÐ¸ÐºÑ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ â pgbench_log, а nnn â PID пÑоÑеÑÑа pgbench. ÐÑеÑÐ¸ÐºÑ Ð¼Ð¾Ð¶Ð½Ð¾ ÑмениÑÑ, воÑполÑзовавÑиÑÑ ÐºÐ»ÑÑом --log-prefix. ÐÑли паÑамеÑÑ -j Ñавен 2 или вÑÑе, бÑÐ´ÐµÑ Ñоздано неÑколÑко ÑабоÑиÑ
поÑоков, и каждÑй бÑÐ´ÐµÑ Ð·Ð°Ð¿Ð¸ÑÑваÑÑ Ð¾ÑделÑнÑй пÑоÑокол. ÐеÑвÑй ÑабоÑий пÑоÑеÑÑ Ð±ÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑ Ñайл Ñ Ñем же именем, ÑÑо и в ÑÑандаÑÑном ÑлÑÑае Ñ Ð¾Ð´Ð½Ð¸Ð¼ поÑоком, а ÑÐ°Ð¹Ð»Ñ Ð¾ÑÑалÑнÑÑ
поÑоков бÑдÑÑ Ð½Ð°Ð·ÑваÑÑÑÑ , где пÑеÑикÑ.nnn.mmmmmm â поÑÑдковÑй Ð½Ð¾Ð¼ÐµÑ ÑабоÑего пÑоÑеÑÑа, наÑÐ¸Ð½Ð°Ñ Ñ 1.
ÐÑоÑокол Ð¸Ð¼ÐµÐµÑ ÑледÑÑÑий ÑоÑмаÑ:
код_клиенÑаÑиÑло_ÑÑанзакÑийдлиÑелÑноÑÑÑномеÑ_ÑкÑипÑавÑемÑ_ÑÐ¿Ð¾Ñ Ð¸Ð²ÑемÑ_мкÑ[оÑÑÑавание_оÑ_гÑаÑика]
ÐдеÑÑ ÐºÐ¾Ð´_клиенÑа показÑваеÑ, в ÑеанÑе какого клиенÑа запÑÑкалаÑÑ ÑÑанзакÑиÑ, ÑиÑло_ÑÑанзакÑий оÑÑажаеÑ, ÑколÑко ÑÑанзакÑий вÑполнÑлоÑÑ Ð² ÑÑом ÑеанÑе, длиÑелÑноÑÑÑ â обÑее вÑÐµÐ¼Ñ ÑÑанзакÑий (в микÑоÑекÑндаÑ
), номеÑ_ÑкÑипÑа показÑваеÑ, какой Ñайл ÑкÑипÑа иÑполÑзовалÑÑ (ÑÑо полезно пÑи Ñказании неÑколÑкиÑ
ÑкÑипÑов клÑÑами -f и -b), а вÑемÑ_ÑпоÑ
и/вÑемÑ_Ð¼ÐºÑ â оÑмеÑка вÑемени в ÑоÑмаÑе Unix и ÑмеÑение в микÑоÑекÑндаÑ
(из ÑÑиÑ
ÑиÑел можно полÑÑиÑÑ Ð²ÑÐµÐ¼Ñ ÑÑандаÑÑа ISO 8601 Ñ Ð´ÑобнÑми ÑекÑндами), показÑваÑÑие, когда ÑÑанзакÑÐ¸Ñ Ð±Ñла завеÑÑена. Ðоле оÑÑÑавание_оÑ_гÑаÑика пÑедÑÑавлÑÐµÑ ÑазниÑÑ Ð¼ÐµÐ¶Ð´Ñ Ð·Ð°Ð¿Ð»Ð°Ð½Ð¸ÑованнÑм вÑеменем запÑÑка ÑÑанзакÑии и ÑакÑиÑеÑким вÑеменем запÑÑка (в микÑоÑекÑндаÑ
). Ðно вÑводиÑÑÑ, ÑолÑко когда пÑименÑеÑÑÑ Ð¿Ð°ÑамеÑÑ --rate. Ðогда одновÑеменно пÑименÑÑÑÑÑ Ð¿Ð°ÑамеÑÑÑ --rate и --latency-limit, в поле длиÑелÑноÑÑÑ Ð´Ð»Ñ Ð¿ÑопÑÑеннÑÑ
ÑÑанзакÑий бÑÐ´ÐµÑ Ð²ÑводиÑÑÑÑ skipped.
ФÑÐ°Ð³Ð¼ÐµÐ½Ñ Ð¿ÑоÑокола, полÑÑенного пÑи вÑполнении Ñ Ð¾Ð´Ð½Ð¸Ð¼ клиенÑом:
0 199 2241 0 1175850568 995598 0 200 2465 0 1175850568 998079 0 201 2513 0 1175850569 608 0 202 2038 0 1175850569 2663
ÐÑÑ Ð¾Ð´Ð¸Ð½ пÑÐ¸Ð¼ÐµÑ Ñ --rate=100 и --latency-limit=5 (обÑаÑиÑе внимание на дополниÑелÑнÑй ÑÑÐ¾Ð»Ð±ÐµÑ Ð¾ÑÑÑавание_оÑ_гÑаÑика):
0 81 4621 0 1412881037 912698 3005 0 82 6173 0 1412881037 914578 4304 0 83 skipped 0 1412881037 914578 5217 0 83 skipped 0 1412881037 914578 5099 0 83 4722 0 1412881037 916203 3108 0 84 4142 0 1412881037 918023 2333 0 85 2465 0 1412881037 919759 740
Ð ÑÑом пÑимеÑе ÑÑанзакÑÐ¸Ñ 82 опоздала, Ñак как ÐµÑ Ð´Ð»Ð¸ÑелÑноÑÑÑ (6.173 мÑ) пÑевÑÑила огÑаниÑение в 5 мÑ. СледÑÑÑие две ÑÑанзакÑии бÑли пÑопÑÑенÑ, Ñак как бÑло ÑлиÑком поздно Ð¸Ñ Ð½Ð°ÑинаÑÑ.
Ðогда пÑоводиÑÑÑ Ð´Ð»Ð¸ÑелÑное ÑеÑÑиÑование Ñ Ð±Ð¾Ð»ÑÑим колиÑеÑÑвом ÑÑанзакÑий, ÑÐ°Ð¹Ð»Ñ Ð¿ÑоÑоколов могÑÑ Ð±ÑÑÑ Ð¾ÑÐµÐ½Ñ Ð¾Ð±ÑÑмнÑми. ЧÑÐ¾Ð±Ñ Ð² ниÑ
запиÑÑвалаÑÑ ÑолÑко ÑлÑÑÐ°Ð¹Ð½Ð°Ñ Ð²ÑбоÑка ÑÑанзакÑий, можно запÑÑÑиÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ñ Ð¿Ð°ÑамеÑÑом --sampling-rate.
ÐÑоÑоколиÑование Ñ Ð°Ð³ÑегиÑованием
С паÑамеÑÑом --aggregate-interval пÑоÑÐ¾ÐºÐ¾Ð»Ñ Ð¸Ð¼ÐµÑÑ Ð½ÐµÑколÑко иной ÑоÑмаÑ:
наÑало_инÑеÑвалаÑиÑло_ÑÑанзакÑийÑÑмма_длиÑелÑноÑÑиÑÑмма_длиÑелÑноÑÑи_2мин_длиÑелÑноÑÑÑмакÑ_длиÑелÑноÑÑÑ[ÑÑмма_задеÑжкиÑÑмма_задеÑжки_2мин_задеÑжкамакÑ_задеÑжка[пÑопÑÑено_ÑÑанзакÑий] ]
ÐдеÑÑ Ð½Ð°Ñало_инÑеÑвала â наÑалÑное вÑÐµÐ¼Ñ Ð¸Ð½ÑеÑвала (в ÑоÑмаÑе вÑемени UNIX), ÑиÑло_ÑÑанзакÑий â колиÑеÑÑво ÑÑанзакÑий в данном инÑеÑвале, ÑÑмма_длиÑелÑноÑÑи â ÑÑммаÑÐ½Ð°Ñ Ð´Ð»Ð¸ÑелÑноÑÑÑ ÑÑанзакÑий, ÑÑмма_длиÑелÑноÑÑи_2 â ÑÑмма квадÑаÑов длиÑелÑноÑÑей ÑÑанзакÑий в инÑеÑвале, мин_длиÑелÑноÑÑÑ â минималÑÐ½Ð°Ñ Ð´Ð»Ð¸ÑелÑноÑÑÑ Ð² инÑеÑвале, а макÑ_задеÑжка â макÑималÑнаÑ. СледÑÑÑие полÑ, ÑÑмма_задеÑжки, ÑÑмма_задеÑжки_2, мин_задеÑжка и макÑ_задеÑжка, пÑиÑÑÑÑÑвÑÑÑ, ÑолÑко еÑли пÑименÑеÑÑÑ Ð¿Ð°ÑамеÑÑ --rate. Ðни оÑÑажаÑÑ Ð²ÑемÑ, на коÑоÑое задеÑжалаÑÑ ÐºÐ°Ð¶Ð´Ð°Ñ ÑÑанзакÑиÑ, Ð¾Ð¶Ð¸Ð´Ð°Ñ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ Ð¿ÑедÑдÑÑей, Ñо еÑÑÑ ÑазниÑÑ Ð¼ÐµÐ¶Ð´Ñ Ð²Ñеменем ÑакÑиÑеÑкого запÑÑка и запланиÑованнÑм вÑеменем. Самое поÑледнее поле, пÑопÑÑено_ÑÑанзакÑий, Ñоже пÑиÑÑÑÑÑвÑеÑ, ÑолÑко еÑли пÑименÑеÑÑÑ ÐºÐ»ÑÑ --latency-limit. РнÑм вÑводиÑÑÑ ÑиÑло ÑÑанзакÑий, пÑопÑÑеннÑÑ
из-за Ñого, ÑÑо иÑ
запÑÑк задеÑжалÑÑ ÑлиÑком надолго. ÐÐ°Ð¶Ð´Ð°Ñ ÑÑанзакÑÐ¸Ñ ÑÑиÑÑваеÑÑÑ Ð² Ñом инÑеÑвале, в коÑоÑом она бÑла заÑикÑиÑована.
ÐÑÐ¸Ð¼ÐµÑ Ð²Ñвода:
1345828501 5601 1542744 483552416 61 2573 1345828503 7884 1979812 565806736 60 1479 1345828505 7208 1979422 567277552 59 1391 1345828507 7685 1980268 569784714 60 1398 1345828509 7073 1979779 573489941 236 1411
ÐамеÑÑÑе, ÑÑо пÑоÑÑой пÑоÑокол (без агÑегиÑованиÑ) показÑваеÑ, какой ÑкÑÐ¸Ð¿Ñ Ð¸ÑполÑзовалÑÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ ÑÑанзакÑии, в оÑлиÑие Ð¾Ñ Ð¿ÑоÑокола Ñ Ð°Ð³ÑегиÑованием. Таким обÑазом, еÑли вам нÑÐ¶Ð½Ñ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ñе ÑведениÑ, но в ÑазÑезе ÑкÑипÑов, вам пÑидÑÑÑÑ Ð°Ð³ÑегиÑоваÑÑ Ð´Ð°Ð½Ð½Ñе ÑамоÑÑоÑÑелÑно.
ÐÑÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ð¿Ð¾ опеÑаÑоÑам
С паÑамеÑÑом -r пÑогÑамма pgbench ÑÑиÑÑÐ²Ð°ÐµÑ Ð²ÑÐµÐ¼Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ опеÑаÑоÑа каждÑм клиенÑом. ÐаÑем по завеÑÑении ÑеÑÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ð½Ð° вÑÐ²Ð¾Ð´Ð¸Ñ ÑÑеднее по вÑем знаÑениÑм как вÑÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ опеÑаÑоÑа.
Со ÑÑандаÑÑнÑм ÑкÑипÑом вÑвод бÑÐ´ÐµÑ Ð¿ÑимеÑно Ñаким:
starting vacuum...end.
transaction type: <builtin: TPC-B (sort of)>
scaling factor: 1
query mode: simple
number of clients: 10
number of threads: 1
number of transactions per client: 1000
number of transactions actually processed: 10000/10000
latency average = 15.844 ms
latency stddev = 2.715 ms
tps = 618.764555 (including connections establishing)
tps = 622.977698 (excluding connections establishing)
statement latencies in milliseconds:
0.002 \set aid random(1, 100000 * :scale)
0.005 \set bid random(1, 1 * :scale)
0.002 \set tid random(1, 10 * :scale)
0.001 \set delta random(-5000, 5000)
0.326 BEGIN;
0.603 UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid;
0.454 SELECT abalance FROM pgbench_accounts WHERE aid = :aid;
5.528 UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid;
7.335 UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid;
0.371 INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP);
1.212 END;
ÐÑли задейÑÑвÑеÑÑÑ Ð½ÐµÑколÑко Ñайлов ÑкÑипÑов, ÑÑедние знаÑÐµÐ½Ð¸Ñ Ð²ÑводÑÑÑÑ Ð¾ÑделÑно Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ Ñайла.
УÑÑиÑе, ÑÑо ÑÐ±Ð¾Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑÑ Ð²ÑеменнÑÑ Ð¿Ð¾ÐºÐ°Ð·Ð°Ñелей влеÑÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе издеÑжки и пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº ÑÐ½Ð¸Ð¶ÐµÐ½Ð¸Ñ ÑÑедней ÑкоÑоÑÑи и, как ÑезÑлÑÑаÑ, Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ TPS. Ðа ÑколÑко именно ÑнизиÑÑÑ ÑкоÑоÑÑÑ, во многом завиÑÐ¸Ñ Ð¾Ñ Ð¿Ð»Ð°ÑÑоÑÐ¼Ñ Ð¸ обоÑÑдованиÑ. ХоÑоÑий ÑпоÑоб оÑениÑÑ, ÐºÐ°ÐºÐ¾Ð²Ñ ÑÑи издеÑжки â ÑÑавниÑÑ ÑÑедние знаÑÐµÐ½Ð¸Ñ TPS, полÑÑаемÑе Ñ Ð¿Ð¾Ð´ÑÑÑÑом вÑемени опеÑаÑоÑов и без Ñакого подÑÑÑÑа.
ÐолезнÑе ÑовеÑÑ
ÐÑполÑзÑÑ pgbench, можно без оÑобого ÑÑÑда полÑÑиÑÑ Ð°Ð±ÑолÑÑно беÑÑмÑÑленнÑе ÑиÑла. ÐоÑледÑйÑе пÑиведÑннÑм ÑовеÑам, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ñе ÑезÑлÑÑаÑÑ.
Ðо-пеÑвÑÑ
, никогда не довеÑÑйÑе ÑеÑÑам, коÑоÑÑе вÑполнÑÑÑÑÑ Ð²Ñего неÑколÑко ÑекÑнд. ÐоÑполÑзÑйÑеÑÑ Ð¿Ð°ÑамеÑÑом -t и -T и ÑÑÑановиÑе вÑÐµÐ¼Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð½Ðµ менÑÑе неÑколÑкиÑ
минÑÑ, ÑÑÐ¾Ð±Ñ Ð¸Ð·Ð±Ð°Ð²Ð¸ÑÑÑÑ Ð¾Ñ ÑÑма в ÑÑедниÑ
знаÑениÑÑ
. РнекоÑоÑÑÑ
ÑлÑÑаÑÑ
Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð²Ð¾ÑпÑоизводимÑÑ
ÑезÑлÑÑаÑов ÑеÑÑиÑование должно пÑодолжаÑÑÑÑ Ð½ÐµÑколÑко ÑаÑов. ЧÑÐ¾Ð±Ñ Ð¿Ð¾Ð½ÑÑÑ, бÑли ли полÑÑÐµÐ½Ñ Ð²Ð¾ÑпÑоизводимÑе знаÑениÑ, Ð¸Ð¼ÐµÐµÑ ÑмÑÑл запÑÑÑиÑÑ ÑеÑÑиÑование неÑколÑко Ñаз.
ÐÐ»Ñ ÑÑандаÑÑного ÑÑенаÑÐ¸Ñ Ð¿Ð¾ ÑÐ¸Ð¿Ñ TPC-B наÑалÑнÑй коÑÑÑиÑÐ¸ÐµÐ½Ñ Ð¼Ð°ÑÑÑаба (-s) должен бÑÑÑ Ð½Ðµ менÑÑе ÑиÑла клиенÑов, Ñ ÐºÐ°ÐºÐ¸Ð¼ Ð²Ñ Ð½Ð°Ð¼ÐµÑÐµÐ½Ñ Ð¿ÑоводиÑÑ ÑеÑÑиÑование (-c); в пÑоÑивном ÑлÑÑае вÑ, по болÑÑÐ¾Ð¼Ñ ÑÑÑÑÑ, бÑдеÑе замеÑÑÑÑ Ð²ÑÐµÐ¼Ñ ÐºÐ¾Ð½ÐºÑÑенÑнÑÑ
изменений. ТаблиÑа pgbench_branches ÑодеÑÐ¶Ð¸Ñ Ð²Ñего -s ÑÑÑок, а ÐºÐ°Ð¶Ð´Ð°Ñ ÑÑанзакÑÐ¸Ñ Ñ
оÑÐµÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑ Ð¾Ð´Ð½Ñ Ð¸Ð· ниÑ
, Ñак ÑÑо еÑли знаÑение -c пÑевÑÑÐ°ÐµÑ -s, ÑÑо неÑомненно пÑиведÑÑ Ðº ÑомÑ, ÑÑо многие ÑÑанзакÑии бÑдÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑоваÑÑÑÑ Ð´ÑÑгими.
СÑандаÑÑнÑй ÑÑенаÑий ÑеÑÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ñакже доволÑно ÑилÑно завиÑÐ¸Ñ Ð¾Ñ Ñого, ÑколÑко вÑемени пÑоÑло Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñа иниÑиализаÑии ÑаблиÑ: накопление неакÑÑалÑнÑÑ ÑÑÑок и «мÑÑÑвого» пÑоÑÑÑанÑÑва в ÑаблиÑÐ°Ñ Ð²Ð»Ð¸ÑÐµÑ Ð½Ð° ÑезÑлÑÑаÑÑ. ЧÑÐ¾Ð±Ñ Ð¿ÑавилÑно оÑениÑÑ ÑезÑлÑÑаÑÑ, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ ÑÑиÑÑваÑÑ, ÑколÑко вÑего изменений бÑло пÑоизведено и когда вÑполнÑлаÑÑ Ð¾ÑиÑÑка. ÐÑли же вклÑÑена авÑооÑиÑÑка, ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑÑеваÑо непÑедÑказÑемÑми изменениÑми оÑенок пÑоизводиÑелÑноÑÑи.
ÐолезноÑÑÑ ÑезÑлÑÑаÑов pgbench Ñакже Ð¼Ð¾Ð¶ÐµÑ Ð¾Ð³ÑаниÑиваÑÑÑÑ Ñем, ÑÑо ÑеÑÑиÑование Ñ Ð±Ð¾Ð»ÑÑим ÑиÑлом клиенÑÑÐºÐ¸Ñ ÑеанÑов Ñамо по Ñебе нагÑÑÐ¶Ð°ÐµÑ ÑиÑÑемÑ. ÐÑого можно избежаÑÑ, запÑÑÐºÐ°Ñ pgbench на дÑÑгом компÑÑÑеÑе, не на ÑеÑвеÑе баз даннÑÑ , Ñ Ð¾ÑÑ Ð¿Ñи ÑÑом болÑÑое знаÑение Ð¸Ð¼ÐµÐµÑ ÑкоÑоÑÑÑ ÑеÑи. Ðногда, оÑÐµÐ½Ð¸Ð²Ð°Ñ Ð¿ÑоизводиÑелÑноÑÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ ÑеÑвеÑа, полезно запÑÑкаÑÑ Ð´Ð°Ð¶Ðµ неÑколÑко ÑкземплÑÑов pgbench паÑаллелÑно, на оÑделÑнÑÑ ÐºÐ»Ð¸ÐµÐ½ÑÑÐºÐ¸Ñ ÐºÐ¾Ð¼Ð¿ÑÑÑеÑÐ°Ñ .
ÐезопаÑноÑÑÑ
ÐÑли к базе даннÑÑ , коÑоÑÐ°Ñ Ð½Ðµ пÑиведена в ÑооÑвеÑÑÑвие ÑÐ°Ð±Ð»Ð¾Ð½Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°Ñного иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑÑ ÐµÐ¼, имеÑÑ Ð´Ð¾ÑÑÑп недовеÑеннÑе полÑзоваÑели, не запÑÑкайÑе pgbench в ÑÑой базе. ÐÑогÑамма pgbench иÑполÑзÑÐµÑ Ð½ÐµÐ¿Ð¾Ð»Ð½Ñе имена и не наÑÑÑÐ°Ð¸Ð²Ð°ÐµÑ Ð´Ð»Ñ ÑÐµÐ±Ñ Ð¿ÑÑÑ Ð¿Ð¾Ð¸Ñка.