Skip to content

Files

Latest commit

Dec 15, 2023
f400df2 · Dec 15, 2023

History

History
126 lines (63 loc) · 4.18 KB

20201110_01.md

File metadata and controls

126 lines (63 loc) · 4.18 KB

PostgreSQL 14 preview - 查看backend process的memory context

作者

digoal

日期

2020-11-10

标签

PostgreSQL , memory context , backenc pid


背景

通过pg_backend_memory_contexts可查询任意backend pid的memory context, 为诊断提供更多有价值的参考信息.

https://www.postgresql.org/message-id/flat/0271f440ac77f2a4180e0e56ebd944d1@oss.nttdata.com

https://commitfest.postgresql.org/30/2711/

Get memory contexts of an arbitrary backend process     
    
Hi,    
    
    
    
After commit 3e98c0bafb28de, we can display the usage of the    
memory contexts using pg_backend_memory_contexts system    
view.    
    
    
    
However, its target is limited to the  process attached to    
the current session.    
    
    
    
As discussed in the thread[1], it'll be useful to make it    
possible to get the memory contexts of an arbitrary backend    
process.    
    
    
    
Attached PoC patch makes pg_get_backend_memory_contexts()    
display meory contexts of the specified PID of the process.    
    
    
    
   =# -- PID of the target process is 17051    
   =# SELECT * FROM  pg_get_backend_memory_contexts(17051) ;    
            name          | ident |      parent      | level |     
total_bytes | total_nblocks | free_bytes | free_chunks | used_bytes    
       
-----------------------+-------+------------------+-------+-------------+---------------+------------+-------------+------------    
    TopMemoryContext      |       |                  |     0 |           
68720 |             5 |      16816 |          16 |      51904    
    RowDescriptionContext |       | TopMemoryContext |     1 |            
8192 |             1 |       6880 |           0 |       1312    
    MessageContext        |       | TopMemoryContext |     1 |           
65536 |             4 |      19912 |           1 |      45624    
    ...    
    
    
    
It doesn't display contexts of all the backends but only    
the contexts of specified process.    
I think it would be enough because I suppose this function    
is used after investigations using ps command or other OS    
level utilities.    
    
    
    
The rough idea of implementation is like below:    
    
    
    
   1. send  a signal to the specified process    
   2. signaled process dumps its memory contexts to a file    
   3. read the dumped file and display it to the user    
    
    
    
Any thoughts?    
    
    
    
[1]     
https://www.postgresql.org/message-id/72a656e0f71d0860161e0b3f67e4d771%40oss.nttdata.com    
    
    
    
Regards,    
    
    
    
--    
Atsushi Torikoshi    
NTT DATA CORPORATION    

您的愿望将传达给PG kernel hacker、数据库厂商等, 帮助提高数据库产品质量和功能, 说不定下一个PG版本就有您提出的功能点. 针对非常好的提议,奖励限量版PG文化衫、纪念品、贴纸、PG热门书籍等,奖品丰富,快来许愿。开不开森.

digoal's wechat