18.12. УпÑавление блокиÑовками #
deadlock_timeout(integer) #ÐÑÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ð±Ð»Ð¾ÐºÐ¸Ñовки, по иÑÑеÑении коÑоÑого бÑÐ´ÐµÑ Ð²ÑполнÑÑÑÑÑ Ð¿ÑовеÑка ÑоÑÑоÑÐ½Ð¸Ñ Ð²Ð·Ð°Ð¸Ð¼Ð¾Ð±Ð»Ð¾ÐºÐ¸Ñовки. ÐÑа пÑовеÑка доволÑно доÑогоÑÑоÑÑаÑ, поÑÑÐ¾Ð¼Ñ ÑеÑÐ²ÐµÑ Ð½Ðµ вÑполнÑÐµÑ ÐµÑ Ð¿Ñи вÑÑком ожидании блокиÑовки. ÐÑ Ð¾Ð¿ÑимиÑÑиÑно полагаем, ÑÑо взаимоблокиÑовки Ñедки в пÑоизводÑÑвеннÑÑ Ð¿ÑиложениÑÑ , и поÑÑÐ¾Ð¼Ñ Ð¿ÑоÑÑо ждÑм некоÑоÑое вÑемÑ, пÑежде Ñем пÑÑаÑÑÑÑ Ð²ÑÑвиÑÑ Ð²Ð·Ð°Ð¸Ð¼Ð¾Ð±Ð»Ð¾ÐºÐ¸ÑовкÑ. ÐÑи ÑвелиÑении знаÑÐµÐ½Ð¸Ñ ÑÑого паÑамеÑÑа ÑокÑаÑаеÑÑÑ Ð²ÑемÑ, ÑÑ Ð¾Ð´ÑÑее на ненÑжнÑе пÑовеÑки взаимоблокиÑовки, но замедлÑеÑÑÑ ÑеакÑÐ¸Ñ Ð½Ð° ÑеалÑнÑе взаимоблокиÑовки. ÐÑли ÑÑо знаÑение задаÑÑÑÑ Ð±ÐµÐ· ÐµÐ´Ð¸Ð½Ð¸Ñ Ð¸Ð·Ð¼ÐµÑениÑ, оно ÑÑиÑаеÑÑÑ Ð·Ð°Ð´Ð°Ð½Ð½Ñм в миллиÑекÑÐ½Ð´Ð°Ñ . ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ â одна ÑекÑнда (
1s), ÑÑо близко к минималÑÐ½Ð¾Ð¼Ñ Ð·Ð½Ð°ÑениÑ, коÑоÑое ÑÑÐ¾Ð¸Ñ Ð¿ÑименÑÑÑ Ð½Ð° пÑакÑике. Ðа ÑеÑвеÑе Ñ Ð±Ð¾Ð»ÑÑой нагÑÑзкой Ð¸Ð¼ÐµÐµÑ ÑмÑÑл ÑвелиÑиÑÑ ÐµÐ³Ð¾. Ридеале ÑÑо знаÑение должно пÑевÑÑаÑÑ ÑипиÑное вÑÐµÐ¼Ñ ÑÑанзакÑии, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð²ÑÑиÑÑ ÑанÑÑ Ð½Ð° Ñо, ÑÑо блокиÑовка вÑÑ-Ñаки бÑÐ´ÐµÑ Ð¾Ñвобождена, пÑежде Ñем ожидаÑÑÐ°Ñ ÑÑанзакÑÐ¸Ñ ÑеÑÐ¸Ñ Ð¿ÑовеÑиÑÑ ÑоÑÑоÑние взаимоблокиÑовки. ÐзмениÑÑ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð³ÑÑ ÑолÑко ÑÑпеÑполÑзоваÑели и полÑзоваÑели Ñ ÑооÑвеÑÑÑвÑÑÑим пÑавомSET.Ðогда вклÑÑÑн паÑамеÑÑ log_lock_waits, даннÑй паÑамеÑÑ Ñакже опÑеделÑеÑ, ÑпÑÑÑÑ ÐºÐ°ÐºÐ¾Ðµ вÑÐµÐ¼Ñ Ð² жÑÑнал ÑеÑвеÑа бÑдÑÑ Ð·Ð°Ð¿Ð¸ÑÑваÑÑÑÑ ÑообÑÐµÐ½Ð¸Ñ Ð¾Ð± ожидании блокиÑовки. ÐÑли Ð²Ñ Ð¿ÑÑаеÑеÑÑ Ð¸ÑÑледоваÑÑ Ð·Ð°Ð´ÐµÑжки, вÑзваннÑе блокиÑовками, Ð¸Ð¼ÐµÐµÑ ÑмÑÑл ÑменÑÑиÑÑ ÐµÐ³Ð¾ по ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ñ Ð¾Ð±ÑÑнÑм знаÑением
deadlock_timeout.max_locks_per_transaction(integer) #РобÑей ÑаблиÑе блокиÑовок Ð¼Ð¾Ð¶ÐµÑ Ñ ÑаниÑÑÑÑ
max_locks_per_transactionобÑекÑов (напÑимеÑ, ÑаблиÑ) Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑеÑвеÑного пÑоÑеÑÑа или подгоÑовленной ÑÑанзакÑии, Ñаким обÑазом, в лÑбой Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð²Ñемени Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð·Ð°Ð±Ð»Ð¾ÐºÐ¸Ñовано не болÑÑе ÑÑого ÑиÑла ÑазлиÑнÑÑ Ð¾Ð±ÑекÑов. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¾Ð³ÑаниÑÐ¸Ð²Ð°ÐµÑ ÑÑеднее ÑиÑло блокиÑовок обÑекÑов, иÑполÑзÑемÑÑ ÐºÐ°Ð¶Ð´Ð¾Ð¹ ÑÑанзакÑией, оÑделÑнÑе ÑÑанзакÑии могÑÑ Ð·Ð°Ð±Ð»Ð¾ÐºÐ¸ÑоваÑÑ Ð¸ болÑÑе обÑекÑов, еÑли вÑе они ÑмеÑаÑÑÑÑ Ð² ÑаблиÑе блокиÑовок. ÐамеÑÑÑе, ÑÑо ÑÑо не ÑиÑло ÑÑÑок, коÑоÑое Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð·Ð°Ð±Ð»Ð¾ÐºÐ¸Ñовано; Ð¸Ñ ÐºÐ¾Ð»Ð¸ÑеÑÑво не огÑаниÑено. ÐнаÑение по ÑмолÑаниÑ, 64, как показала пÑакÑика, вполне пÑиемлемо, но Ð¼Ð¾Ð¶ÐµÑ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½ÑÑÑ Ð¿Ð¾ÑÑебноÑÑÑ ÐµÐ³Ð¾ ÑвелиÑиÑÑ, еÑли запÑоÑÑ Ð¾Ð±ÑаÑаÑÑÑÑ ÐºÐ¾ множеÑÑÐ²Ñ ÑазлиÑнÑÑ ÑÐ°Ð±Ð»Ð¸Ñ Ð² одной ÑÑанзакÑии, как, напÑимеÑ, запÑÐ¾Ñ Ðº ÑодиÑелÑÑкой ÑаблиÑе Ñо многими поÑомками. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ задаÑÑ ÑолÑко пÑи запÑÑке ÑеÑвеÑа.ÐÐ»Ñ Ð²ÐµÐ´Ð¾Ð¼Ð¾Ð³Ð¾ ÑеÑвеÑа знаÑение ÑÑого паÑамеÑÑа должно бÑÑÑ Ð±Ð¾Ð»ÑÑе или Ñавно знаÑÐµÐ½Ð¸Ñ Ð½Ð° ведÑÑем. РпÑоÑивном ÑлÑÑае на ведомом ÑеÑвеÑе не бÑдÑÑ ÑазÑеÑÐµÐ½Ñ Ð·Ð°Ð¿ÑоÑÑ.
max_pred_locks_per_transaction(integer) #РобÑей ÑаблиÑе пÑедикаÑнÑÑ Ð±Ð»Ð¾ÐºÐ¸Ñовок Ñ ÑаниÑÑÑ
max_pred_locks_per_transactionобÑекÑов (напÑимеÑ, ÑаблиÑ) Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑеÑвеÑного пÑоÑеÑÑа или подгоÑовленной ÑÑанзакÑии, Ñаким обÑазом, в один Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð²Ñемени Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð·Ð°Ð±Ð»Ð¾ÐºÐ¸Ñовано не болÑÑе ÑÑого ÑиÑла ÑазлиÑнÑÑ Ð¾Ð±ÑекÑов. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¾Ð³ÑаниÑÐ¸Ð²Ð°ÐµÑ ÑÑеднее ÑиÑло блокиÑовок обÑекÑов, иÑполÑзÑемÑÑ ÐºÐ°Ð¶Ð´Ð¾Ð¹ ÑÑанзакÑией; оÑделÑнÑе ÑÑанзакÑии могÑÑ Ð·Ð°Ð±Ð»Ð¾ÐºÐ¸ÑоваÑÑ Ð¸ болÑÑе обÑекÑов, еÑли вÑе они ÑмеÑаÑÑÑÑ Ð² ÑаблиÑе блокиÑовок. ÐамеÑÑÑе, ÑÑо ÑÑо не ÑиÑло ÑÑÑок, коÑоÑое Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð·Ð°Ð±Ð»Ð¾ÐºÐ¸Ñовано; Ð¸Ñ ÐºÐ¾Ð»Ð¸ÑеÑÑво не огÑаниÑено. ÐнаÑение по ÑмолÑаниÑ, 64, как показала пÑакÑика, вполне пÑиемлемо, но Ð¼Ð¾Ð¶ÐµÑ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½ÑÑÑ Ð¿Ð¾ÑÑебноÑÑÑ ÐµÐ³Ð¾ ÑвелиÑиÑÑ, еÑли запÑоÑÑ Ð¾Ð±ÑаÑаÑÑÑÑ ÐºÐ¾ множеÑÑÐ²Ñ ÑазлиÑнÑÑ ÑÐ°Ð±Ð»Ð¸Ñ Ð² одной ÑеÑиализÑемой ÑÑанзакÑии, как, напÑимеÑ, запÑÐ¾Ñ Ðº ÑодиÑелÑÑкой ÑаблиÑе Ñо многими поÑомками. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ задаÑÑ ÑолÑко пÑи запÑÑке ÑеÑвеÑа.max_pred_locks_per_relation(integer) #ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¾Ð¿ÑеделÑеÑ, Ð´Ð»Ñ ÑколÑÐºÐ¸Ñ ÑÑÑÐ°Ð½Ð¸Ñ Ð¸Ð»Ð¸ коÑÑежей одного оÑноÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ ÑÑÑанавливаÑÑÑÑ Ð¿ÑедикаÑнÑе блокиÑовки, пÑежде Ñем вмеÑÑо Ð½Ð¸Ñ Ð±ÑÐ´ÐµÑ Ð·Ð°ÑÑебована одна блокиÑовка Ð´Ð»Ñ Ð²Ñего оÑноÑениÑ. ÐнаÑениÑ, болÑÑие или ÑавнÑе нÑлÑ, задаÑÑ Ð°Ð±ÑолÑÑнÑй пÑедел, а Ñ Ð¾ÑÑиÑаÑелÑнÑм знаÑением пÑеделом бÑÐ´ÐµÑ Ð·Ð½Ð°Ñение max_pred_locks_per_transaction, делÑнное на модÑÐ»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð´ÐµÐ¹ÑÑвÑÐµÑ Ð·Ð½Ð°Ñение -2, ÑÑо даÑÑ Ñо же поведение, ÑÑо наблÑдалоÑÑ Ð² пÑедÑдÑÑÐ¸Ñ Ð²ÐµÑÑиÑÑ Postgres Pro. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ задаÑÑ ÑолÑко в Ñайле
postgresql.confили в командной ÑÑÑоке пÑи запÑÑке ÑеÑвеÑа.max_pred_locks_per_page(integer) #ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¾Ð¿ÑеделÑеÑ, Ð´Ð»Ñ ÑколÑÐºÐ¸Ñ ÑÑÑок на одной ÑÑÑаниÑе могÑÑ ÑÑÑанавливаÑÑÑÑ Ð¿ÑедикаÑнÑе блокиÑовки, пÑежде Ñем вмеÑÑо Ð½Ð¸Ñ Ð±ÑÐ´ÐµÑ Ð·Ð°ÑÑебована одна блокиÑовка Ð´Ð»Ñ Ð²Ñей ÑÑÑаниÑÑ. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ â 2. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ задаÑÑ ÑолÑко в Ñайле
postgresql.confили в командной ÑÑÑоке пÑи запÑÑке ÑеÑвеÑа.