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 пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑледÑÑÑие аÑгÑменÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ ÑÑÑоки Ð´Ð»Ñ Ð¸Ð½Ð¸ÑиализаÑии:
-i--initializeТÑебÑеÑÑÑ Ð´Ð»Ñ Ð²Ñзова Ñежима иниÑиализаÑии.
-FÑакÑоÑ_заполнениÑ--fillfactor=ÑакÑоÑ_заполнениÑСоздаÑÑ ÑаблиÑÑ
pgbench_accounts,pgbench_tellersиpgbench_branchesÑ Ð·Ð°Ð´Ð°Ð½Ð½Ñм ÑакÑоÑом заполнениÑ. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ â 100.-n--no-vacuumÐе вÑполнÑÑÑ Ð¾ÑиÑÑÐºÑ Ð¿Ð¾Ñле иниÑиализаÑии.
-q--quietÐеÑеклÑÑиÑÑ Ð²Ñвод в немногоÑловнÑй Ñежим, когда вÑводиÑÑÑ ÑолÑко одно ÑообÑение о пÑогÑеÑÑе в 5 ÑекÑнд. Ð Ñежиме по ÑмолÑÐ°Ð½Ð¸Ñ Ð¾Ð´Ð½Ð¾ ÑообÑение вÑводиÑÑÑ Ð½Ð° каждÑе 100000 ÑÑÑок, пÑи ÑÑом за ÑекÑÐ½Ð´Ñ Ð¾Ð±ÑÑно вÑводиÑÑÑ Ð´Ð¾Ð²Ð¾Ð»Ñно много ÑÑÑок (оÑобенно на Ñ Ð¾ÑоÑем обоÑÑдовании).
-sкоÑÑÑиÑиенÑ_маÑÑÑаба--scale=коÑÑÑиÑиенÑ_маÑÑÑабаУмножиÑÑ ÑиÑло генеÑиÑÑемÑÑ ÑÑÑок на заданнÑй коÑÑÑиÑиенÑ. ÐапÑимеÑ, Ñ ÐºÐ»ÑÑом
-s 100в ÑаблиÑÑpgbench_accountsбÑдÑÑ Ð·Ð°Ð¿Ð¸ÑÐ°Ð½Ñ 10 000 000 ÑÑÑок. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ â 1. ÐÑи коÑÑÑиÑиенÑе, Ñавном 20 000 или болÑÑе, ÑÑолбÑÑ, ÑодеÑжаÑие иденÑиÑикаÑоÑÑ ÑÑеÑов (ÑÑолбÑÑaid), пеÑейдÑÑ Ðº болÑÑим ÑелÑм ÑиÑлам (ÑипÑbigint), ÑÑÐ¾Ð±Ñ Ð² Ð½Ð¸Ñ Ð¼Ð¾Ð³Ð»Ð¸ ÑмеÑÑиÑÑÑÑ Ð²Ñе возможнÑе знаÑÐµÐ½Ð¸Ñ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑов.--foreign-keysСоздаÑÑ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ Ð²Ð½ÐµÑÐ½Ð¸Ñ ÐºÐ»ÑÑей Ð¼ÐµÐ¶Ð´Ñ ÑÑандаÑÑнÑми ÑаблиÑами.
--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: иÑполÑзоваÑÑ Ð¿ÑоÑокол ÑаÑÑиÑеннÑÑ Ð·Ð°Ð¿ÑоÑов Ñ Ð¿Ð¾Ð´Ð³Ð¾ÑовленнÑми опеÑаÑоÑами.
Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð²ÑбиÑаеÑÑÑ Ð¿ÑоÑокол пÑоÑÑÑÑ Ð·Ð°Ð¿ÑоÑов. (Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº Ðлаве 49.)
-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 â Ñ Ð´Ð°Ð½Ð½Ñм паÑамеÑÑом в пÑоÑокол бÑÐ´ÐµÑ Ð²ÑводиÑÑÑÑ Ð¸Ñог по инÑеÑÐ²Ð°Ð»Ñ (ÑиÑло ÑÑанзакÑий, мин./макÑ. вÑÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ð¸ два дополниÑелÑнÑÑ Ð¿Ð¾Ð»Ñ, полезнÑÑ Ð´Ð»Ñ Ð¾Ñенки оÑклонений).
РнаÑÑоÑÑее вÑÐµÐ¼Ñ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð½Ðµ поддеÑживаеÑÑÑ Ð² Windows.
--progress-timestampÐÑи оÑобÑажении пÑогÑеÑÑа (Ñ Ð¿Ð°ÑамеÑÑом
-P) вÑводиÑÑ ÑекÑÑее вÑÐµÐ¼Ñ (в ÑоÑмаÑе Unix), а не колиÑеÑÑво ÑекÑнд Ð¾Ñ Ð½Ð°Ñала запÑÑка. ÐÑÐµÐ¼Ñ Ð·Ð°Ð´Ð°ÑÑÑÑ Ð² ÑекÑÐ½Ð´Ð°Ñ Ñ ÑоÑноÑÑÑÑ Ð´Ð¾ миллиÑекÑнд. ÐÑо Ð¿Ð¾Ð¼Ð¾Ð³Ð°ÐµÑ ÑÑавниваÑÑ Ð¶ÑÑналÑ, запиÑÑваемÑе ÑазнÑми ÑÑедÑÑвами.--sampling-rate=ÑкоÑоÑÑÑ Ð¿ÐµÑедаÑиЧаÑÑоÑа вÑбоÑки Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи даннÑÑ Ð² пÑоÑокол, изменÑÑ ÐºÐ¾ÑоÑÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ ÑменÑÑиÑÑ Ð¾Ð±ÑÑм пÑоÑокола. ÐÑи Ñказании ÑÑого паÑамеÑÑа в пÑоÑокол вÑводиÑÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ ÑолÑко о заданном пÑоÑенÑе ÑÑанзакÑий. Со знаÑением 1.0 в нÑм бÑдÑÑ Ð¾ÑмеÑаÑÑÑÑ Ð²Ñе ÑÑанзакÑии, а Ñ 0.05 ÑолÑко 5%.
ÐбÑабаÑÑÐ²Ð°Ñ Ð¿ÑоÑокол, не забÑдÑÑе ÑÑеÑÑÑ ÑаÑÑоÑÑ Ð²ÑбоÑки. ÐапÑимеÑ, вÑÑиÑлÑÑ ÑкоÑоÑÑÑ (TPS), вам нÑжно бÑÐ´ÐµÑ ÑооÑвеÑÑÑвенно ÑмножиÑÑ ÑодеÑжаÑиеÑÑ Ð² нÑм ÑиÑла (Ñо еÑÑÑ, Ñ ÑаÑÑоÑой вÑбоÑки 0.01 Ð²Ñ Ð¿Ð¾Ð»ÑÑиÑе ÑолÑко 1/100 ÑакÑиÑеÑкой ÑкоÑоÑÑи).
ÐбÑие паÑамеÑÑÑ
pgbench пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑледÑÑÑие обÑие аÑгÑменÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ ÑÑÑоки:
-hкомпÑÑÑеÑ--host=компÑÑÑеÑÐдÑÐµÑ ÑеÑвеÑа баз даннÑÑ
-pпоÑÑ--port=поÑÑÐÐ¾Ð¼ÐµÑ Ð¿Ð¾ÑÑа ÑеÑвеÑа баз даннÑÑ
-UимÑ_полÑзоваÑелÑ--username=имÑ_полÑзоваÑелÑÐÐ¼Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ
-V--versionÐÑвеÑÑи веÑÑÐ¸Ñ pgbench и завеÑÑиÑÑÑÑ.
-?--helpÐÑвеÑÑи ÑпÑÐ°Ð²ÐºÑ Ð¾Ð± аÑгÑменÑÐ°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ ÑÑÑоки pgbench и завеÑÑиÑÑÑÑ.
ÐамеÑаниÑ
Ðаково ÑодеÑжание «ÑÑанзакÑии», коÑоÑÑÑ Ð²ÑполнÑÐµÑ 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, еÑÑÑ Ð½ÐµÑколÑко авÑомаÑиÑеÑки ÑÑÑанавливаемÑÑ
пеÑеменнÑÑ
; они пеÑеÑиÑÐ»ÐµÐ½Ñ Ð² ТаблиÑе 1. ÐÑли знаÑение ÑÑиÑ
пеÑеменнÑÑ
задаÑÑÑÑ Ð² паÑамеÑÑе -D, оно пеÑеопÑеделÑÐµÑ Ð°Ð²ÑомаÑиÑеÑкое знаÑение. Ðогда знаÑение пеÑеменной опÑеделено, его можно вÑÑавиÑÑ Ð² ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ SQL, напиÑав :имÑ_пеÑеменной. ÐаждÑй клиенÑÑкий ÑеанÑ, еÑли иÑ
неÑколÑко, полÑÑÐ°ÐµÑ ÑобÑÑвеннÑй Ð½Ð°Ð±Ð¾Ñ Ð¿ÐµÑеменнÑÑ
.
ТаблиÑа 1. ÐвÑомаÑиÑеÑкие пеÑеменнÑе
| ÐеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ | ÐпиÑание |
|---|---|
scale | ÑекÑÑий коÑÑÑиÑÐ¸ÐµÐ½Ñ Ð¼Ð°ÑÑÑаба |
client_id | ÑникалÑное ÑиÑло, иденÑиÑиÑиÑÑÑÑее клиенÑÑкий ÑÐµÐ°Ð½Ñ (наÑÐ¸Ð½Ð°Ñ Ñ Ð½ÑлÑ) |
ÐеÑÐ°ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð² ÑкÑипÑе наÑинаÑÑÑÑ Ñ Ð¾Ð±ÑаÑной коÑой ÑеÑÑÑ (\) и пÑодолжаÑÑÑÑ Ð´Ð¾ конÑа ÑÑÑоки. ÐÑгÑменÑÑ Ð¼ÐµÑакоманд ÑазделÑÑÑÑÑ Ð¿Ñобелами. ÐоддеÑживаемÑе меÑÐ°ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð¿ÑедÑÑÐ°Ð²Ð»ÐµÐ½Ñ Ð½Ð¸Ð¶Ðµ:
-
\setимÑ_пеÑеменнойвÑÑажение УÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð´Ð»Ñ Ð¿ÐµÑеменной
имÑ_пеÑеменнойзнаÑение, вÑÑиÑленное извÑÑажениÑ. ÐÑÑажение Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ ÑелоÑиÑленнÑе конÑÑанÑÑ (напÑимеÑ,5432), конÑÑанÑÑ Ñ Ð¿Ð»Ð°Ð²Ð°ÑÑей ÑоÑкой двойной ÑоÑноÑÑи (напÑимеÑ,3.14159), ÑÑÑлки на пеÑеменнÑе (:имÑ_пеÑеменной), ÑнаÑнÑе опеÑаÑоÑÑ (+,-), бинаÑнÑе опеÑаÑоÑÑ (+,-,*,/,%), вÑÑиÑлÑемÑе в обÑÑном поÑÑдке, вÑÐ·Ð¾Ð²Ñ ÑÑнкÑий, а Ñакже Ñкобки.ÐÑимеÑÑ:
\set ntellers 10 * :scale \set aid (1021 * random(1, 100000 * :scale)) % (100000 * :scale) + 1
-
\sleepномеÑ[ us | ms | s ] ÐÑиоÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð²Ñполнение ÑкÑипÑа на заданное ÑиÑло микÑоÑекÑнд (
us), миллиÑекÑнд (ms) или ÑекÑнд (s). Ðогда единиÑÑ Ð½Ðµ ÑказÑваÑÑÑÑ, подÑазÑмеваÑÑÑÑ ÑекÑндÑ. ÐдеÑÑÑиÑÐ»Ð¾Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑелоÑиÑленной конÑÑанÑой или ÑÑÑлкой:имÑ_пеÑеменнойна пеÑеменнÑÑ Ñ ÑелоÑиÑленнÑм знаÑением.ÐÑимеÑ:
\sleep 10 ms
-
\setshellимÑ_пеÑеменнойкоманда[аÑгÑменÑ... ] ÐÑиÑÐ²Ð°Ð¸Ð²Ð°ÐµÑ Ð¿ÐµÑеменной
имÑ_пеÑеменнойÑезÑлÑÑÐ°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð¾Ð±Ð¾Ð»Ð¾ÑÐºÐ¸ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°Ñ ÑказаннÑмиаÑгÑменÑами. ÐÑа команда должна пÑоÑÑо вÑдаÑÑ ÑелоÑиÑленное знаÑение в ÑÑандаÑÑнÑй вÑвод.ÐдеÑÑ
командаи каждÑйаÑгÑменÑÐ¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð»Ð¸Ð±Ð¾ ÑекÑÑовой конÑÑанÑой, либо ÑÑÑлкой на пеÑеменнÑÑ:имÑ_пеÑеменной. ÐÑли Ð²Ñ Ñ Ð¾ÑиÑе запиÑаÑÑаÑгÑменÑ, наÑинаÑÑийÑÑ Ñ Ð´Ð²Ð¾ÐµÑоÑиÑ, добавÑÑе пеÑедаÑгÑменÑомдополниÑелÑное двоеÑоÑие.ÐÑимеÑ:
\setshell назнаÑаемаÑ_пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° ÑÑÑоковÑй_аÑгÑÐ¼ÐµÐ½Ñ :пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ ::ÑÑÑока_наÑинаÑÑаÑÑÑ_двоеÑоÑием
-
\shellкоманда[аÑгÑменÑ... ] ÐейÑÑвÑÐµÑ Ñак же, как и
\setshell, но не ÑÑиÑÑÐ²Ð°ÐµÑ ÑезÑлÑÑÐ°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ.ÐÑимеÑ:
\shell команда ÑÑÑоковÑй_аÑгÑÐ¼ÐµÐ½Ñ :пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ ::ÑÑÑока_наÑинаÑÑаÑÑÑ_двоеÑоÑием
ÐÑÑÑоеннÑе ÑÑнкÑии
ФÑнкÑии, пеÑеÑиÑленнÑе в ТаблиÑе 2, вÑÑÑÐ¾ÐµÐ½Ñ Ð² pgbench и могÑÑ Ð¿ÑименÑÑÑÑÑ Ð² вÑÑажениÑÑ
в меÑакоманде \set.
ТаблиÑа 2. ФÑнкÑии pgbench
| ФÑнкÑÐ¸Ñ | Тип ÑезÑлÑÑаÑа | ÐпиÑание | ÐÑÐ¸Ð¼ÐµÑ | РезÑлÑÑÐ°Ñ |
|---|---|---|---|---|
| Ñо же, ÑÑо и a | модÑÐ»Ñ ÑиÑла (абÑолÑÑное знаÑение) | abs(-17) | 17 |
| Ñо же, ÑÑо и a | вÑÐ²Ð¾Ð´Ð¸Ñ a в stderr и возвÑаÑÐ°ÐµÑ a | debug(5432.1) | 5432.1 |
| double | пÑиведение к ÑÐ¸Ð¿Ñ Ñ Ð¿Ð»Ð°Ð²Ð°ÑÑей ÑоÑкой | double(5432) | 5432.0 |
| double, еÑли лÑбой из аÑгÑменÑов (a) â double, а инаÑе Ñелое ÑиÑло | наиболÑÑее знаÑение ÑÑеди аÑгÑменÑов | greatest(5, 4, 3, 2) | 5 |
| integer | пÑиведение к ÑелоÑиÑÐ»ÐµÐ½Ð½Ð¾Ð¼Ñ ÑÐ¸Ð¿Ñ | int(5.4 + 3.8) | 9 |
| double, еÑли лÑбой из аÑгÑменÑов (a) â double, а инаÑе Ñелое ÑиÑло | наименÑÑее знаÑение ÑÑеди аÑгÑменÑов | least(5, 4, 3, 2.1) | 2.1 |
| double | знаÑение конÑÑанÑÑ PI | pi() | 3.1415926535â8979323846 |
| 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 |
| double | квадÑаÑнÑй коÑÐµÐ½Ñ | sqrt(2.0) | 1.414213562 |
ФÑнкÑÐ¸Ñ random вÑдаÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ñ ÑавномеÑнÑм ÑаÑпÑеделением, Ñо еÑÑÑ Ð²ÐµÑоÑÑноÑÑи полÑÑÐµÐ½Ð¸Ñ Ð²ÑеÑ
ÑиÑел в инÑеÑвале ÑавнÑ. ФÑнкÑии random_exponential и random_gaussian ÑÑебÑÑÑ ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑного паÑамеÑÑа Ñипа 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.
РкаÑеÑÑве пÑимеÑа взглÑниÑе на вÑÑÑоенное опÑеделение ÑÑанзакÑии Ñипа 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 запиÑÑÐ²Ð°ÐµÑ Ð² пÑоÑокол вÑемÑ, коÑоÑое ÑÑло на вÑполнение каждой ÑÑанзакÑии. ÐÑÐ¾Ñ Ñайл пÑоÑокола бÑÐ´ÐµÑ Ð½Ð°Ð·ÑваÑÑÑÑ pgbench_log., где nnnnnn â PID пÑоÑеÑÑа pgbench. ÐÑли иÑполÑзÑеÑÑÑ Ð¿Ð°ÑамеÑÑ -j Ñо знаÑением 2 или болÑÑе, бÑÐ´ÐµÑ Ñоздано неÑколÑко ÑабоÑиÑ
поÑоков, и каждÑй бÑÐ´ÐµÑ Ð·Ð°Ð¿Ð¸ÑÑваÑÑ Ð¾ÑделÑнÑй пÑоÑокол. ÐеÑвÑй ÑабоÑий пÑоÑеÑÑ Ð±ÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑ Ñайл Ñ Ñем же именем, ÑÑо и в ÑÑандаÑÑном ÑлÑÑае Ñ Ð¾Ð´Ð½Ð¸Ð¼ поÑоком, а ÑÐ°Ð¹Ð»Ñ Ð¾ÑÑалÑнÑÑ
поÑоков бÑдÑÑ Ð½Ð°Ð·ÑваÑÑÑÑ pgbench_log., где 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)
script statistics:
- 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 иÑполÑзÑÐµÑ Ð½ÐµÐ¿Ð¾Ð»Ð½Ñе имена и не наÑÑÑÐ°Ð¸Ð²Ð°ÐµÑ Ð´Ð»Ñ ÑÐµÐ±Ñ Ð¿ÑÑÑ Ð¿Ð¾Ð¸Ñка.