F.37. pg_buffercache â инÑоÑмаÑÐ¸Ñ Ð¾ ÑоÑÑоÑнии бÑÑеÑного кеÑа Postgres Pro #
ÐодÑÐ»Ñ pg_buffercache даÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð¿Ð¾Ð½ÑÑÑ, ÑÑо пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð² обÑем кеÑе бÑÑеÑов в ÑеалÑном вÑемени, а Ñакже позволÑÐµÑ Ð²ÑÑеÑнÑÑÑ Ð´Ð°Ð½Ð½Ñе из него на низком ÑÑовне в ÑелÑÑ
ÑеÑÑиÑованиÑ.
ÐÑÐ¾Ñ Ð¼Ð¾Ð´ÑÐ»Ñ Ð¿ÑедоÑÑавлÑÐµÑ ÑÑнкÑÐ¸Ñ pg_buffercache_pages() (обÑÑнÑÑа в пÑедÑÑавление pg_buffercache), а Ñакже ÑÑнкÑии pg_buffercache_summary(), pg_buffercache_usage_counts() и pg_buffercache_evict().
ФÑнкÑÐ¸Ñ pg_buffercache_pages() возвÑаÑÐ°ÐµÑ Ð½Ð°Ð±Ð¾Ñ Ð·Ð°Ð¿Ð¸Ñей, ÐºÐ°Ð¶Ð´Ð°Ñ ÑÑÑока коÑоÑого опиÑÑÐ²Ð°ÐµÑ ÑоÑÑоÑние одного бÑÑеÑа в обÑем кеÑе. ÐÐ»Ñ ÑдобÑÑва полÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ð±ÑÑÑкой ÑÑнкÑии ÑвлÑеÑÑÑ Ð¿ÑедÑÑавление pg_buffercache.
ФÑнкÑÐ¸Ñ pg_buffercache_summary() возвÑаÑÐ°ÐµÑ Ð¾Ð´Ð½Ñ ÑÑÑÐ¾ÐºÑ Ñо Ñводной инÑоÑмаÑией о ÑоÑÑоÑнии обÑего кеÑа бÑÑеÑов.
ФÑнкÑÐ¸Ñ pg_buffercache_usage_counts() возвÑаÑÐ°ÐµÑ Ð½Ð°Ð±Ð¾Ñ Ð·Ð°Ð¿Ð¸Ñей, в каждой ÑÑÑоке коÑоÑого Ñказано колиÑеÑÑво бÑÑеÑов в Ñазбивке по ÑÑÑÑÑÐ¸ÐºÑ Ð¸ÑполÑзованиÑ.
Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¸ÑполÑзование ÑпомÑнÑÑÑÑ
вÑÑе ÑÑнкÑий ÑазÑеÑено ÑолÑко ÑÑпеÑполÑзоваÑелÑм и ÑолÑм Ñ Ð¿Ñавами Ñоли pg_monitor. ÐаÑÑ Ð´Ð¾ÑÑÑп дÑÑгим ÑолÑм можно Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ GRANT.
ФÑнкÑÐ¸Ñ pg_buffercache_evict() позволÑÐµÑ Ð²ÑÑеÑнÑÑÑ Ð±Ð»Ð¾ÐºÐ¸ из пÑла бÑÑеÑов по иденÑиÑикаÑоÑÑ Ð±Ð»Ð¾ÐºÐ°. ÐÑзÑваÑÑ ÑÑÑ ÑÑнкÑÐ¸Ñ ÑазÑеÑено ÑолÑко ÑÑпеÑполÑзоваÑелÑм.
F.37.1. ÐÑедÑÑавление pg_buffercache #
ÐпÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑÑолбÑов, ÑодеÑжаÑÐ¸Ñ ÑÑ Ð² пÑедÑÑавлении, Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ñ Ð² ТаблиÑе F.19.
ТаблиÑа F.19. СÑолбÑÑ pg_buffercache
Тип ÑÑолбÑа ÐпиÑание |
|---|
ID, в диапазоне 1.. |
ÐÐ¾Ð¼ÐµÑ Ñайлового Ñзла Ð´Ð»Ñ Ð¾ÑноÑÐµÐ½Ð¸Ñ |
OID ÑаблиÑного пÑоÑÑÑанÑÑва, ÑодеÑжаÑего оÑноÑение |
OID Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ , ÑодеÑжаÑей оÑноÑение |
ÐÐ¾Ð¼ÐµÑ ÑÐ»Ð¾Ñ Ð² оÑноÑении |
ÐÐ¾Ð¼ÐµÑ ÑÑÑаниÑÑ Ð² оÑноÑении |
СÑÑаниÑа загÑÑзнена? |
СÑÑÑÑик обÑаÑений по ÑаÑовой ÑÑÑелке |
ЧиÑло обÑлÑживаÑÑÐ¸Ñ Ð¿ÑоÑеÑÑов, закÑепивÑÐ¸Ñ ÑÑÐ¾Ñ Ð±ÑÑÐµÑ |
ÐÐ»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ бÑÑеÑа в обÑем кеÑе вÑдаÑÑÑÑ Ð¾Ð´Ð½Ð° ÑÑÑока. ÐÐ»Ñ Ð½ÐµÐ¸ÑполÑзÑемÑÑ
бÑÑеÑов вÑе Ð¿Ð¾Ð»Ñ ÑÐ°Ð²Ð½Ñ NULL, за иÑклÑÑением bufferid. ÐбÑие ÑиÑÑемнÑе каÑалоги показÑваÑÑÑÑ ÐºÐ°Ðº оÑноÑÑÑиеÑÑ Ðº базе даннÑÑ
под номеÑом 0.
Так как ÐºÐµÑ Ð¸ÑполÑзÑеÑÑÑ ÑовмеÑÑно вÑеми базами даннÑÑ
, обÑÑно в нÑм наÑ
одÑÑÑÑ Ð¸ ÑÑÑаниÑÑ Ð¸Ð· оÑноÑений, не пÑинадлежаÑиÑ
ÑекÑÑей базе даннÑÑ
. ÐÑо ознаÑаеÑ, ÑÑо Ð´Ð»Ñ Ð½ÐµÐºÐ¾ÑоÑÑÑ
ÑÑÑок пÑи Ñоединении Ñ pg_class не найдÑÑÑÑ ÑооÑвеÑÑÑвÑÑÑие ÑÑÑоки, либо Ñоединение бÑÐ´ÐµÑ Ð½ÐµÐºÐ¾ÑÑекÑнÑм. ÐÑли Ð²Ñ Ñ
оÑиÑе вÑполниÑÑ Ñоединение Ñ pg_class, бÑÐ´ÐµÑ Ð¿ÑавилÑнÑм огÑаниÑиÑÑ Ñоединение ÑÑÑоками, в коÑоÑÑÑ
reldatabase ÑодеÑÐ¶Ð¸Ñ OID ÑекÑÑей Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
или нолÑ.
ÐÐ»Ñ ÐºÐ¾Ð¿Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ
ÑоÑÑоÑниÑ, коÑоÑÑе бÑдÑÑ Ð¾ÑобÑажаÑÑÑÑ, блокиÑовки в менеджеÑе бÑÑеÑов не ÑÑÑанавливаÑÑÑÑ. ÐоÑÑÐ¾Ð¼Ñ Ð¾Ð±ÑаÑÐµÐ½Ð¸Ñ Ðº пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ pg_buffercache менÑÑе ÑказÑваÑÑÑÑ Ð½Ð° обÑÑной акÑивноÑÑи бÑÑеÑов, но Ð½Ð°Ð±Ð¾Ñ ÑезÑлÑÑаÑов, полÑÑеннÑй Ð´Ð»Ñ Ð²ÑеÑ
бÑÑеÑов, в Ñелом Ð¼Ð¾Ð¶ÐµÑ Ð¾ÐºÐ°Ð·Ð°ÑÑÑÑ Ð½ÐµÑоглаÑованнÑм. Ðднако внÑÑÑи каждого оÑделÑного бÑÑеÑа ÑоглаÑованноÑÑÑ Ð¸Ð½ÑоÑмаÑии гаÑанÑиÑÑеÑÑÑ.
F.37.2. ФÑнкÑÐ¸Ñ pg_buffercache_summary() #
ÐпÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑÑолбÑов, возвÑаÑаемÑÑ ÑÑнкÑией, Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ñ Ð² ТаблиÑе F.20.
ТаблиÑа F.20. ÐÑÑ
однÑе ÑÑолбÑÑ pg_buffercache_summary()
Тип ÑÑолбÑа ÐпиÑание |
|---|
ЧиÑло иÑполÑзÑемÑÑ Ð¾Ð±ÑÐ¸Ñ Ð±ÑÑеÑов |
ЧиÑло неиÑполÑзÑемÑÑ Ð¾Ð±ÑÐ¸Ñ Ð±ÑÑеÑов |
ЧиÑло загÑÑзнÑннÑÑ Ð¾Ð±ÑÐ¸Ñ Ð±ÑÑеÑов |
ЧиÑло закÑеплÑннÑÑ Ð¾Ð±ÑÐ¸Ñ Ð±ÑÑеÑов |
СÑеднее знаÑение ÑÑÑÑÑика иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ð±ÑÐ¸Ñ Ð±ÑÑеÑов |
ФÑнкÑÐ¸Ñ pg_buffercache_summary() возвÑаÑÐ°ÐµÑ Ð¾Ð´Ð½Ñ ÑÑÑÐ¾ÐºÑ Ñо Ñводной инÑоÑмаÑией о ÑоÑÑоÑнии вÑеÑ
обÑиÑ
бÑÑеÑов. ÐодобнÑÑ Ð¸ более подÑобнÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ полÑÑиÑÑ Ð¸Ð· пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ pg_buffercache, но pg_buffercache_summary() обÑ
одиÑÑÑ ÑÑÑеÑÑвенно деÑевле.
Ðак и пÑедÑÑавление pg_buffercache, pg_buffercache_summary() не полÑÑÐ°ÐµÑ Ð±Ð»Ð¾ÐºÐ¸Ñовки менеджеÑа бÑÑеÑов, поÑÑÐ¾Ð¼Ñ Ð¿Ñи паÑаллелÑной ÑабоÑе в базе даннÑÑ
допÑÑÑима незнаÑиÑелÑÐ½Ð°Ñ Ð¿Ð¾Ð³ÑеÑноÑÑÑ ÑезÑлÑÑаÑов ÑÑнкÑии.
F.37.3. ФÑнкÑÐ¸Ñ pg_buffercache_usage_counts() #
ÐпÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑÑолбÑов, возвÑаÑаемÑÑ ÑÑнкÑией, Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ñ Ð² ТаблиÑе F.21.
ТаблиÑа F.21. ÐÑÑ
однÑе ÑÑолбÑÑ pg_buffercache_usage_counts()
Тип ÑÑолбÑа ÐпиÑание |
|---|
Ðозможное знаÑение ÑÑÑÑÑика иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð±ÑÑеÑов |
ЧиÑло бÑÑеÑов в Ñазбивке по ÑÑÑÑÑÐ¸ÐºÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ |
ЧиÑло загÑÑзнÑннÑÑ Ð±ÑÑеÑов в Ñазбивке по ÑÑÑÑÑÐ¸ÐºÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ |
ЧиÑло закÑеплÑннÑÑ Ð±ÑÑеÑов в Ñазбивке по ÑÑÑÑÑÐ¸ÐºÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ |
ФÑнкÑÐ¸Ñ pg_buffercache_usage_counts() возвÑаÑÐ°ÐµÑ Ð½Ð°Ð±Ð¾Ñ ÑÑÑок Ñо Ñводной инÑоÑмаÑией о ÑоÑÑоÑнии вÑеÑ
обÑиÑ
бÑÑеÑов, агÑегиÑованнÑÑ
по возможнÑм знаÑениÑм ÑÑÑÑÑика иÑполÑзованиÑ. ÐодобнÑÑ Ð¸ более подÑобнÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ полÑÑиÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¿ÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ pg_buffercache, но pg_buffercache_usage_counts() обÑ
одиÑÑÑ ÑÑÑеÑÑвенно деÑевле.
Ðак и пÑедÑÑавление pg_buffercache, pg_buffercache_usage_counts() не полÑÑÐ°ÐµÑ Ð±Ð»Ð¾ÐºÐ¸Ñовки менеджеÑа бÑÑеÑов, поÑÑÐ¾Ð¼Ñ Ð¿Ñи паÑаллелÑной ÑабоÑе в базе даннÑÑ
допÑÑÑима незнаÑиÑелÑÐ½Ð°Ñ Ð¿Ð¾Ð³ÑеÑноÑÑÑ ÑезÑлÑÑаÑов ÑÑнкÑии.
F.37.4. ФÑнкÑÐ¸Ñ pg_buffercache_evict() #
ФÑнкÑÐ¸Ñ pg_buffercache_evict() пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑÐ¾Ñ Ð±ÑÑеÑа, коÑоÑÑй оÑобÑажаеÑÑÑ Ð² ÑÑолбÑе bufferid пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ pg_buffercache. ÐозвÑаÑÐ°ÐµÑ true в ÑлÑÑае ÑÑпеÑ
а и false, еÑли бÑÑÐµÑ Ð±Ñл недейÑÑвиÑелен, не мог бÑÑÑ Ð²ÑÑеÑнен, Ñак как бÑл закÑеплÑн, или Ñнова загÑÑзнилÑÑ Ð¿Ð¾Ñле попÑÑки запиÑи. ÐоÑле завеÑÑÐµÐ½Ð¸Ñ ÑÑнкÑии ÑезÑлÑÑÐ°Ñ ÑÑÐ°Ð·Ñ ÑÑановиÑÑÑ ÑÑÑаÑевÑим, поÑколÑÐºÑ Ð¸Ð·-за паÑаллелÑно вÑполнÑемÑÑ
опеÑаÑий бÑÑÐµÑ Ð¼Ð¾Ð¶ÐµÑ Ñнова ÑÑаÑÑ Ð´ÐµÐ¹ÑÑвиÑелÑнÑм в лÑбое вÑемÑ. ÐÑа ÑÑнкÑÐ¸Ñ Ð¿ÑедназнаÑена ÑолÑко Ð´Ð»Ñ ÑеÑÑиÑованиÑ.
F.37.5. ÐÑÐ¸Ð¼ÐµÑ Ð²Ñвода #
regression=# SELECT n.nspname, c.relname, count(*) AS buffers
FROM pg_buffercache b JOIN pg_class c
ON b.relfilenode = pg_relation_filenode(c.oid) AND
b.reldatabase IN (0, (SELECT oid FROM pg_database
WHERE datname = current_database()))
JOIN pg_namespace n ON n.oid = c.relnamespace
GROUP BY n.nspname, c.relname
ORDER BY 3 DESC
LIMIT 10;
nspname | relname | buffers
------------+------------------------+---------
public | delete_test_table | 593
public | delete_test_table_pkey | 494
pg_catalog | pg_attribute | 472
public | quad_poly_tbl | 353
public | tenk2 | 349
public | tenk1 | 349
public | gin_test_idx | 306
pg_catalog | pg_largeobject | 206
public | gin_test_tbl | 188
public | spgist_text_tbl | 182
(10 rows)
regression=# SELECT * FROM pg_buffercache_summary();
buffers_used | buffers_unused | buffers_dirty | buffers_pinned | usagecount_avg
--------------+----------------+---------------+----------------+----------------
248 | 2096904 | 39 | 0 | 3.141129
(1 row)
regression=# SELECT * FROM pg_buffercache_usage_counts();
usage_count | buffers | dirty | pinned
-------------+---------+-------+--------
0 | 14650 | 0 | 0
1 | 1436 | 671 | 0
2 | 102 | 88 | 0
3 | 23 | 21 | 0
4 | 9 | 7 | 0
5 | 164 | 106 | 0
(6 rows)F.37.6. ÐвÑоÑÑ #
ÐаÑк ÐиÑквÑд <[email protected]>
ÐÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾ конÑÑÑÑкÑии: Ðейл Ðонвей <[email protected]>
СовеÑÑ Ð¿Ð¾ оÑладке: Том Ðейн <[email protected]>