pgbench
pgbench â запÑÑÑиÑÑ ÑеÑÑ Ð¿ÑоизводиÑелÑноÑÑи Postgres Pro
СинÑакÑиÑ
pgbench -i [паÑамеÑÑ...] [dbname]
pgbench [паÑамеÑÑ...] [dbname]
ÐпиÑание
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 maximum number of tries: 1 number of transactions per client: 1000 number of transactions actually processed: 10000/10000 number of failed transactions: 0 (0.000%) latency average = 11.013 ms latency stddev = 7.351 ms initial connection time = 45.758 ms tps = 896.967014 (without initial connection time)
РпеÑвÑÑ
Ñеми ÑÑÑокаÑ
вÑводÑÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð½ÐµÐºÐ¾ÑоÑÑÑ
ÑамÑÑ
важнÑÑ
паÑамеÑÑов. Ð ÑеÑÑой ÑÑÑоке вÑводиÑÑÑ Ð¼Ð°ÐºÑималÑное ÑиÑло повÑоÑов ÑÑанзакÑий Ñ Ð¾Ñибками ÑеÑиализаÑии или взаимоблокиÑовки (за подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº ÐовÑоÑÑ Ð¸ оÑÐºÐ°Ð·Ñ Ð¸Ð·-за оÑибок ÑеÑиализаÑии/взаимоблокиÑовки). РвоÑÑмой ÑÑÑоке показÑваеÑÑÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво вÑполненнÑÑ
и запланиÑованнÑÑ
ÑÑанзакÑий (пÑоизведение ÑиÑла клиенÑов и ÑиÑла ÑÑанзакÑий Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ клиенÑа); ÑÑи колиÑеÑÑва бÑдÑÑ ÑазлиÑаÑÑÑÑ, ÑолÑко еÑли вÑполнение завеÑÑиÑÑÑ Ð´Ð¾ÑÑоÑно или какие-либо ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ SQL завеÑÑаÑÑÑ Ð¾Ñибкой. (Ð Ñежиме -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 пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑледÑÑÑие аÑгÑменÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ ÑÑÑоки Ð´Ð»Ñ Ð¸Ð½Ð¸ÑиализаÑии:
dbname#УказÑÐ²Ð°ÐµÑ Ð¸Ð¼Ñ Ð±Ð°Ð·Ñ, в коÑоÑой бÑÐ´ÐµÑ Ð¿ÑоводиÑÑÑÑ ÑеÑÑ. ÐÑли Ð¸Ð¼Ñ Ð½Ðµ задано, Ñо иÑполÑзÑеÑÑÑ Ð·Ð½Ð°Ñение пеÑеменной окÑÑжениÑ
PGDATABASE. ÐÑли и пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð½Ðµ задана, Ñо в каÑеÑÑве имени Ð±Ð°Ð·Ñ Ð±ÑÐ´ÐµÑ Ð²Ð·ÑÑо Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑелÑ, под коÑоÑÑм оÑÑÑеÑÑвлÑеÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑение.-i--initialize#ТÑебÑеÑÑÑ Ð´Ð»Ñ Ð²Ñзова Ñежима иниÑиализаÑии.
-IÑÑапÑ_иниÑиализаÑии--init-steps=#ÑÑапÑ_иниÑиализаÑииÐÑполнÑÑÑ ÑолÑко вÑбÑаннÑе из вÑÐµÑ Ð¾Ð±ÑÑнÑÑ Ð¿Ð¾Ð´Ð³Ð¾ÑовиÑелÑнÑÑ ÑÑапов. РпаÑамеÑÑе
ÑÑапÑ_иниÑиализаÑииоÑделÑнÑе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑÑапа вÑбиÑаÑÑ, какие ÑÑÐ°Ð¿Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð²ÑполнÑÑÑÑÑ. ÐÑе ÑÑÐ°Ð¿Ñ Ð²ÑполнÑÑÑÑÑ Ð² опÑеделÑнном поÑÑдке. СпиÑок ÑÑапов по ÑмолÑаниÑ:dtgvp. ÐолнÑй пеÑеÑÐµÐ½Ñ Ð¿Ð¾Ð´Ð³Ð¾ÑовиÑелÑнÑÑ ÑÑапов:d(Drop, ÑдалиÑÑ) #УдалиÑÑ Ð²Ñе ÑÑÑеÑÑвÑÑÑие ÑаблиÑÑ pgbench.
t(create Tables, ÑоздаÑÑ ÑаблиÑÑ) #СоздаÑÑ ÑаблиÑÑ, иÑполÑзÑемÑе ÑÑандаÑÑнÑм ÑÑенаÑием pgbench, а именно:
pgbench_accounts,pgbench_branches,pgbench_historyиpgbench_tellers.gилиG(Generate data, ÑгенеÑиÑоваÑÑ Ð´Ð°Ð½Ð½Ñе на ÑÑоÑоне клиенÑа или на ÑÑоÑоне ÑеÑвеÑа) #СгенеÑиÑоваÑÑ Ð´Ð°Ð½Ð½Ñе и загÑÑзиÑÑ Ð¸Ñ Ð² ÑÑандаÑÑнÑе ÑаблиÑÑ, заменив вÑе Ñже ÑÑÑеÑÑвÑÑÑие даннÑе.
С клÑÑом
g(вÑбиÑаÑÑим генеÑиÑование даннÑÑ Ð½Ð° ÑÑоÑоне клиенÑа), даннÑе ÑоÑмиÑÑÑÑÑÑ Ð² клиенÑÑком кодеpgbench, а заÑем пеÑедаÑÑÑÑ Ð½Ð° ÑеÑвеÑ. ÐÑи ÑÑом Ñоединение клиенÑ/ÑеÑÐ²ÐµÑ Ð½Ð°Ð³ÑÑжаеÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹COPY. С Postgres Pro веÑÑии 14 или вÑÑеpgbenchиÑполÑзÑÐµÑ Ð¿Ð°ÑамеÑÑ FREEZE Ð´Ð»Ñ ÑÑкоÑÐµÐ½Ð¸Ñ Ð¿Ð¾ÑледÑÑÑей опеÑаÑииVACUUM, еÑли не пÑименÑеÑÑÑ ÑекÑиониÑование. Ðогда Ñ ÐºÐ»ÑÑомgгенеÑиÑÑÑÑÑÑ Ð´Ð°Ð½Ð½Ñе Ð´Ð»Ñ ÑаблиÑÑpgbench_accounts, поÑле каждÑÑ 100000 ÑÑÑок вÑдаÑÑÑÑ ÑообÑение о пÑогÑеÑÑе.С клÑÑом
G(вÑбиÑаÑÑим генеÑиÑование даннÑÑ Ð½Ð° ÑÑоÑоне ÑеÑвеÑа), клиенÑÑкий кодpgbenchпеÑедаÑÑ Ð½Ð° ÑеÑÐ²ÐµÑ ÑолÑко неболÑÑие запÑоÑÑ, а ÑобÑÑвенно ÑоÑмиÑованием даннÑÑ Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑÑÑ ÑеÑвеÑ. Ð ÑÑом ÑлÑÑае ÑеÑевое Ñоединение не нагÑÑжаеÑÑÑ, но возÑаÑÑÐ°ÐµÑ Ð½Ð°Ð³ÑÑзка на ÑеÑвеÑ. ÐÑи генеÑиÑовании даннÑÑ Ñ ÐºÐ»ÑÑомGникакие ÑообÑÐµÐ½Ð¸Ñ Ð¾ Ñ Ð¾Ð´Ðµ опеÑаÑии не вÑдаÑÑÑÑ.Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¿Ñи иниÑиализаÑии Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½Ñе генеÑиÑÑÑÑÑÑ Ð½Ð° ÑÑоÑоне клиенÑа (Ñо еÑÑÑ Ð¿Ð¾Ð´ÑазÑмеваеÑÑÑ ÐºÐ»ÑÑ
g).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 ÑÑÑок, пÑи ÑÑом за ÑекÑÐ½Ð´Ñ Ð¾Ð±ÑÑно вÑводиÑÑÑ Ð´Ð¾Ð²Ð¾Ð»Ñно много ÑÑÑок (оÑобенно на Ñ Ð¾ÑоÑем обоÑÑдовании).
ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð½Ðµ оказÑÐ²Ð°ÐµÑ Ð²Ð»Ð¸ÑниÑ, еÑли в
-IвÑбÑан ваÑианÑG.-sкоÑÑÑиÑиенÑ_маÑÑÑаба--scale=коÑÑÑиÑиенÑ_маÑÑÑаба#УмножиÑÑ ÑиÑло генеÑиÑÑемÑÑ ÑÑÑок на заданнÑй коÑÑÑиÑиенÑ. ÐапÑимеÑ, Ñ ÐºÐ»ÑÑом
-s 100в ÑаблиÑÑpgbench_accountsбÑдÑÑ Ð·Ð°Ð¿Ð¸ÑÐ°Ð½Ñ 10 000 000 ÑÑÑок. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ â 1. ÐÑи коÑÑÑиÑиенÑе, Ñавном 20 000 или болÑÑе, ÑÑолбÑÑ, ÑодеÑжаÑие иденÑиÑикаÑоÑÑ ÑÑеÑов (ÑÑолбÑÑaid), пеÑейдÑÑ Ðº болÑÑим ÑелÑм ÑиÑлам (ÑипÑbigint), ÑÑÐ¾Ð±Ñ Ð² Ð½Ð¸Ñ Ð¼Ð¾Ð³Ð»Ð¸ ÑмеÑÑиÑÑÑÑ Ð²Ñе возможнÑе знаÑÐµÐ½Ð¸Ñ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑов.--foreign-keys#СоздаÑÑ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ Ð²Ð½ÐµÑÐ½Ð¸Ñ ÐºÐ»ÑÑей Ð¼ÐµÐ¶Ð´Ñ ÑÑандаÑÑнÑми ÑаблиÑами. (ÐÑÐ¾Ñ ÐºÐ»ÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÑÐµÑ ÑÑап
fк поÑледоваÑелÑноÑÑи подгоÑовиÑелÑнÑÑ ÑÑапов, еÑли он оÑÑÑÑÑÑвÑеÑ.)--index-tablespace=#Ñабл_пÑоÑÑÑанÑÑво_индекÑовСоздаÑÑ Ð¸Ð½Ð´ÐµÐºÑÑ Ð² Ñказанном ÑаблиÑном пÑоÑÑÑанÑÑве, а не в пÑоÑÑÑанÑÑве по ÑмолÑаниÑ.
--partition-method=#ÐÐЯСоздаÑÑ ÑекÑиониÑованнÑÑ ÑаблиÑÑ
pgbench_accounts, пÑименив меÑодÐÐЯ(ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑrangeилиhash). ÐÐ»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑÑого паÑамеÑÑа Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾, ÑÑÐ¾Ð±Ñ Ð±Ñло задано ненÑлевое знаÑение--partitions. ÐÑли ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð½Ðµ ÑказÑваеÑÑÑ, подÑазÑмеваеÑÑÑ Ð¼ÐµÑодrange.--partitions=#ЧÐСÐÐСоздаÑÑ ÑекÑиониÑованнÑÑ ÑаблиÑÑ
pgbench_accountsÑ Ð·Ð°Ð´Ð°Ð½Ð½ÑмЧÐСÐÐÐÑекÑий пÑимеÑно Ñавного ÑазмеÑа в ÑооÑвеÑÑÑвии Ñ Ð¼Ð°ÑÑÑабиÑованнÑм колиÑеÑÑвом ÑÑеÑов. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¿Ð¾Ð´ÑазÑмеваеÑÑÑ ÑиÑло0, Ñо еÑÑÑ ÑаблиÑа не ÑекÑиониÑÑеÑÑÑ.--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=...) ÑÑанзакÑии, коÑоÑÑе оÑÑÑаÑÑ Ð¾Ñ Ð³ÑаÑика более Ñем на заданнÑйпÑедел(в мÑ) и поÑÑÐ¾Ð¼Ñ Ð½Ð¸ÐºÐ°Ðº не могÑÑ ÑложиÑÑÑÑ Ð² оÑведÑннÑй инÑеÑвал, не пеÑедаÑÑÑÑ ÑеÑвеÑÑ Ð²Ð¾Ð²Ñе. Ðни подÑÑиÑÑваÑÑÑÑ Ð¸ оÑмеÑаÑÑÑÑ Ð¾ÑделÑно как пÑопÑÑеннÑе.Ðогда иÑполÑзÑеÑÑÑ Ð¿Ð°ÑамеÑÑ
--max-tries, ÑÑанзакÑиÑ, пÑеÑÐ²Ð°Ð½Ð½Ð°Ñ Ð¸Ð·-за аномалии ÑеÑиализаÑии или взаимоблокиÑовки, не бÑÐ´ÐµÑ Ð¿Ð¾Ð²ÑоÑÑÑÑÑÑ, еÑли обÑее вÑÐµÐ¼Ñ Ð²ÑÐµÑ ÐµÑ Ð¿Ð¾Ð²ÑоÑений пÑевÑÑаеÑпÑеделв миллиÑекÑÐ½Ð´Ð°Ñ . ЧÑÐ¾Ð±Ñ Ð¾Ð³ÑаниÑиÑÑ ÑолÑко обÑее вÑÐµÐ¼Ñ Ð¿Ð¾Ð²ÑоÑений, а не Ð¸Ñ ÐºÐ¾Ð»Ð¸ÑеÑÑво, ÑÑÑановиÑе знаÑение--max-tries=0. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¿Ð°ÑамеÑÑ--max-triesÐ¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение 1, и ÑÑанзакÑии Ñ Ð¾Ñибками ÑеÑиализаÑии/взаимоблокиÑовки не повÑоÑÑÑÑÑÑ. ÐодÑобнее о повÑоÑнÑÑ Ð¿Ð¾Ð¿ÑÑÐºÐ°Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑÐ°ÐºÐ¸Ñ ÑÑанзакÑий ÑаÑÑказÑваеÑÑÑ Ð² ÐовÑоÑÑ Ð¸ оÑÐºÐ°Ð·Ñ Ð¸Ð·-за оÑибок ÑеÑиализаÑии/взаимоблокиÑовки.-MÑежим_запÑоÑов--protocol=Ñежим_запÑоÑов#ÐÑоÑокол, вÑбиÑаемÑй Ð´Ð»Ñ Ð¿ÐµÑедаÑи запÑоÑов на ÑеÑвеÑ:
simple: иÑполÑзоваÑÑ Ð¿ÑоÑÑой пÑоÑокол запÑоÑов.extended: иÑполÑзоваÑÑ ÑаÑÑиÑеннÑй пÑоÑокол запÑоÑов.prepared: иÑполÑзоваÑÑ ÑаÑÑиÑеннÑй пÑоÑокол запÑоÑов Ñ Ð¿Ð¾Ð´Ð³Ð¾ÑовленнÑми опеÑаÑоÑами.
Ð Ñежиме
preparedpgbench повÑоÑно иÑполÑзÑÐµÑ ÑезÑлÑÑÐ°Ñ ÑазбоÑа запÑоÑа, наÑÐ¸Ð½Ð°Ñ Ñо вÑоÑой иÑеÑаÑии, и поÑÑÐ¾Ð¼Ñ ÑабоÑÐ°ÐµÑ Ð±ÑÑÑÑее, Ñем в дÑÑÐ³Ð¸Ñ ÑÐµÐ¶Ð¸Ð¼Ð°Ñ .Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð²ÑбиÑаеÑÑÑ Ð¿ÑоÑÑой пÑоÑокол запÑоÑов. (Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº Ðлаве 54.)
-n--no-vacuum#Ðе пÑоизводиÑÑ Ð¾ÑиÑÑÐºÑ ÑÐ°Ð±Ð»Ð¸Ñ Ð¿ÐµÑед запÑÑком ÑеÑÑа. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼, еÑли Ð²Ñ Ð¿ÑименÑеÑе ÑобÑÑвеннÑй ÑÑенаÑий, не заÑÑагиваÑÑий ÑÑандаÑÑнÑе ÑаблиÑÑ
pgbench_accounts,pgbench_branches,pgbench_historyиpgbench_tellers.-N--skip-some-updates#ÐапÑÑÑиÑÑ Ð²ÑÑÑоеннÑй ÑпÑоÑÑннÑй ÑкÑÐ¸Ð¿Ñ simple-update. ÐÑаÑкий ваÑÐ¸Ð°Ð½Ñ Ð·Ð°Ð¿Ð¸Ñи
-b simple-update.-PÑек--progress=Ñек#ÐÑводиÑÑ Ð¾ÑÑÑÑ Ð¾ пÑогÑеÑÑе ÑеÑез заданное ÑиÑло ÑекÑнд (
Ñек). ÐÑдаваемÑй оÑÑÑÑ Ð²ÐºÐ»ÑÑÐ°ÐµÑ Ð²ÑемÑ, пÑоÑедÑее Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñа запÑÑка, ÑкоÑоÑÑÑ (в TPS) Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñа пÑедÑдÑÑего оÑÑÑÑа, а Ñакже ÑÑеднее вÑÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ ÑÑанзакÑий, ÑÑандаÑÑное оÑклонение и колиÑеÑÑво неÑÑпеÑнÑÑ ÑÑанзакÑий Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñа поÑледнего оÑÑÑÑа. Ð Ñежиме огÑаниÑÐµÐ½Ð¸Ñ ÑкоÑоÑÑи (-R) вÑÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ð²ÑÑиÑлÑеÑÑÑ Ð¾ÑноÑиÑелÑно назнаÑенного вÑемени запÑÑка ÑÑанзакÑии, а не ÑакÑиÑеÑкого вÑемени ÐµÑ Ð½Ð°Ñала, Ñак ÑÑо оно вклÑÑÐ°ÐµÑ Ð¸ ÑÑеднее вÑÐµÐ¼Ñ Ð¾ÑÑÑÐ°Ð²Ð°Ð½Ð¸Ñ Ð¾Ñ Ð³ÑаÑика. Ðогда паÑамеÑÑ--max-triesвклÑÑÐ°ÐµÑ Ð¿Ð¾Ð²ÑоÑение ÑÑанзакÑий поÑле оÑибок ÑеÑиализаÑии/взаимоблокиÑовок, в оÑÑÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÑеÑÑÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво повÑоÑÑвÑÐ¸Ñ ÑÑ ÑÑанзакÑий и обÑее ÑиÑло повÑоÑов.-r--report-per-command#ÐÑдаÑÑ ÑледÑÑÑÑÑ ÑÑаÑиÑÑÐ¸ÐºÑ Ð¿Ð¾ каждой команде поÑле завеÑÑÐµÐ½Ð¸Ñ ÑеÑÑа: ÑÑеднÑÑ Ð´Ð»Ð¸ÑелÑноÑÑÑ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑов (вÑÐµÐ¼Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñ ÑоÑки зÑÐµÐ½Ð¸Ñ ÐºÐ»Ð¸ÐµÐ½Ñа), ÑиÑло оÑказов и повÑоÑений вÑледÑÑвие оÑибок ÑеÑиализаÑии и взаимоблокиÑовки в ÑÑой команде. СÑаÑиÑÑика повÑоÑений оÑобÑажаеÑÑÑ Ð² оÑÑÑÑе, ÑолÑко еÑли паÑамеÑÑ
--max-triesне Ñавен 1.-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. С даннÑм паÑамеÑÑом в пÑоÑокол вÑводиÑÑÑ Ñводка по инÑеÑвалам, как опиÑано ниже.--failures-detailed#ÐÑдаваÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾Ð± оÑÐ¸Ð±ÐºÐ°Ñ Ð² пÑоÑоколе по ÑÑанзакÑиÑм и в пÑоÑоколе Ñ Ð°Ð³ÑегиÑованием, а Ñакже в оÑновном оÑÑÑÑе и в оÑÑÑÑÐ°Ñ Ð¿Ð¾ ÑкÑипÑам, гÑÑппиÑÑÑ ÐµÑ Ð¿Ð¾ Ñипам:
оÑибки ÑеÑиализаÑии;
оÑибки взаимоблокиÑовки;
Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº ÐовÑоÑÑ Ð¸ оÑÐºÐ°Ð·Ñ Ð¸Ð·-за оÑибок ÑеÑиализаÑии/взаимоблокиÑовки.
--log-prefix=#пÑеÑикÑÐадаÑÑ Ð¿ÑеÑÐ¸ÐºÑ Ð¸Ð¼Ñн Ñайлов Ð´Ð»Ñ Ñайлов пÑоÑоколов, ÑоздаваемÑÑ Ñ ÐºÐ»ÑÑом
--log. ÐÑеÑÐ¸ÐºÑ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ âpgbench_log.--max-tries=#ÑиÑло_попÑÑокРазÑеÑиÑÑ Ð¿Ð¾Ð²ÑоÑение ÑÑанзакÑий Ñ Ð¾Ñибками ÑеÑиализаÑии/взаимоблокиÑовки и ÑÑÑановиÑÑ Ð¼Ð°ÐºÑималÑное ÑиÑло попÑÑок вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑÑанзакÑий. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ комбиниÑоваÑÑ Ñ Ð¿Ð°ÑамеÑÑом
--latency-limit, коÑоÑÑй огÑаниÑÐ¸Ð²Ð°ÐµÑ Ð¾Ð±Ñее вÑÐµÐ¼Ñ Ð²ÑÐµÑ Ð¿Ð¾Ð¿ÑÑок Ð´Ð»Ñ ÑÑанзакÑии; Ñакже замеÑÑÑе, ÑÑо нелÑÐ·Ñ Ð²ÑбÑаÑÑ Ð½ÐµÐ¾Ð³ÑаниÑенное колиÑеÑÑво попÑÑок (--max-tries=0), не опÑеделив--latency-limitили--time. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ â 1, Ñо еÑÑÑ ÑÑанзакÑии Ñ Ð¾Ñибками ÑеÑиализаÑии/взаимоблокиÑовки повÑоÑÑÑÑÑÑ Ð½Ðµ бÑдÑÑ. ÐодÑобнее о повÑоÑении ÑÐ°ÐºÐ¸Ñ ÑÑанзакÑий ÑаÑÑказÑваеÑÑÑ Ð² ÐовÑоÑÑ Ð¸ оÑÐºÐ°Ð·Ñ Ð¸Ð·-за оÑибок ÑеÑиализаÑии/взаимоблокиÑовки.--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 ÑакÑиÑеÑкой ÑкоÑоÑÑи).
--show-script=имÑ_ÑкÑипÑа#ÐÑвеÑÑи код вÑÑÑоенного ÑкÑипÑа
имÑ_ÑкÑипÑав stderr и ÑÑÐ°Ð·Ñ Ð·Ð°Ð²ÐµÑÑиÑÑÑÑ.--verbose-errors#ÐÑводиÑÑ ÑообÑÐµÐ½Ð¸Ñ Ð¾Ð±Ð¾ вÑÐµÑ Ð¾ÑÐ¸Ð±ÐºÐ°Ñ ÑеÑиализаÑии/взаимоблокиÑовки и оÑÐºÐ°Ð·Ð°Ñ (оÑÐ¸Ð±ÐºÐ°Ñ , поÑле коÑоÑÑÑ ÑÑанзакÑÐ¸Ñ Ð½Ðµ повÑоÑÑеÑÑÑ) Ñ Ð¸Ð½ÑоÑмаÑией о Ñом, как огÑаниÑиваÑÑÑÑ Ð¿Ð¾Ð²ÑоÑÐµÐ½Ð¸Ñ Ð¸ наÑколÑко доÑÑигаеÑÑÑ Ð¾Ð³ÑаниÑение. (УÑÑиÑе, ÑÑо в ÑÑом ÑлÑÑае обÑÑм вÑвода Ð¼Ð¾Ð¶ÐµÑ Ð·Ð½Ð°ÑиÑелÑно ÑвелиÑиÑÑÑÑ.) Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº ÐовÑоÑÑ Ð¸ оÑÐºÐ°Ð·Ñ Ð¸Ð·-за оÑибок ÑеÑиализаÑии/взаимоблокиÑовки.
ÐбÑие паÑамеÑÑÑ #
ÐÑогÑамма pgbench Ñакже пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð¾Ð±Ñие аÑгÑменÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ ÑÑÑоки, опÑеделÑÑÑие паÑамеÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ:
-hкомпÑÑÑеÑ--host=компÑÑÑеÑ#ÐдÑÐµÑ ÑеÑвеÑа баз даннÑÑ
-pпоÑÑ--port=поÑÑ#ÐÐ¾Ð¼ÐµÑ Ð¿Ð¾ÑÑа ÑеÑвеÑа баз даннÑÑ
-UимÑ_полÑзоваÑелÑ--username=имÑ_полÑзоваÑелÑ#ÐÐ¼Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ
-V--version#ÐÑвеÑÑи веÑÑÐ¸Ñ pgbench и завеÑÑиÑÑÑÑ.
-?--help#ÐÑвеÑÑи ÑпÑÐ°Ð²ÐºÑ Ð¾Ð± аÑгÑменÑÐ°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ ÑÑÑоки pgbench и завеÑÑиÑÑÑÑ.
Ðод завеÑÑениÑ
Ð ÑлÑÑае ÑÑпеÑного вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑÑÑ ÐºÐ¾Ð´ 0. Ðод завеÑÑÐµÐ½Ð¸Ñ 1 ÑказÑÐ²Ð°ÐµÑ Ð½Ð° ÑÑаÑиÑнÑе пÑоблемÑ, напÑÐ¸Ð¼ÐµÑ Ð¾Ñибки в паÑамеÑÑÐ°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ ÑÑÑоки или внÑÑÑенние оÑибки, коÑоÑÑе не Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿ÑоиÑÑ Ð¾Ð´Ð¸ÑÑ. Ð ÑлÑÑае оÑибок, возникаÑÑÐ¸Ñ Ð½Ð° ÑÐ°Ð½Ð½Ð¸Ñ ÑÑÐ°Ð¿Ð°Ñ Ð¿Ñи запÑÑке ÑеÑÑа, напÑÐ¸Ð¼ÐµÑ Ð¿Ñи Ñбое наÑалÑного подклÑÑениÑ, кодом завеÑÑÐµÐ½Ð¸Ñ Ñакже бÑÐ´ÐµÑ 1. ÐÑи возникновении оÑибок во вÑÐµÐ¼Ñ Ð²ÑполнениÑ, напÑÐ¸Ð¼ÐµÑ Ð¿Ñи обÑаÑении к базе даннÑÑ Ð¸Ð»Ð¸ вÑполнении ÑкÑипÑа, вÑдаÑÑÑÑ ÐºÐ¾Ð´ завеÑÑÐµÐ½Ð¸Ñ 2. РпоÑледнем ÑлÑÑае pgbench вÑÐ²ÐµÐ´ÐµÑ ÑаÑÑиÑнÑе ÑезÑлÑÑаÑÑ.
ÐеÑеменнÑе окÑÑжениÑ
PGDATABASEPGHOSTPGPORTPGUSER#ÐаÑамеÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ.
Ðак и болÑÑинÑÑво дÑÑÐ³Ð¸Ñ ÑÑÐ¸Ð»Ð¸Ñ Postgres Pro, пÑиложение Ñакже иÑполÑзÑÐµÑ Ð¿ÐµÑеменнÑе окÑÑжениÑ, поддеÑживаемÑе libpq (Ñм. Раздел 33.15).
ÐеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¾ÐºÑÑÐ¶ÐµÐ½Ð¸Ñ PG_COLOR вÑбиÑÐ°ÐµÑ Ð²Ð°ÑÐ¸Ð°Ð½Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑвеÑа в диагноÑÑиÑеÑкиÑ
ÑообÑениÑÑ
. ÐозможнÑе знаÑениÑ: always (вÑегда), auto (авÑомаÑиÑеÑки) и never (никогда).
ÐÑимеÑаниÑ
Ðаково ÑодеÑжание «ÑÑанзакÑии», коÑоÑÑÑ Ð²ÑполнÑÐµÑ 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 в оÑделÑной ÑÑÑоке и завеÑÑайÑе ÐµÑ ÑоÑкой Ñ Ð·Ð°Ð¿ÑÑой.
ÐÑедполагаеÑÑÑ, ÑÑо ÑкÑипÑÑ pgbench не ÑодеÑÐ¶Ð°Ñ Ð½ÐµÐ·Ð°Ð²ÐµÑÑÑннÑÑ Ð±Ð»Ð¾ÐºÐ¾Ð² SQL-ÑÑанзакÑий. ÐÑли по доÑÑижении клиенÑом конÑа ÑкÑипÑа окажеÑÑÑ, ÑÑо блок поÑледней ÑÑанзакÑии не завеÑÑÑн, ÑабоÑа клиенÑа бÑÐ´ÐµÑ Ð¿ÑеÑвана.
ÐÐ»Ñ Ñайлов ÑкÑипÑов Ñеализован пÑоÑÑой меÑ
анизм подÑÑановки пеÑеменнÑÑ
. ÐÐ¼Ñ Ð¿ÐµÑеменнÑÑ
должно ÑоÑÑоÑÑÑ Ð¸Ð· бÑкв (бÑÐºÐ²Ñ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð½Ðµ лаÑинÑкими), подÑÑÑкиваний и ÑиÑÑ (но ÑиÑÑа не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÐµÑвÑм Ñимволом). ÐеÑеменнÑе можно задаÑÑ Ð² командной ÑÑÑоке паÑамеÑÑами -D, опиÑаннÑми вÑÑе, или меÑакомандами, ÑаÑÑмаÑÑиваемÑми ниже. Ðомимо пеÑеменнÑÑ
, коÑоÑÑе можно ÑÑÑановиÑÑ Ð¿Ð°ÑамеÑÑами командной ÑÑÑоки -D, еÑÑÑ Ð½ÐµÑколÑко авÑомаÑиÑеÑки ÑÑÑанавливаемÑÑ
пеÑеменнÑÑ
; они пеÑеÑиÑÐ»ÐµÐ½Ñ Ð² ТаблиÑе 297. ÐÑли знаÑение ÑÑиÑ
пеÑеменнÑÑ
задаÑÑÑÑ Ð² паÑамеÑÑе -D, оно пеÑеопÑеделÑÐµÑ Ð°Ð²ÑомаÑиÑеÑкое знаÑение. Ðогда знаÑение пеÑеменной опÑеделено, его можно вÑÑавиÑÑ Ð² ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ SQL, напиÑав :имÑ_пеÑеменной. ÐаждÑй клиенÑÑкий ÑеанÑ, еÑли иÑ
неÑколÑко, полÑÑÐ°ÐµÑ ÑобÑÑвеннÑй Ð½Ð°Ð±Ð¾Ñ Ð¿ÐµÑеменнÑÑ
. Родном опеÑаÑоÑе pgbench поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð´Ð¾ 255 ÑÑÑлок на пеÑеменнÑе.
ТаблиÑа 297. ÐвÑомаÑиÑеÑкие пеÑеменнÑе pgbench
| ÐеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ | ÐпиÑание |
|---|---|
client_id | ÑникалÑное ÑиÑло, иденÑиÑиÑиÑÑÑÑее клиенÑÑкий ÑÐµÐ°Ð½Ñ (наÑÐ¸Ð½Ð°Ñ Ñ Ð½ÑлÑ) |
default_seed | заÑÑавка, по ÑмолÑÐ°Ð½Ð¸Ñ Ð¸ÑполÑзÑÐµÐ¼Ð°Ñ Ð² ÑÑнкÑиÑÑ , вÑÑиÑлÑÑÑÐ¸Ñ Ñ ÐµÑ Ð¸ пÑевдоÑлÑÑайнÑе пеÑеÑÑановки |
random_seed | заÑÑавка генеÑаÑоÑа ÑлÑÑайнÑÑ
ÑиÑел (в оÑÑÑÑÑÑвие пеÑеопÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ ÐºÐ»ÑÑом -D) |
scale | ÑекÑÑий коÑÑÑиÑÐ¸ÐµÐ½Ñ Ð¼Ð°ÑÑÑаба |
ÐеÑÐ°ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð² ÑкÑипÑе наÑинаÑÑÑÑ Ñ Ð¾Ð±ÑаÑной коÑой ÑеÑÑÑ (\) и обÑÑно пÑодолжаÑÑÑÑ Ð´Ð¾ конÑа ÑÑÑоки, Ñ
оÑÑ Ð¸Ñ
можно пеÑеноÑиÑÑ Ð½Ð° ÑледÑÑÑÑÑ ÑÑÑÐ¾ÐºÑ Ð¿Ð¾ÑледоваÑелÑноÑÑÑÑ Ñимволов: обÑаÑÐ½Ð°Ñ ÐºÐ¾ÑаÑ, возвÑÐ°Ñ ÐºÐ°ÑеÑки. ÐÑгÑменÑÑ Ð¼ÐµÑакоманд ÑазделÑÑÑÑÑ Ð¿Ñобелами. ÐоддеÑживаемÑе меÑÐ°ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð¿ÑедÑÑÐ°Ð²Ð»ÐµÐ½Ñ Ð½Ð¸Ð¶Ðµ:
-
\gset [пÑеÑикÑ]\aset [#пÑеÑикÑ] ÐÑи ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð¼Ð¾Ð³ÑÑ Ð¿ÑименÑÑÑÑÑ Ð´Ð»Ñ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ SQL-запÑоÑов вмеÑÑо завеÑÑаÑÑей ÑоÑки Ñ Ð·Ð°Ð¿ÑÑой (
;).Ðогда иÑполÑзÑеÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°
\gset, ожидаеÑÑÑ, ÑÑо пÑедÑдÑÑий SQL-запÑÐ¾Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ¸Ñ Ð¾Ð´Ð½Ñ ÑÑÑокÑ; знаÑÐµÐ½Ð¸Ñ ÑÑолбÑов бÑдÑÑ ÑÐ¾Ñ ÑÐ°Ð½ÐµÐ½Ñ Ð² пеÑеменнÑе Ñ Ð¸Ð¼ÐµÐ½Ð°Ð¼Ð¸ ÑÑолбÑов, а еÑли ÑказанпÑеÑикÑ, он бÑÐ´ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½ в ÑÑи имена.Ðогда иÑполÑзÑеÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°
\aset, знаÑÐµÐ½Ð¸Ñ ÑÑолбÑов вÑÐµÑ ÑовмеÑÑннÑÑ SQL-запÑоÑов (ÑазделÑннÑÑ\;) бÑдÑÑ ÑÐ¾Ñ ÑÐ°Ð½ÐµÐ½Ñ Ð² пеÑеменнÑе, названнÑе по именам ÑÑолбÑов Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼Ð¿ÑеÑикÑа, еÑли он задан. ÐÑли запÑÐ¾Ñ Ð½Ðµ возвÑаÑÐ°ÐµÑ Ð² ÑезÑлÑÑаÑе ÑÑÑоки, пÑиÑваивание не вÑполнÑеÑÑÑ Ð¸ в ÑÑом можно ÑбедиÑÑÑÑ, пÑовеÑив, ÑÑÑеÑÑвÑÐµÑ Ð»Ð¸ пеÑеменнаÑ. ÐÑли запÑÐ¾Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ Ð½ÐµÑколÑко ÑÑÑок, в пеÑеменнÑÑ ÑÐ¾Ñ ÑанÑеÑÑÑ Ð¿Ð¾Ñледнее знаÑение.ÐомандÑ
\gsetи\asetнелÑÐ·Ñ Ð¸ÑполÑзоваÑÑ Ð² конвейеÑном Ñежиме, Ñак как ко вÑемени, когда ÑезÑлÑÑаÑÑ Ð·Ð°Ð¿ÑоÑов могÑÑ Ð¿Ð¾Ð½Ð°Ð´Ð¾Ð±Ð¸ÑÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ðµ, они еÑÑ Ð½Ðµ бÑдÑÑ Ð³Ð¾ÑовÑ.Ð ÑледÑÑÑем пÑимеÑе иÑоговÑй Ð±Ð°Ð»Ð°Ð½Ñ ÑÑÑÑа из пеÑвого запÑоÑа Ð¿Ð¾Ð¿Ð°Ð´Ð°ÐµÑ Ð² пеÑеменнÑÑ
abalance, а ÑелоÑиÑленнÑе знаÑÐµÐ½Ð¸Ñ Ð¸Ð· ÑÑеÑÑего запÑоÑа попадаÑÑ Ð² пеÑеменнÑеp_twoиp_three. РезÑлÑÑÐ°Ñ Ð²ÑоÑого запÑоÑа оÑбÑаÑÑваеÑÑÑ. РезÑлÑÑаÑÑ Ð´Ð²ÑÑ Ð¿Ð¾ÑÐ»ÐµÐ´Ð½Ð¸Ñ Ð·Ð°Ð¿ÑоÑов обÑединÑÑÑÑÑ Ð¸ ÑÐ¾Ñ ÑанÑÑÑÑÑ Ð² пеÑеменнÑÑfourиfive.UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid RETURNING abalance \gset -- обÑединÑÐµÑ Ð´Ð²Ð° запÑоÑа SELECT 1 \; SELECT 2 AS two, 3 AS three \gset p_ SELECT 4 AS four \; SELECT 5 AS five \aset
\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 команда ÑÑÑоковÑй_аÑгÑÐ¼ÐµÐ½Ñ :пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ ::ÑÑÑока_наÑинаÑÑаÑÑÑ_двоеÑоÑием
\startpipeline\endpipeline#ÐÑи ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð¾ÑделÑÑÑ Ð½Ð°Ñало и ÐºÐ¾Ð½ÐµÑ ÐºÐ¾Ð½Ð²ÐµÐ¹ÐµÑа SQL-команд. РконвейеÑном Ñежиме ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð¿ÐµÑедаÑÑÑÑ ÑеÑвеÑÑ, не дожидаÑÑÑ ÑезÑлÑÑаÑов пÑедÑдÑÑÐ¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´. Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº РазделÑ 33.5. ÐÐ»Ñ ÐºÐ¾Ð½Ð²ÐµÐ¹ÐµÑного Ñежима должен иÑполÑзоваÑÑÑÑ ÑаÑÑиÑеннÑй пÑоÑокол запÑоÑов.
ÐÑÑÑоеннÑе опеÑаÑоÑÑ #
ÐеÑеÑиÑленнÑе в ТаблиÑе 298 аÑиÑмеÑиÑеÑкие, биÑовÑе и логиÑеÑкие опеÑаÑоÑÑ, а Ñакже опеÑаÑоÑÑ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð²ÑÑÑÐ¾ÐµÐ½Ñ Ð² pgbench и могÑÑ Ð¿ÑименÑÑÑÑÑ Ð² вÑÑажениÑÑ
в \set. ÐÑи опеÑаÑоÑÑ Ð¿ÑÐ¸Ð²ÐµÐ´ÐµÐ½Ñ Ð² поÑÑдке возÑаÑÑÐ°Ð½Ð¸Ñ Ð¸Ñ
пÑиоÑиÑеÑа. Ðе ÑÑиÑÐ°Ñ Ñвно оÑмеÑеннÑÑ
иÑклÑÑений, опеÑаÑоÑÑ Ñ Ð´Ð²ÑÐ¼Ñ ÑиÑловÑми аÑгÑменÑами бÑдÑÑ Ð²ÑдаваÑÑ ÑезÑлÑÑÐ°Ñ Ð² Ñипе Ñ Ð¿Ð»Ð°Ð²Ð°ÑÑей ÑоÑкой, еÑли какой-либо аÑгÑÐ¼ÐµÐ½Ñ Ð¸Ð¼ÐµÐµÑ Ñакой Ñип; в пÑоÑивном ÑлÑÑае ÑезÑлÑÑÐ°Ñ Ð±ÑÐ´ÐµÑ ÑелоÑиÑленнÑм.
ТаблиÑа 298. ÐпеÑаÑоÑÑ pgbench
ÐпеÑаÑÐ¾Ñ ÐпиÑание ÐÑимеÑÑ |
|---|
ÐогиÑеÑкое ÐÐÐ
|
ÐогиÑеÑкое Ð
|
ÐогиÑеÑкое ÐÐ
|
ÐогиÑеÑкие пÑовеÑки знаÑений
|
ÐÑовеÑки на NULL
|
Равно
|
Ðе Ñавно
|
Ðе Ñавно
|
ÐенÑÑе
|
ÐенÑÑе или Ñавно
|
ÐолÑÑе
|
ÐолÑÑе или Ñавно
|
ÐиÑовое ÐÐÐ
|
ÐиÑовое иÑклÑÑаÑÑее ÐÐÐ
|
ÐиÑовое Ð
|
ÐиÑовое ÐÐ
|
ÐиÑовÑй Ñдвиг влево
|
ÐиÑовÑй Ñдвиг впÑаво
|
Сложение
|
ÐÑÑиÑание
|
Умножение
|
Ðеление (еÑли оба аÑгÑменÑа ÑелоÑиÑленнÑе, ÑезÑлÑÑÐ°Ñ Ð¾ÐºÑÑглÑеÑÑÑ Ð² ÑÑоÑÐ¾Ð½Ñ Ð½ÑлÑ)
|
ÐÑÑаÑок Ð¾Ñ Ð´ÐµÐ»ÐµÐ½Ð¸Ñ
|
Смена знака
|
ÐÑÑÑоеннÑе ÑÑнкÑии #
ФÑнкÑии, пеÑеÑиÑленнÑе в ТаблиÑе 299, вÑÑÑÐ¾ÐµÐ½Ñ Ð² pgbench и могÑÑ Ð¿ÑименÑÑÑÑÑ Ð² вÑÑажениÑÑ
в меÑакоманде \set.
ТаблиÑа 299. ФÑнкÑии pgbench
ФÑнкÑÐ¸Ñ ÐпиÑание ÐÑимеÑÑ |
|---|
ÐодÑÐ»Ñ ÑиÑла (абÑолÑÑное знаÑение)
|
ÐÑÐ²Ð¾Ð´Ð¸Ñ Ð°ÑгÑÐ¼ÐµÐ½Ñ Ð² stderr и вÑдаÑÑ ÐµÐ³Ð¾.
|
ÐÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ð°ÑгÑÐ¼ÐµÐ½Ñ Ðº ÑÐ¸Ð¿Ñ Ñ Ð¿Ð»Ð°Ð²Ð°ÑÑей ÑоÑкой.
|
ÐкÑпоненÑа (
|
ÐÑбиÑÐ°ÐµÑ Ð½Ð°Ð¸Ð±Ð¾Ð»ÑÑее знаÑение ÑÑеди аÑгÑменÑов.
|
ÐÑевдоним
|
ÐÑÑиÑлÑÐµÑ Ñ ÐµÑ Ð¿Ð¾ алгоÑиÑÐ¼Ñ FNV-1a.
|
ÐÑÑиÑлÑÐµÑ Ñ ÐµÑ Ð¿Ð¾ алгоÑиÑÐ¼Ñ MurmurHash2.
|
ÐÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ð°ÑгÑÐ¼ÐµÐ½Ñ Ðº ÑелоÑиÑÐ»ÐµÐ½Ð½Ð¾Ð¼Ñ ÑипÑ.
|
ÐÑбиÑÐ°ÐµÑ Ð½Ð°Ð¸Ð¼ÐµÐ½ÑÑее знаÑение ÑÑеди аÑгÑменÑов.
|
ÐаÑÑÑалÑнÑй логаÑиÑм
|
ÐÑÑаÑок Ð¾Ñ Ð´ÐµÐ»ÐµÐ½Ð¸Ñ
|
ÐеÑеÑÑавленное знаÑение
|
ÐÑиближÑнное знаÑение Ï
|
ÐозводиÑ
|
ÐÑдаÑÑ ÑлÑÑайное Ñелое ÑиÑло Ñ ÑавномеÑнÑм ÑаÑпÑеделением в инÑеÑвале
|
ÐÑдаÑÑ ÑлÑÑайное Ñелое ÑиÑло Ñ ÑкÑпоненÑиалÑнÑм ÑаÑпÑеделением в инÑеÑвале
|
ÐÑдаÑÑ Ñелое ÑиÑло Ñ ÑаÑпÑеделением ÐаÑÑÑа в инÑеÑвале
|
ÐÑдаÑÑ Ñелое ÑиÑло Ñ ÑаÑпÑеделением ЦипÑа в инÑеÑвале
|
ÐвадÑаÑнÑй коÑенÑ
|
ФÑнкÑÐ¸Ñ 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].
ÐÑимеÑание
РазÑабаÑÑÐ²Ð°Ñ ÑеÑÑ Ð¿ÑоизводиÑелÑноÑÑи, вÑбиÑаÑÑий ÑÑÑоки неÑавномеÑно, ÑÑÑиÑе, ÑÑо вÑбиÑаемÑе ÑÑÑоки могÑÑ ÐºÐ¾ÑÑелиÑоваÑÑ Ñ Ð´ÑÑгими даннÑми, напÑимеÑ, иденÑиÑикаÑоÑами, вÑдаваемÑми поÑледоваÑелÑноÑÑÑми, или ÑизиÑеÑким ÑаÑположением ÑÑÑок, а ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑкажаÑÑ Ð¾Ñенки пÑоизводиÑелÑноÑÑи.
ЧÑÐ¾Ð±Ñ Ð¸Ð·Ð±ÐµÐ¶Ð°ÑÑ ÑÑого, можно иÑполÑзоваÑÑ ÑÑнкÑÐ¸Ñ permute Ð´Ð»Ñ Ð¿ÐµÑемеÑÐ¸Ð²Ð°Ð½Ð¸Ñ Ð²ÑбÑаннÑÑ
ÑÑÑок и ÑÑÑÑÐ°Ð½ÐµÐ½Ð¸Ñ ÑакиÑ
коÑÑелÑÑий, либо вÑполниÑÑ Ð´ÑÑгие дополниÑелÑнÑе опеÑаÑии, даÑÑие подобнÑй ÑÑÑекÑ.
ФÑнкÑии Ñ
еÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ hash, hash_murmur2 и hash_fnv1a пÑинимаÑÑ Ð½Ð° вÑ
од Ñ
еÑиÑÑемое знаÑение и необÑзаÑелÑнÑй паÑамеÑÑ Ñ Ð·Ð°ÑÑавкой. ÐÑли знаÑение заÑÑавки не задаÑÑÑÑ, иÑполÑзÑеÑÑÑ Ð·Ð½Ð°Ñение пеÑеменной :default_seed, коÑоÑÐ°Ñ Ð¸Ð½Ð¸ÑиализиÑÑеÑÑÑ ÑлÑÑайнÑм ÑиÑлом (еÑли не задаÑÑÑÑ Ñвно клÑÑом командной ÑÑÑоки -D).
ФÑнкÑÐ¸Ñ permute пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð²Ñ
одное знаÑение, ÑÐ°Ð·Ð¼ÐµÑ Ð¸ необÑзаÑелÑнÑй паÑамеÑÑ Ñ Ð·Ð°ÑÑавкой. Ðна полÑÑÐ°ÐµÑ Ð¿ÑевдоÑлÑÑайнÑÑ Ð¿ÐµÑеÑÑÐ°Ð½Ð¾Ð²ÐºÑ ÑелÑÑ
ÑиÑел в диапазоне [0, ÑазмеÑ) и возвÑаÑÐ°ÐµÑ Ð¸Ð½Ð´ÐµÐºÑ Ð²Ñ
одного знаÑÐµÐ½Ð¸Ñ Ð² ÑÑой пеÑеÑÑановке. ÐÑбиÑÐ°ÐµÐ¼Ð°Ñ Ð¿ÐµÑеÑÑановка завиÑÐ¸Ñ Ð¾Ñ Ð·Ð°ÑÑавки; по ÑмолÑÐ°Ð½Ð¸Ñ Ð·Ð°ÑÑавкой бÑÐ´ÐµÑ Ð·Ð½Ð°Ñение :default_seed. РоÑлиÑие Ð¾Ñ ÑÑнкÑий вÑÑиÑÐ»ÐµÐ½Ð¸Ñ Ñ
еÑа, ÑÑнкÑÐ¸Ñ permute гаÑанÑиÑÑÐµÑ Ð¾ÑÑÑÑÑÑвие пÑопÑÑков и наложений в вÑÑ
однÑÑ
знаÑениÑÑ
. ÐÑ
однÑе знаÑениÑ, лежаÑие за гÑаниÑами инÑеÑвала, пеÑеÑÑиÑÑваÑÑÑÑ Ð¿Ð¾ модÑÐ»Ñ ÑазмеÑа. ÐÑли знаÑение ÑазмеÑа не положиÑелÑное, ÑÑа ÑÑнкÑÐ¸Ñ Ð²ÑдаÑÑ Ð¾ÑибкÑ. ФÑнкÑÐ¸Ñ permute можно иÑполÑзоваÑÑ Ð´Ð»Ñ Ð²ÑÑÐ°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸Ñ ÑезÑлÑÑаÑов ÑÑнкÑий, вÑдаÑÑиÑ
неÑавномеÑно ÑаÑпÑеделÑннÑе ÑлÑÑайнÑе ÑиÑла, ÑакиÑ
как random_zipfian или random_exponential, ÑÑÐ¾Ð±Ñ ÑаÑе вÑдаваемÑе знаÑÐµÐ½Ð¸Ñ Ð½Ðµ Ñоздавали коÑÑелÑÑии. ÐапÑимеÑ, ÑледÑÑÑий ÑкÑÐ¸Ð¿Ñ pgbench ÑмÑлиÑÑÐµÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½ÑÑ ÑеалÑнÑÑ Ð½Ð°Ð³ÑÑзкÑ, ÑипиÑнÑÑ Ð´Ð»Ñ ÑоÑиалÑнÑÑ
медиа- и блог-плаÑÑоÑм, где неÑколÑко полÑзоваÑелей генеÑиÑÑÑÑ Ð»ÑвинÑÑ Ð´Ð¾Ð»Ñ Ð½Ð°Ð³ÑÑзки:
\set size 1000000 \set r random_zipfian(1, :size, 1.07) \set k 1 + permute(:r, :size)
РнекоÑоÑÑÑ ÑлÑÑаÑÑ ÑÑебÑÑÑÑÑ Ð´ÑÑгие ÑазнообÑазнÑе ÑаÑпÑеделениÑ, не коÑÑелиÑÑÑÑие дÑÑг Ñ Ð´ÑÑгом, и Ñогда Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾ дополниÑелÑно ÑказаÑÑ Ð·Ð°ÑÑавкÑ:
\set k1 1 + permute(:r, :size, :default_seed + 123) \set k2 1 + permute(:r, :size, :default_seed + 321)
ÐÑимеÑно Ñакого же ÑÑÑекÑа можно добиÑÑÑÑ, иÑполÑзÑÑ ÑÑнкÑÐ¸Ñ hash:
\set size 1000000 \set r random_zipfian(1, 100 * :size, 1.07) \set k 1 + abs(hash(:r)) % :size
Ðо Ñак как hash Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾ÑождаÑÑ ÐºÐ¾Ð»Ð»Ð¸Ð·Ð¸Ð¸, некоÑоÑÑе знаÑÐµÐ½Ð¸Ñ Ð¾ÐºÐ°Ð¶ÑÑÑÑ Ð¿ÑопÑÑеннÑми, а дÑÑгие бÑдÑÑ Ð²ÑÑÑеÑаÑÑÑÑ ÑаÑе дÑÑгиÑ
, пÑи Ñом ÑÑо в иÑÑ
одном ÑаÑпÑеделении ÑÑого не наблÑдалоÑÑ.
РкаÑеÑÑве пÑимеÑа взглÑниÑе на вÑÑÑоенное опÑеделение ÑÑанзакÑии Ñипа 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.
ÐÐ°Ð¶Ð´Ð°Ñ ÑÑÑока в Ñайле пÑоÑокола опиÑÑÐ²Ð°ÐµÑ Ð¾Ð´Ð½Ñ ÑÑанзакÑиÑ. Ðна ÑодеÑÐ¶Ð¸Ñ ÑледÑÑÑие полÑ, ÑазделÑннÑе пÑобелами:
код_клиенÑаиденÑиÑиÑиÑÑÐµÑ ÐºÐ»Ð¸ÐµÐ½ÑÑкий ÑеанÑ, в коÑоÑом вÑполнÑлаÑÑ ÑÑанзакÑиÑ
ÑиÑло_ÑÑанзакÑийпоказÑваеÑ, ÑколÑко SQL-ÑÑанзакÑий бÑло вÑполнено в ÑÑом ÑеанÑе
длиÑелÑноÑÑÑобÑее вÑÐµÐ¼Ñ ÑÑанзакÑии, в микÑоÑекÑндаÑ
номеÑ_ÑкÑипÑапоказÑваеÑ, какой Ñайл ÑкÑипÑа иÑполÑзовалÑÑ (ÑÑо полезно пÑи Ñказании неÑколÑÐºÐ¸Ñ ÑкÑипÑов клÑÑами
-fи-b)вÑемÑ_ÑÐ¿Ð¾Ñ Ð¸Ð¾ÑмеÑка вÑемени в ÑоÑмаÑе Unix, показÑваÑÑаÑ, когда ÑÑанзакÑÐ¸Ñ Ð±Ñла завеÑÑена
вÑемÑ_мкÑмикÑоÑекÑÐ½Ð´Ñ Ð² оÑмеÑке вÑемени, показÑваÑÑей, когда ÑÑанзакÑÐ¸Ñ Ð±Ñла завеÑÑена
оÑÑÑавание_оÑ_гÑаÑиказадеÑжка наÑала ÑÑанзакÑии, коÑоÑÐ°Ñ Ð¿ÑедÑÑавлÑÐµÑ Ñобой ÑазниÑÑ Ð¼ÐµÐ¶Ð´Ñ Ð·Ð°Ð¿Ð»Ð°Ð½Ð¸ÑованнÑм вÑеменем запÑÑка ÑÑанзакÑии и ÑакÑиÑеÑким вÑеменем запÑÑка, в микÑоÑекÑÐ½Ð´Ð°Ñ (вÑводиÑÑÑ, ÑолÑко когда Ñказан паÑамеÑÑ
--rate)повÑоÑнÑе_попÑÑкиÑиÑло повÑоÑений ÑÑанзакÑии поÑле оÑибок ÑеÑиализаÑии или взаимоблокиÑовки (вÑводиÑÑÑ, ÑолÑко когда
--max-triesне Ñавен одномÑ)
Ðогда одновÑеменно пÑименÑÑÑÑÑ Ð¿Ð°ÑамеÑÑÑ --rate и --latency-limit, в поле длиÑелÑноÑÑÑ Ð´Ð»Ñ Ð¿ÑопÑÑеннÑÑ
ÑÑанзакÑий вÑводиÑÑÑ skipped. ÐÑли ÑÑанзакÑÐ¸Ñ Ð·Ð°Ð²ÐµÑÑилаÑÑ Ð½ÐµÑдаÑей, в ÑÑолбÑе длиÑелÑноÑÑÑ Ð²ÑводиÑÑÑ failed. Ðогда пÑименÑеÑÑÑ Ð¿Ð°ÑамеÑÑ --failures-detailed, вмеÑÑо длиÑелÑноÑÑи Ð´Ð»Ñ Ð½ÐµÑÑпеÑной ÑÑанзакÑии бÑÐ´ÐµÑ Ñказано serialization или deadlock в завиÑимоÑÑи Ð¾Ñ Ñипа оÑибки (за дополниÑелÑнÑми ÑведениÑми обÑаÑиÑеÑÑ Ðº ÐовÑоÑÑ Ð¸ оÑÐºÐ°Ð·Ñ Ð¸Ð·-за оÑибок ÑеÑиализаÑии/взаимоблокиÑовки).
ФÑÐ°Ð³Ð¼ÐµÐ½Ñ Ð¿ÑоÑокола, полÑÑенного пÑи вÑполнении Ñ Ð¾Ð´Ð½Ð¸Ð¼ клиенÑом:
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 мÑ. СледÑÑÑие две ÑÑанзакÑии бÑли пÑопÑÑенÑ, Ñак как бÑло ÑлиÑком поздно Ð¸Ñ Ð½Ð°ÑинаÑÑ.
Ðиже показан ÑÑÐ°Ð³Ð¼ÐµÐ½Ñ Ð¿ÑоÑокола Ñ Ð¾Ñказами и повÑоÑнÑми попÑÑками пÑи макÑималÑном ÑиÑле попÑÑок, Ñавном 10 (обÑаÑиÑе внимание на дополниÑелÑнÑй ÑÑÐ¾Ð»Ð±ÐµÑ Ð¿Ð¾Ð²ÑоÑнÑе_попÑÑки):
3 0 47423 0 1499414498 34501 3 3 1 8333 0 1499414498 42848 0 3 2 8358 0 1499414498 51219 0 4 0 72345 0 1499414498 59433 6 1 3 41718 0 1499414498 67879 4 1 4 8416 0 1499414498 76311 0 3 3 33235 0 1499414498 84469 3 0 0 failed 0 1499414498 84905 9 2 0 failed 0 1499414498 86248 9 3 4 8307 0 1499414498 92788 0
ÐÑли пÑименÑеÑÑÑ Ð¿Ð°ÑамеÑÑ --failures-detailed, в гÑаÑе длиÑелÑноÑÑÑ Ð²ÑводиÑÑÑ Ñип оÑибки:
3 0 47423 0 1499414498 34501 3 3 1 8333 0 1499414498 42848 0 3 2 8358 0 1499414498 51219 0 4 0 72345 0 1499414498 59433 6 1 3 41718 0 1499414498 67879 4 1 4 8416 0 1499414498 76311 0 3 3 33235 0 1499414498 84469 3 0 0 serialization 0 1499414498 84905 9 2 0 serialization 0 1499414498 86248 9 3 4 8307 0 1499414498 92788 0
Ðогда пÑоводиÑÑÑ Ð´Ð»Ð¸ÑелÑное ÑеÑÑиÑование Ñ Ð±Ð¾Ð»ÑÑим колиÑеÑÑвом ÑÑанзакÑий, ÑÐ°Ð¹Ð»Ñ Ð¿ÑоÑоколов могÑÑ Ð±ÑÑÑ Ð¾ÑÐµÐ½Ñ Ð¾Ð±ÑÑмнÑми. ЧÑÐ¾Ð±Ñ Ð² ниÑ
запиÑÑвалаÑÑ ÑолÑко ÑлÑÑÐ°Ð¹Ð½Ð°Ñ Ð²ÑбоÑка ÑÑанзакÑий, можно запÑÑÑиÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ñ Ð¿Ð°ÑамеÑÑом --sampling-rate.
ÐÑоÑоколиÑование Ñ Ð°Ð³ÑегиÑованием
С паÑамеÑÑом --aggregate-interval Ð´Ð»Ñ Ñайлов пÑоÑоколов иÑполÑзÑеÑÑÑ Ð´ÑÑгой ÑоÑмаÑ. ÐÐ°Ð¶Ð´Ð°Ñ ÑÑÑока пÑоÑокола опиÑÑÐ²Ð°ÐµÑ Ð¾Ð´Ð¸Ð½ инÑеÑвал агÑегаÑии. Ðна ÑодеÑÐ¶Ð¸Ñ ÑледÑÑÑие полÑ, ÑазделÑннÑе пÑобелами:
наÑало_инÑеÑваланаÑалÑное вÑÐµÐ¼Ñ Ð¸Ð½ÑеÑвала в ÑоÑмаÑе вÑемени Unix
ÑиÑло_ÑÑанзакÑийколиÑеÑÑво ÑÑанзакÑий в данном инÑеÑвале
ÑÑмма_длиÑелÑноÑÑиÑÑммаÑÐ½Ð°Ñ Ð´Ð»Ð¸ÑелÑноÑÑÑ ÑÑанзакÑий
ÑÑмма_длиÑелÑноÑÑи_2ÑÑмма квадÑаÑов длиÑелÑноÑÑей ÑÑанзакÑий
мин_длиÑелÑноÑÑÑминималÑÐ½Ð°Ñ Ð´Ð»Ð¸ÑелÑноÑÑÑ ÑÑанзакÑии
макÑ_длиÑелÑноÑÑÑмакÑималÑÐ½Ð°Ñ Ð´Ð»Ð¸ÑелÑноÑÑÑ ÑÑанзакÑии
ÑÑмма_задеÑжкиÑÑмма задеÑжек наÑала ÑÑанзакÑий (нолÑ, еÑли не Ñказан паÑамеÑÑ
--rate)ÑÑмма_задеÑжки_2ÑÑмма квадÑаÑов задеÑжек наÑала ÑÑанзакÑий (нолÑ, еÑли не Ñказан паÑамеÑÑ
--rate)мин_задеÑжкаминималÑÐ½Ð°Ñ Ð·Ð°Ð´ÐµÑжка наÑала ÑÑанзакÑии (нолÑ, еÑли не Ñказан паÑамеÑÑ
--rate)макÑ_задеÑжкамакÑималÑÐ½Ð°Ñ Ð·Ð°Ð´ÐµÑжка наÑала ÑÑанзакÑии (нолÑ, еÑли не Ñказан паÑамеÑÑ
--rate)пÑопÑÑено_ÑÑанзакÑийÑиÑло ÑÑанзакÑий, пÑопÑÑеннÑÑ Ð¸Ð·-за Ñого, ÑÑо бÑло ÑлиÑком поздно Ð¸Ñ Ð½Ð°ÑинаÑÑ (нолÑ, еÑли не Ð·Ð°Ð´Ð°Ð½Ñ Ð¿Ð°ÑамеÑÑÑ
--rateи--latency-limit)повÑоÑено_ÑÑанзакÑийÑиÑло ÑÑанзакÑий, коÑоÑÑе бÑли повÑоÑÐµÐ½Ñ (нолÑ, еÑли не Ñказан паÑамеÑÑ
--max-tries)повÑоÑнÑе_попÑÑкиÑиÑло повÑоÑов поÑле оÑибок ÑеÑиализаÑии или взаимоблокиÑовок (нолÑ, еÑли паÑамеÑÑ
--max-triesне единиÑа)Ñбои_ÑеÑиализаÑииÑиÑло ÑÑанзакÑий, коÑоÑÑе бÑли пÑеÑÐ²Ð°Ð½Ñ Ð¸Ð·-за оÑибок ÑеÑиализаÑии и не бÑли повÑоÑÐµÐ½Ñ Ð²Ð¿Ð¾ÑледÑÑвии (нолÑ, еÑли не Ñказан паÑамеÑÑ
--failures-detailed)Ñбои_взаимоблокиÑовкиÑиÑло ÑÑанзакÑий, коÑоÑÑе бÑли пÑеÑÐ²Ð°Ð½Ñ Ð¸Ð·-за оÑибок взаимоблокиÑовки и не бÑли повÑоÑÐµÐ½Ñ Ð²Ð¿Ð¾ÑледÑÑвии (нолÑ, еÑли не Ñказан паÑамеÑÑ
--failures-detailed)
Ðиже пÑедÑÑавлен пÑÐ¸Ð¼ÐµÑ Ð²Ñвода Ñ ÑÑим паÑамеÑÑом:
pgbench --aggregate-interval=10 --time=20 --client=10 --log --rate=1000 --latency-limit=10 --failures-detailed --max-tries=10 test
1650260552 5178 26171317 177284491527 1136 44462 2647617 7321113867 0 9866 64 7564 28340 4148 0
1650260562 4808 25573984 220121792172 1171 62083 3037380 9666800914 0 9998 598 7392 26621 4527 0
ÐамеÑÑÑе, ÑÑо пÑоÑÑой ÑоÑÐ¼Ð°Ñ Ð¿ÑоÑокола (без агÑегиÑованиÑ) показÑваеÑ, какой ÑкÑÐ¸Ð¿Ñ Ð¸ÑполÑзовалÑÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ ÑÑанзакÑии, в оÑлиÑие Ð¾Ñ ÑоÑмаÑа Ñ Ð°Ð³ÑегиÑованием. Таким обÑазом, еÑли вам нÑÐ¶Ð½Ñ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ñе ÑведениÑ, но в ÑазÑезе ÑкÑипÑов, вам пÑидÑÑÑÑ Ð°Ð³ÑегиÑоваÑÑ Ð´Ð°Ð½Ð½Ñе ÑамоÑÑоÑÑелÑно.
ÐÑÑÑÑ Ð¿Ð¾ опеÑаÑоÑам
С паÑамеÑÑом -r пÑогÑамма pgbench ÑобиÑÐ°ÐµÑ ÑледÑÑÑÑÑ ÑÑаÑиÑÑÐ¸ÐºÑ Ð¿Ð¾ ÐºÐ°Ð¶Ð´Ð¾Ð¼Ñ Ð¾Ð¿ÐµÑаÑоÑÑ:
latencyâ вÑÐµÐ¼Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ опеÑаÑоÑа. pgbench вÑÐ²Ð¾Ð´Ð¸Ñ ÑÑеднее по вÑем ÑÑпеÑнÑм попÑÑкам вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа.ЧиÑло оÑказов Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ опеÑаÑоÑа. Ðа дополниÑелÑной инÑоÑмаÑией обÑаÑиÑеÑÑ Ðº ÐовÑоÑÑ Ð¸ оÑÐºÐ°Ð·Ñ Ð¸Ð·-за оÑибок ÑеÑиализаÑии/взаимоблокиÑовки.
ЧиÑло повÑоÑов поÑле оÑибок ÑеÑиализаÑии или взаимоблокиÑовки в ÑÑом опеÑаÑоÑе. Ðа дополниÑелÑнÑми ÑведениÑми обÑаÑиÑеÑÑ Ðº ÐовÑоÑÑ Ð¸ оÑÐºÐ°Ð·Ñ Ð¸Ð·-за оÑибок ÑеÑиализаÑии/взаимоблокиÑовки.
РоÑÑÑÑе оÑобÑажаеÑÑÑ ÑÑаÑиÑÑика повÑоÑов, ÑолÑко еÑли паÑамеÑÑ --max-tries не Ñавен 1.
ÐÑе ÑÑи знаÑÐµÐ½Ð¸Ñ Ð²ÑÑиÑлÑÑÑÑÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ опеÑаÑоÑа, вÑполнÑемого каждÑм клиенÑом, и вÑдаÑÑÑÑ Ð¿Ð¾Ñле завеÑÑÐµÐ½Ð¸Ñ ÑеÑÑа.
ÐÐ»Ñ ÑкÑипÑа по ÑмолÑÐ°Ð½Ð¸Ñ Ð²Ñвод бÑÐ´ÐµÑ Ð²ÑглÑдеÑÑ Ð¿ÑимеÑно Ñак:
starting vacuum...end. transaction type: <builtin: TPC-B (sort of)> scaling factor: 1 query mode: simple number of clients: 10 number of threads: 1 maximum number of tries: 1 number of transactions per client: 1000 number of transactions actually processed: 10000/10000 number of failed transactions: 0 (0.000%) number of transactions above the 50.0 ms latency limit: 1311/10000 (13.110 %) latency average = 28.488 ms latency stddev = 21.009 ms initial connection time = 69.068 ms tps = 346.224794 (without initial connection time) statement latencies in milliseconds and failures: 0.012 0 \set aid random(1, 100000 * :scale) 0.002 0 \set bid random(1, 1 * :scale) 0.002 0 \set tid random(1, 10 * :scale) 0.002 0 \set delta random(-5000, 5000) 0.319 0 BEGIN; 0.834 0 UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid; 0.641 0 SELECT abalance FROM pgbench_accounts WHERE aid = :aid; 11.126 0 UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid; 12.961 0 UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid; 0.634 0 INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP); 1.957 0 END;
ÐÑÑ Ð¾Ð´Ð¸Ð½ пÑÐ¸Ð¼ÐµÑ Ð²Ñвода Ð´Ð»Ñ ÑкÑипÑа по ÑмолÑÐ°Ð½Ð¸Ñ Ñ Ð²ÑбоÑом ÑеÑиализÑемого ÑÑÐ¾Ð²Ð½Ñ Ð¸Ð·Ð¾Ð»ÑÑии (PGOPTIONS='-c default_transaction_isolation=serializable' 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 maximum number of tries: 10 number of transactions per client: 1000 number of transactions actually processed: 6317/10000 number of failed transactions: 3683 (36.830%) number of transactions retried: 7667 (76.670%) total number of retries: 45339 number of transactions above the 50.0 ms latency limit: 106/6317 (1.678 %) latency average = 17.016 ms latency stddev = 13.283 ms initial connection time = 45.017 ms tps = 186.792667 (without initial connection time) statement latencies in milliseconds, failures and retries: 0.006 0 0 \set aid random(1, 100000 * :scale) 0.001 0 0 \set bid random(1, 1 * :scale) 0.001 0 0 \set tid random(1, 10 * :scale) 0.001 0 0 \set delta random(-5000, 5000) 0.385 0 0 BEGIN; 0.773 0 1 UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid; 0.624 0 0 SELECT abalance FROM pgbench_accounts WHERE aid = :aid; 1.098 320 3762 UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid; 0.582 3363 41576 UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid; 0.465 0 0 INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP); 1.933 0 0 END;
ÐÑли задейÑÑвÑеÑÑÑ Ð½ÐµÑколÑко Ñайлов ÑкÑипÑов, вÑе ÑÑаÑиÑÑиÑеÑкие даннÑе вÑводÑÑÑÑ Ð¾ÑделÑно Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ Ñайла.
УÑÑиÑе, ÑÑо ÑÐ±Ð¾Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑÑ Ð²ÑеменнÑÑ Ð¿Ð¾ÐºÐ°Ð·Ð°Ñелей влеÑÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе издеÑжки и пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº ÑÐ½Ð¸Ð¶ÐµÐ½Ð¸Ñ ÑÑедней ÑкоÑоÑÑи и, как ÑезÑлÑÑаÑ, Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ TPS. Ðа ÑколÑко именно ÑнизиÑÑÑ ÑкоÑоÑÑÑ, во многом завиÑÐ¸Ñ Ð¾Ñ Ð¿Ð»Ð°ÑÑоÑÐ¼Ñ Ð¸ обоÑÑдованиÑ. ХоÑоÑий ÑпоÑоб оÑениÑÑ, ÐºÐ°ÐºÐ¾Ð²Ñ ÑÑи издеÑжки â ÑÑавниÑÑ ÑÑедние знаÑÐµÐ½Ð¸Ñ TPS, полÑÑаемÑе Ñ Ð¿Ð¾Ð´ÑÑÑÑом вÑемени опеÑаÑоÑов и без Ñакого подÑÑÑÑа.
ÐовÑоÑÑ Ð¸ оÑÐºÐ°Ð·Ñ Ð¸Ð·-за оÑибок ÑеÑиализаÑии/взаимоблокиÑовки #
ÐÑи вÑполнении pgbench могÑÑ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÑÑ Ð¾Ñибки ÑÑÑÑ Ð¾ÑновнÑÑ Ñипов:
ÐÑибки оÑновной пÑогÑаммÑ. Ðни ÑвлÑÑÑÑÑ Ð½Ð°Ð¸Ð±Ð¾Ð»ÐµÐµ ÑеÑÑÑзнÑми и вÑегда пÑиводÑÑ Ðº Ð½ÐµÐ¼ÐµÐ´Ð»ÐµÐ½Ð½Ð¾Ð¼Ñ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ pgbench Ñ ÑооÑвеÑÑÑвÑÑÑим ÑообÑением об оÑибке. Рним оÑноÑÑÑÑÑ:
оÑибки, возникÑие пÑи запÑÑке pgbench (напÑимеÑ, из-за недопÑÑÑимого знаÑÐµÐ½Ð¸Ñ Ð¿Ð°ÑамеÑÑа);
оÑибки в Ñежиме иниÑиализаÑии (напÑимеÑ, запÑÐ¾Ñ Ð¸Ð· вÑÑÑоенного ÑкÑипÑа не Ñмог ÑоздаÑÑ ÑаблиÑÑ);
оÑибки пеÑед запÑÑком поÑоков (напÑимеÑ, не ÑдалоÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑиÑÑÑÑ Ðº ÑеÑвеÑÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ , ÑинÑакÑиÑеÑÐºÐ°Ñ Ð¾Ñибка в меÑакоманде, Ñбой пÑи Ñоздании поÑока);
непÑедвиденнÑе внÑÑÑенние оÑибки pgbench.
ÐÑибки пÑи обÑлÑживании клиенÑов в поÑоке вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ (напÑимеÑ, ÐºÐ»Ð¸ÐµÐ½Ñ Ð½Ðµ Ñмог ÑÑÑановиÑÑ Ñоединение Ñ ÑеÑвеÑом, ÑÐ¾ÐºÐµÑ Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ð¸Ñ ÐºÐ»Ð¸ÐµÐ½Ñа к ÑеÑвеÑÑ ÑÑал недейÑÑвиÑелÑнÑм). Ð ÑÐ°ÐºÐ¸Ñ ÑлÑÑаÑÑ Ð²Ñе клиенÑÑ ÑÑого поÑока оÑÑанавливаÑÑÑÑ, а дÑÑгие поÑоки пÑодолжаÑÑ ÑабоÑаÑÑ.
ÐепоÑÑедÑÑвенно клиенÑÑкие оÑибки. Ðни вÑзÑваÑÑ Ð½ÐµÐ¼ÐµÐ´Ð»ÐµÐ½Ð½Ð¾Ðµ завеÑÑение pgbench Ñ ÑооÑвеÑÑÑвÑÑÑим ÑообÑением ÑолÑко в ÑлÑÑае непÑедвиденной внÑÑÑенней оÑибки pgbench. РдÑÑÐ³Ð¸Ñ ÑлÑÑаÑÑ Ð¾Ð½Ð¸ могÑÑ Ð²ÑзваÑÑ Ð»Ð¸ÑÑ Ð¿ÑеÑÑвание ÑабоÑÑ Ð¿Ñоблемного клиенÑа, дÑÑгие клиенÑÑ Ð¿ÑÐ¾Ð´Ð¾Ð»Ð¶Ð°Ñ ÑабоÑÑ (однако некоÑоÑÑе клиенÑÑкие оÑибки обÑабаÑÑваÑÑÑÑ Ð±ÐµÐ· пÑеÑÑÐ²Ð°Ð½Ð¸Ñ ÑабоÑÑ ÐºÐ»Ð¸ÐµÐ½Ñа и инÑоÑмаÑÐ¸Ñ Ð¾ Ð½Ð¸Ñ Ð²ÑдаÑÑÑÑ Ð¾ÑделÑно, Ñм. ниже). Ðалее в ÑÑом Ñазделе оÑибками ÑÑиÑаÑÑÑÑ ÑолÑко непоÑÑедÑÑвенно клиенÑÑкие оÑибки, а не внÑÑÑенние оÑибки pgbench.
РабоÑа клиенÑа пÑеÑÑваеÑÑÑ Ð² ÑлÑÑае ÑеÑÑÑзной оÑибки; напÑимеÑ, еÑли бÑло поÑеÑÑно Ñоединение Ñ ÑеÑвеÑом баз даннÑÑ
или доÑÑигнÑÑ ÐºÐ¾Ð½ÐµÑ ÑкÑипÑа, а поÑледнÑÑ ÑÑанзакÑÐ¸Ñ Ð½Ðµ завеÑÑена. ÐÑоме Ñого, ÑабоÑа клиенÑа пÑеÑÑваеÑÑÑ, еÑли вÑполнение ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ SQL или меÑÐ°ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð·Ð°Ð²ÐµÑÑаеÑÑÑ Ñбоем по пÑиÑинам, оÑлиÑнÑм Ð¾Ñ Ð¾Ñибок ÑеÑиализаÑии или взаимоблокиÑовки. ÐÑли же команда SQL завеÑÑаеÑÑÑ Ð¾Ñибкой ÑеÑиализаÑии или взаимоблокиÑовки, ÑабоÑа клиенÑа пÑодолжаеÑÑÑ. Ð ÑакиÑ
ÑлÑÑаÑÑ
ÑекÑÑÐ°Ñ ÑÑанзакÑÐ¸Ñ Ð¾ÑкаÑÑваеÑÑÑ, пÑи ÑÑом клиенÑÑкие пеÑеменнÑе полÑÑаÑÑ Ð·Ð½Ð°ÑениÑ, коÑоÑÑе они имели до наÑала ÑÑой ÑÑанзакÑии (пÑедполагаеÑÑÑ, ÑÑо один ÑкÑÐ¸Ð¿Ñ ÑÑанзакÑии ÑодеÑÐ¶Ð¸Ñ ÑолÑко Ð¾Ð´Ð½Ñ ÑÑанзакÑиÑ; за подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº Ðаково ÑодеÑжание «ÑÑанзакÑии», коÑоÑÑÑ Ð²ÑполнÑÐµÑ pgbench?). ТÑанзакÑии Ñ Ð¾Ñибками ÑеÑиализаÑии или взаимоблокиÑовки повÑоÑÑÑÑÑÑ Ð¿Ð¾Ñле оÑкаÑа до ÑÑпеÑного завеÑÑÐµÐ½Ð¸Ñ Ð»Ð¸Ð±Ð¾ до макÑималÑного ÑиÑла повÑоÑений (коÑоÑое задаÑÑÑÑ Ð¿Ð°ÑамеÑÑом --max-tries), макÑималÑной длиÑелÑноÑÑи повÑоÑений (коÑоÑÐ°Ñ Ð·Ð°Ð´Ð°ÑÑÑÑ Ð¿Ð°ÑамеÑÑом --latency-limit) или до иÑÑеÑÐµÐ½Ð¸Ñ Ð²Ñемени ÑеÑÑа (ÑÑо вÑÐµÐ¼Ñ Ð·Ð°Ð´Ð°ÑÑÑÑ Ð¿Ð°ÑамеÑÑом --time). ÐÑли поÑледнÑÑ Ð¿Ð¾Ð¿ÑÑка завеÑÑаеÑÑÑ Ð½ÐµÑдаÑей, ÑÑанзакÑÐ¸Ñ ÑÑиÑаеÑÑÑ Ð½ÐµÑдаÑной, но ÑабоÑа клиенÑа не пÑеÑÑваеÑÑÑ.
ÐÑимеÑание
ÐÑли паÑамеÑÑ --max-tries не Ñказан, ÑÑанзакÑии никогда не повÑоÑÑÑÑÑÑ Ð¿Ð¾Ñле оÑибок ÑеÑиализаÑии или взаимоблокиÑовки, Ñак как его знаÑение по ÑмолÑÐ°Ð½Ð¸Ñ Ñавно 1. ЧÑÐ¾Ð±Ñ Ð¾Ð³ÑаниÑиÑÑ ÑолÑко обÑÑÑ Ð´Ð»Ð¸ÑелÑноÑÑÑ Ð¿Ð¾Ð¿ÑÑок, задайÑе неогÑаниÑенное колиÑеÑÑво попÑÑок (--max-tries=0) и ÑÑÑановиÑе паÑамеÑÑ --latency-limit. ÐÑ Ñакже можеÑе огÑаниÑиÑÑ Ð¾Ð±ÑÑÑ Ð¿ÑодолжиÑелÑноÑÑÑ ÑеÑÑа пÑи неогÑаниÑенном колиÑеÑÑве попÑÑок, иÑполÑзÑÑ Ð¿Ð°ÑамеÑÑ --time.
УÑÑиÑе оÑобенноÑÑÑ Ð¿Ð¾Ð²ÑоÑÐµÐ½Ð¸Ñ ÑкÑипÑов, ÑодеÑжаÑÐ¸Ñ Ð½ÐµÑколÑко ÑÑанзакÑий: ÑкÑÐ¸Ð¿Ñ Ð²Ñегда бÑÐ´ÐµÑ Ð¿Ð¾Ð²ÑоÑÑÑÑÑÑ Ñеликом, Ñак ÑÑо ÑÑпеÑнÑе ÑÑанзакÑии в нÑм могÑÑ Ð²ÑполнÑÑÑÑÑ Ð¼Ð½Ð¾Ð³Ð¾ÐºÑаÑно.
Также ÑÑÑиÑе оÑобенноÑÑÑ Ð¿Ð¾Ð²ÑоÑÐµÐ½Ð¸Ñ ÑÑанзакÑий, ÑодеÑжаÑиÑ
ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð¾Ð±Ð¾Ð»Ð¾Ñки. РоÑлиÑие Ð¾Ñ ÑезÑлÑÑаÑов команд SQL, ÑезÑлÑÑаÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´ оболоÑки не оÑменÑÑÑÑÑ, за иÑклÑÑением знаÑÐµÐ½Ð¸Ñ Ð¿ÐµÑеменной ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ \setshell.
ÐлиÑелÑноÑÑÑ ÑÑпеÑной ÑÑанзакÑии вклÑÑÐ°ÐµÑ Ð¾Ð±Ñее вÑÐµÐ¼Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑÑанзакÑии Ñ ÑÑÑÑом оÑкаÑов и повÑоÑов. ÐзмеÑÑеÑÑÑ Ð´Ð»Ð¸ÑелÑноÑÑÑ ÑолÑко Ð´Ð»Ñ ÑÑпеÑнÑÑ ÑÑанзакÑий и команд.
ÐолиÑеÑÑво неÑÑпеÑнÑÑ
ÑÑанзакÑий вÑводиÑÑÑ Ð² оÑновном оÑÑÑÑе. ÐÑли паÑамеÑÑ --max-tries не Ñавен 1, оÑновной оÑÑÑÑ Ñакже ÑодеÑÐ¶Ð¸Ñ ÑÑаÑиÑÑÐ¸ÐºÑ Ð¿Ð¾Ð²ÑоÑов: обÑее ÑиÑло ÑÑанзакÑий, коÑоÑÑе повÑоÑÑлиÑÑ, и обÑее ÑиÑло повÑоÑов вÑеÑ
ÑÑанзакÑий. ÐÑÑÑÑ Ð¿Ð¾ ÑкÑипÑам наÑледÑÐµÑ Ð²Ñе ÑÑи Ð¿Ð¾Ð»Ñ Ð¾Ñ Ð¾Ñновного оÑÑÑÑа. ÐÑли паÑамеÑÑ --max-tries не Ñавен 1, ÑÑаÑиÑÑика повÑоÑнÑÑ
попÑÑок Ñакже оÑобÑажаеÑÑÑ Ð² оÑÑÑÑе по опеÑаÑоÑам.
ÐÑли Ð²Ñ Ñ
оÑиÑе, ÑÑÐ¾Ð±Ñ Ð² пÑоÑоколе c агÑегиÑованием, а Ñакже в оÑновном оÑÑÑÑе, оÑÑÑÑе по ÑÑанзакÑиÑм и оÑÑÑÑе по ÑкÑипÑам Ñбои гÑÑппиÑовалиÑÑ Ð¿Ð¾ базовÑм Ñипам, иÑполÑзÑйÑе паÑамеÑÑ --failures-detailed. ÐÑли же Ð²Ñ Ñ
оÑиÑе видеÑÑ Ð²Ñе оÑделÑнÑе оÑибки и оÑÐºÐ°Ð·Ñ (оÑибки, поÑле коÑоÑÑÑ
ÑÑанзакÑÐ¸Ñ Ð½Ðµ повÑоÑÑеÑÑÑ), а Ñакже видеÑÑ, как огÑаниÑиваÑÑÑÑ Ð¿Ð¾Ð²ÑоÑÐµÐ½Ð¸Ñ Ð¸ наÑколÑко доÑÑигаеÑÑÑ Ð¾Ð³ÑаниÑение, иÑполÑзÑйÑе паÑамеÑÑ --verbose-errors.
ТаблиÑнÑе меÑÐ¾Ð´Ñ Ð´Ð¾ÑÑÑпа
Ðожно опÑеделиÑÑ ÑаблиÑнÑй меÑод доÑÑÑпа к ÑаблиÑам pgbench. РпеÑеменной окÑÑÐ¶ÐµÐ½Ð¸Ñ PGOPTIONS задаÑÑÑÑ ÐºÐ¾Ð½ÑигÑÑаÑионнÑе паÑамеÑÑÑ ÐÐ, коÑоÑÑе пеÑедаÑÑÑÑ Ð² Postgres Pro ÑеÑез команднÑÑ ÑÑÑÐ¾ÐºÑ (Ñм. ÐодÑаздел 18.1.4). ÐапÑимеÑ, ÑаблиÑнÑй меÑод доÑÑÑпа по ÑмолÑÐ°Ð½Ð¸Ñ Ðº ÑаблиÑам, ÑоздаваемÑм pgbench, под названием wuzza можно опÑеделиÑÑ Ñак:
PGOPTIONS='-c default_table_access_method=wuzza'
ÐолезнÑе ÑовеÑÑ
ÐÑполÑзÑÑ pgbench, можно без оÑобого ÑÑÑда полÑÑиÑÑ Ð°Ð±ÑолÑÑно беÑÑмÑÑленнÑе ÑиÑла. ÐоÑледÑйÑе пÑиведÑннÑм ÑовеÑам, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ñе ÑезÑлÑÑаÑÑ.
Ðо-пеÑвÑÑ
, никогда не довеÑÑйÑе ÑеÑÑам, коÑоÑÑе вÑполнÑÑÑÑÑ Ð²Ñего неÑколÑко ÑекÑнд. ÐоÑполÑзÑйÑеÑÑ Ð¿Ð°ÑамеÑÑом -t и -T и ÑÑÑановиÑе вÑÐµÐ¼Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð½Ðµ менÑÑе неÑколÑкиÑ
минÑÑ, ÑÑÐ¾Ð±Ñ Ð¸Ð·Ð±Ð°Ð²Ð¸ÑÑÑÑ Ð¾Ñ ÑÑма в ÑÑедниÑ
знаÑениÑÑ
. РнекоÑоÑÑÑ
ÑлÑÑаÑÑ
Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð²Ð¾ÑпÑоизводимÑÑ
ÑезÑлÑÑаÑов ÑеÑÑиÑование должно пÑодолжаÑÑÑÑ Ð½ÐµÑколÑко ÑаÑов. ЧÑÐ¾Ð±Ñ Ð¿Ð¾Ð½ÑÑÑ, бÑли ли полÑÑÐµÐ½Ñ Ð²Ð¾ÑпÑоизводимÑе знаÑениÑ, Ð¸Ð¼ÐµÐµÑ ÑмÑÑл запÑÑÑиÑÑ ÑеÑÑиÑование неÑколÑко Ñаз.
ÐÐ»Ñ ÑÑандаÑÑного ÑÑенаÑÐ¸Ñ Ð¿Ð¾ ÑÐ¸Ð¿Ñ TPC-B наÑалÑнÑй коÑÑÑиÑÐ¸ÐµÐ½Ñ Ð¼Ð°ÑÑÑаба (-s) должен бÑÑÑ Ð½Ðµ менÑÑе ÑиÑла клиенÑов, Ñ ÐºÐ°ÐºÐ¸Ð¼ Ð²Ñ Ð½Ð°Ð¼ÐµÑÐµÐ½Ñ Ð¿ÑоводиÑÑ ÑеÑÑиÑование (-c); в пÑоÑивном ÑлÑÑае вÑ, по болÑÑÐ¾Ð¼Ñ ÑÑÑÑÑ, бÑдеÑе замеÑÑÑÑ Ð²ÑÐµÐ¼Ñ ÐºÐ¾Ð½ÐºÑÑенÑнÑÑ
изменений. ТаблиÑа pgbench_branches ÑодеÑÐ¶Ð¸Ñ Ð²Ñего -s ÑÑÑок, а ÐºÐ°Ð¶Ð´Ð°Ñ ÑÑанзакÑÐ¸Ñ Ñ
оÑÐµÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑ Ð¾Ð´Ð½Ñ Ð¸Ð· ниÑ
, Ñак ÑÑо еÑли знаÑение -c пÑевÑÑÐ°ÐµÑ -s, ÑÑо неÑомненно пÑиведÑÑ Ðº ÑомÑ, ÑÑо многие ÑÑанзакÑии бÑдÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑоваÑÑÑÑ Ð´ÑÑгими.
СÑандаÑÑнÑй ÑÑенаÑий ÑеÑÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ñакже доволÑно ÑилÑно завиÑÐ¸Ñ Ð¾Ñ Ñого, ÑколÑко вÑемени пÑоÑло Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñа иниÑиализаÑии ÑаблиÑ: накопление неакÑÑалÑнÑÑ ÑÑÑок и «мÑÑÑвого» пÑоÑÑÑанÑÑва в ÑаблиÑÐ°Ñ Ð²Ð»Ð¸ÑÐµÑ Ð½Ð° ÑезÑлÑÑаÑÑ. ЧÑÐ¾Ð±Ñ Ð¿ÑавилÑно оÑениÑÑ ÑезÑлÑÑаÑÑ, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ ÑÑиÑÑваÑÑ, ÑколÑко вÑего изменений бÑло пÑоизведено и когда вÑполнÑлаÑÑ Ð¾ÑиÑÑка. ÐÑли же вклÑÑена авÑооÑиÑÑка, ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑÑеваÑо непÑедÑказÑемÑми изменениÑми оÑенок пÑоизводиÑелÑноÑÑи.
ÐолезноÑÑÑ ÑезÑлÑÑаÑов pgbench Ñакже Ð¼Ð¾Ð¶ÐµÑ Ð¾Ð³ÑаниÑиваÑÑÑÑ Ñем, ÑÑо ÑеÑÑиÑование Ñ Ð±Ð¾Ð»ÑÑим ÑиÑлом клиенÑÑÐºÐ¸Ñ ÑеанÑов Ñамо по Ñебе нагÑÑÐ¶Ð°ÐµÑ ÑиÑÑемÑ. ÐÑого можно избежаÑÑ, запÑÑÐºÐ°Ñ pgbench на дÑÑгом компÑÑÑеÑе, не на ÑеÑвеÑе баз даннÑÑ , Ñ Ð¾ÑÑ Ð¿Ñи ÑÑом болÑÑое знаÑение Ð¸Ð¼ÐµÐµÑ ÑкоÑоÑÑÑ ÑеÑи. Ðногда, оÑÐµÐ½Ð¸Ð²Ð°Ñ Ð¿ÑоизводиÑелÑноÑÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ ÑеÑвеÑа, полезно запÑÑкаÑÑ Ð´Ð°Ð¶Ðµ неÑколÑко ÑкземплÑÑов pgbench паÑаллелÑно, на оÑделÑнÑÑ ÐºÐ»Ð¸ÐµÐ½ÑÑÐºÐ¸Ñ ÐºÐ¾Ð¼Ð¿ÑÑÑеÑÐ°Ñ .
ÐезопаÑноÑÑÑ
ÐÑли к базе даннÑÑ , коÑоÑÐ°Ñ Ð½Ðµ пÑиведена в ÑооÑвеÑÑÑвие ÑÐ°Ð±Ð»Ð¾Ð½Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°Ñного иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑÑ ÐµÐ¼, имеÑÑ Ð´Ð¾ÑÑÑп недовеÑеннÑе полÑзоваÑели, не запÑÑкайÑе pgbench в ÑÑой базе. ÐÑогÑамма pgbench иÑполÑзÑÐµÑ Ð½ÐµÐ¿Ð¾Ð»Ð½Ñе имена и не наÑÑÑÐ°Ð¸Ð²Ð°ÐµÑ Ð´Ð»Ñ ÑÐµÐ±Ñ Ð¿ÑÑÑ Ð¿Ð¾Ð¸Ñка.