0

私はデータベースとPostgresの初心者です。私は、 "CreateSharedMemoryAndSemaphores"メソッドでPostgresによって割り当てられているメモリを分析しています。メソッド "CreateSharedMemoryAndSemaphores"によって割り当てられるメモリを知ることは可能ですか?

変数「サイズ」は100000のデフォルト値で開始し、「SpinlockSemaSize」、「LockShmemSize」などのように、共有メモリの束を追加して同様

は、個々のメソッドがどのように追加しているかを知る方法はあります変数のメモリの多くは?

size = 100000; 
    size = add_size(size, SpinlockSemaSize()); 
    size = add_size(size, hash_estimate_size(SHMEM_INDEX_SIZE, 
              sizeof(ShmemIndexEnt))); 
    size = add_size(size, BufferShmemSize()); 
    size = add_size(size, LockShmemSize()); 
    size = add_size(size, PredicateLockShmemSize()); 
    size = add_size(size, ProcGlobalShmemSize()); 
    size = add_size(size, XLOGShmemSize()); 
    size = add_size(size, CLOGShmemSize()); 
    size = add_size(size, CommitTsShmemSize()); 
    size = add_size(size, SUBTRANSShmemSize()); 
    size = add_size(size, TwoPhaseShmemSize()); 
    size = add_size(size, BackgroundWorkerShmemSize()); 
    size = add_size(size, MultiXactShmemSize()); 
    size = add_size(size, LWLockShmemSize()); 
    size = add_size(size, ProcArrayShmemSize()); 
    size = add_size(size, BackendStatusShmemSize()); 
    size = add_size(size, SInvalShmemSize()); 
    size = add_size(size, PMSignalShmemSize()); 
    size = add_size(size, ProcSignalShmemSize()); 
    size = add_size(size, CheckpointerShmemSize()); 
    size = add_size(size, AutoVacuumShmemSize()); 

実際のコード:https://github.com/postgres/postgres/blob/848ef42bb8c7909c9d7baa38178d4a209906e7c1/src/backend/storage/ipc/ipci.c

答えて

0

各行は合計に貢献正確な量を把握するために、あなたは、個々の関数定義を読んでする必要があると思います。

は、しかし、通常は、これまでで最大の部分は共有バッファのためのスペース、共有PostgreSQLのページキャッシュを、計算され

size = add_size(size, BufferShmemSize()); 

から来ています。

BufferShmemSize()において、大きな貢献は、この行からのものである:

/* size of data pages */ 
size = add_size(size, mul_size(NBuffers, BLCKSZ)); 

NBufferspostgresql.confパラメータshared_buffers(PostgreSQLの用語でGUC)を含むグローバル変数であり、BLCKSZ手動pg_config.hに変更しない限り8192であり、それは事実上誰もしません。

+0

何らかのユーティリティや他のプロセスを使用してpostgresエンジンを起動せずに、共有メモリ計算の値(ipci.cファイルのCreateSharedMemoryAndSemaphores()メソッドで計算された値)を見つけることはできますか? – leoaaryan

+0

マシン上の共有メモリセグメントの大きさを確認してください。これはオペレーティングシステムに依存します。 Linuxでは 'ipcs -m'を使います。 –

+0

これは、postgres dbエンジンを起動した後でしか見つかりません。 postgres dbエンジンを起動しなくても見つけられるようにしたいと思います。 – leoaaryan

関連する問題