F.44. pg_prewarm â пÑедваÑиÑелÑÐ½Ð°Ñ Ð·Ð°Ð³ÑÑзка даннÑÑ Ð¾ÑноÑений в ÐºÐµÑ Ð±ÑÑеÑов #
ÐодÑÐ»Ñ pg_prewarm пÑедоÑÑавлÑÐµÑ ÑдобнÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð·Ð°Ð³ÑÑжаÑÑ Ð´Ð°Ð½Ð½Ñе оÑноÑений в ÐºÐµÑ Ð¾Ð¿ÐµÑаÑионной ÑиÑÑÐµÐ¼Ñ Ð¸Ð»Ð¸ в ÐºÐµÑ Ð±ÑÑеÑов Postgres Pro. ÐÑедваÑиÑелÑнÑÑ Ð·Ð°Ð³ÑÑÐ·ÐºÑ Ð¼Ð¾Ð¶Ð½Ð¾ вÑполниÑÑ Ð²ÑÑÑнÑÑ, вÑзвав ÑÑнкÑÐ¸Ñ pg_prewarm, или авÑомаÑиÑеÑки, добавив pg_prewarm в shared_preload_libraries. Ðо вÑоÑом ÑлÑÑае ÑиÑÑема запÑÑÑÐ¸Ñ ÑоновÑй пÑоÑеÑÑ, коÑоÑÑй бÑÐ´ÐµÑ Ð¿ÐµÑиодиÑеÑки запиÑÑваÑÑ ÑодеÑжимое ÑазделÑемÑÑ
бÑÑеÑов в Ñайл autoprewarm.blocks Ñ Ñем, ÑÑÐ¾Ð±Ñ ÑÑи блоки подгÑÑжалиÑÑ Ð² памÑÑÑ Ð¿Ñи запÑÑке ÑеÑвеÑа, иÑполÑзÑÑ Ð´Ð²Ð° дополниÑелÑнÑÑ
ÑоновÑÑ
пÑоÑеÑÑа.
F.44.1. ФÑнкÑии #
pg_prewarm(regclass, mode text default 'buffer', fork text default 'main',
first_block int8 default null,
last_block int8 default null) RETURNS int8ÐеÑвÑй аÑгÑÐ¼ÐµÐ½Ñ Ð·Ð°Ð´Ð°ÑÑ Ð¾ÑноÑение, коÑоÑое бÑÐ´ÐµÑ Â«ÑазогÑеÑо». Ðо вÑоÑом ÑказÑваеÑÑÑ Ð¼ÐµÑод «ÑазогÑева», из опиÑаннÑÑ
ниже; в ÑÑеÑÑем задаÑÑÑÑ Ñелевой Ñлой оÑноÑениÑ, обÑÑно main. Ð ÑеÑвÑÑÑом аÑгÑменÑе можно пеÑедаÑÑ Ð½Ð¾Ð¼ÐµÑ Ð¿ÐµÑвого ÑазогÑеваемого блока (NULL пÑинимаеÑÑÑ ÐºÐ°Ðº Ñиноним нÑлÑ), а в пÑÑом â Ð½Ð¾Ð¼ÐµÑ Ð¿Ð¾Ñледнего блока (NULL ознаÑÐ°ÐµÑ Ð¿Ð¾Ñледний блок оÑноÑениÑ). ÐозвÑаÑÐ°ÐµÑ ÑÑа ÑÑнкÑÐ¸Ñ ÐºÐ¾Ð»Ð¸ÑеÑÑво ÑазогÑеÑÑÑ
блоков.
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑÑи Ñежима ÑазогÑева. Ð Ñежиме prefetch вÑдаÑÑÑÑ Ð°ÑинÑ
ÑоннÑе запÑоÑÑ Ð¿ÑедвÑбоÑки даннÑÑ
опеÑаÑионной ÑиÑÑеме, еÑли они поддеÑживаÑÑÑÑ, либо пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð¾Ñибка. Ð Ñежиме read ÑÑиÑÑваеÑÑÑ Ð·Ð°Ð´Ð°Ð½Ð½Ñй диапазон блоков; в оÑлиÑие Ð¾Ñ prefetch ÑÑо пÑоиÑÑ
Ð¾Ð´Ð¸Ñ ÑинÑ
Ñонно и поддеÑживаеÑÑÑ Ð²Ð¾ вÑеÑ
ÐС и лÑбÑми ÑбоÑками, но Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¼ÐµÐ´Ð»ÐµÐ½Ð½ÐµÐµ. Ð Ñежиме buffer запÑоÑеннÑй диапазон блоков ÑÑиÑÑваеÑÑÑ Ð² ÐºÐµÑ Ð±ÑÑеÑов Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
.
ÐамеÑÑÑе, ÑÑо Ñ Ð»ÑбÑм из ÑÑиÑ
меÑодов попÑÑка ÑазогÑеÑÑ Ð±Ð¾Ð»ÑÑе блоков, Ñем Ð¼Ð¾Ð¶ÐµÑ ÑмеÑÑиÑÑÑÑ Ð² кеÑе (в кеÑе ÐС в ÑежимаÑ
prefetch и read, либо в кеÑе Postgres Pro в Ñежиме buffer) ÑкоÑее вÑего пÑиведÑÑ Ðº ÑомÑ, ÑÑо блоки Ñ Ð¼ÐµÐ½ÑÑими номеÑами бÑдÑÑ Ð²ÑÑеÑÐ½ÐµÐ½Ñ Ð¸Ð· кеÑа пÑи ÑÑении поÑледÑÑÑиÑ
блоков. ÐÑоме Ñого, ÑазогÑеÑÑе даннÑе никаким ÑпеÑиалÑнÑм обÑазом не заÑиÑаÑÑÑÑ Ð¾Ñ Ð²ÑÑеÑÐ½ÐµÐ½Ð¸Ñ Ð¸Ð· кеÑа, Ñак ÑÑо возможна ÑиÑÑаÑиÑ, когда из-за дÑÑгой акÑивноÑÑи ÑолÑко ÑÑо ÑазогÑеÑÑе блоки бÑдÑÑ Ð²ÑÑеÑÐ½ÐµÐ½Ñ Ð²ÑкоÑе поÑле ÑÑениÑ; Ñ Ð´ÑÑгой ÑÑоÑÐ¾Ð½Ñ Ð¿Ñи Ñаком ÑазогÑеве из кеÑа могÑÑ Ð±ÑÑÑ Ð²ÑÑеÑÐ½ÐµÐ½Ñ Ð´ÑÑгие даннÑе. ÐоÑÑÐ¾Ð¼Ñ ÑазогÑев обÑÑно наиболее полезен пÑи загÑÑзке, когда кеÑи в оÑновном пÑÑÑÑ.
autoprewarm_start_worker() RETURNS void
ÐапÑÑÑиÑÑ Ð¾Ñновной ÑабоÑий пÑоÑеÑÑ Ð°Ð²ÑоÑазогÑева. ÐбÑÑно он запÑÑкаеÑÑÑ Ð°Ð²ÑомаÑиÑеÑки, но ÑÑа ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð°, еÑли авÑомаÑиÑеÑкий ÑазогÑев не бÑл наÑÑÑоен пÑи запÑÑке ÑеÑвеÑа и Ð²Ñ Ñ Ð¾ÑиÑе запÑÑÑиÑÑ ÑÑÐ¾Ñ Ð¿ÑоÑеÑÑ Ð¿Ð¾Ð·Ð¶Ðµ.
autoprewarm_dump_now() RETURNS int8
ÐбновиÑÑ autoprewarm.blocks немедленно. ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾, еÑли ÑабоÑий пÑоÑеÑÑ Ð°Ð²ÑоÑазогÑева не ÑабоÑаеÑ, но Ð²Ñ Ñ
оÑиÑе, ÑÑÐ¾Ð±Ñ Ð°Ð²ÑоÑазогÑев бÑл пÑоизведÑн пÑи пеÑезапÑÑке. ÐÑа ÑÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ ÑиÑло запиÑей, внеÑÑннÑÑ
в autoprewarm.blocks.
F.44.2. ÐаÑамеÑÑÑ ÐºÐ¾Ð½ÑигÑÑаÑии #
pg_prewarm.autoprewarm(boolean)УказÑваеÑ, должен ли ÑеÑÐ²ÐµÑ Ð·Ð°Ð¿ÑÑкаÑÑ ÑабоÑий пÑоÑеÑÑ Ð°Ð²ÑоÑазогÑева. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¾Ð½ вклÑÑÑн. ÐадаÑÑ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ ÑолÑко пÑи запÑÑке ÑеÑвеÑа.
pg_prewarm.autoprewarm_interval(integer)ÐадаÑÑ Ð¸Ð½ÑеÑвал Ð¼ÐµÐ¶Ð´Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñми Ñайла
autoprewarm.blocks. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ â 300 Ñек. ÐÑи знаÑении, Ñавном 0, Ñайл бÑÐ´ÐµÑ ÑÐ¾Ñ ÑанÑÑÑÑÑ Ð½Ðµ пеÑиодиÑеÑки, а ÑолÑко пÑи оÑклÑÑении ÑеÑвеÑа.
ÐÑи паÑамеÑÑÑ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð·Ð°Ð´Ð°Ð²Ð°ÑÑÑÑ Ð² postgresql.conf. ÐбÑÑное иÑполÑзование вÑглÑÐ´Ð¸Ñ Ñак:
# postgresql.conf shared_preload_libraries = 'pg_prewarm' pg_prewarm.autoprewarm = true pg_prewarm.autoprewarm_interval = 300s
F.44.3. ÐвÑÐ¾Ñ #
РобеÑÑ Ð¥Ð°Ð°Ñ <[email protected]>