zoukankan      html  css  js  c++  java
  • 初步学习pg_control文件之十五

    接前文  初步学习pg_control文件之十四

    再看如下这个:

    int            MaxConnections;

    应该说,它是一个参考值,在global.c中有如下定义

                
    /*            
     * Primary determinants of sizes of shared-memory structures.  MaxBackends is            
     * MaxConnections + autovacuum_max_workers + 1 (it is computed by the GUC            
     * assign hooks for those variables):            
     */            
    int            NBuffers = 1000;
    int            MaxBackends = 100;
    int            MaxConnections = 90;
    /*                                
     * This must be called ONCE during postmaster or standalone-backend startup                                
     */                                
    void                                
    StartupXLOG(void)                                
    {                                
        …                            
        /*                            
         * If any of the critical GUCs have changed, log them before we allow                            
         * backends to write WAL.                            
         */                            
        LocalSetXLogInsertAllowed();                            
        XLogReportParameters();                            
                                    
        …                            
    }                                
    /*                                
     * Check if any of the GUC parameters that are critical for hot standby                                
     * have changed, and update the value in pg_control file if necessary.                                
     */                                
    static void                                
    XLogReportParameters(void)                                
    {                                
        if (wal_level != ControlFile->wal_level ||                            
            MaxConnections != ControlFile->MaxConnections ||                        
            max_prepared_xacts != ControlFile->max_prepared_xacts ||                        
            max_locks_per_xact != ControlFile->max_locks_per_xact)                        
        {                            
            …                        
                                    
            ControlFile->MaxConnections = MaxConnections;                        
            ControlFile->max_prepared_xacts = max_prepared_xacts;                        
            ControlFile->max_locks_per_xact = max_locks_per_xact;                        
            ControlFile->wal_level = wal_level;                        
            UpdateControlFile();                        
        }                            
    }                                

    它就是一个参考值:

    /*                                            
     * This must be called ONCE during postmaster or standalone-backend startup                                            
     */                                            
    void                                            
    StartupXLOG(void)                                            
    {                                            
        …                                        
                                                
        /* REDO */                                        
        if (InRecovery)                                        
        {                                        
            …                                    
            /* Check that the GUCs used to generate the WAL allow recovery */                                    
            CheckRequiredParameterValues();                                    
                                                
            …                                    
            if (record != NULL)                                    
            {                                    
                …                                
                /*                                
                 * main redo apply loop                                
                 */                                
                do                                
                {                                
                    …                            
                    /*                            
                     * If we are attempting to enter Hot Standby mode, process                            
                     * XIDs we see                            
                     */                            
                    if (standbyState >= STANDBY_INITIALIZED &&                            
                        TransactionIdIsValid(record->xl_xid))                        
                        RecordKnownAssignedTransactionIds(record->xl_xid);                        
                                                
                    RmgrTable[record->xl_rmid].rm_redo(EndRecPtr, record);                            
                    …                            
                                                
                } while (record != NULL && recoveryContinue);                                
                …                                
            }                                    
            …                                    
        }                                        
        …                                        
    }                                            
    /*                                
     * XLOG resource manager's routines                                
     *                                
     * Definitions of info values are in include/catalog/pg_control.h, though                                
     * not all record types are related to control file updates.                                
     */                                
    void                                
    xlog_redo(XLogRecPtr lsn, XLogRecord *record)                                
    {                                
        …                            
        if (info == XLOG_NEXTOID)                            
        {                            
            …                        
        }                            
        …                            
        else if (info == XLOG_PARAMETER_CHANGE)                            
        {                            
            …                        
            /* Check to see if any changes to max_connections give problems */                        
            CheckRequiredParameterValues();                        
        }                            
    } 

    再看下面:

    /*                                                
     * Check to see if required parameters are set high enough on this server                                                
     * for various aspects of recovery operation.                                                
     */                                                
    static void                                                
    CheckRequiredParameterValues(void)                                                
    {                                                
        ...                                      
                             
        if (InArchiveRecovery && EnableHotStandby)                                            
        {                                            
            .../* We ignore autovacuum_max_workers when we make this test. */  
            RecoveryRequiresIntParameter("max_connections",                                        
                                 MaxConnections,                    
                                 ControlFile->MaxConnections);
    ...
    } }
  • 相关阅读:
    理解JavaScript变量值
    理解基本包装类型Number,String,Boolean
    理解JavaScript原始类型和引用类型
    理解JavaScript数据类型
    右值引用
    C语言中内存对齐方式
    open/fopen read/fread write/fwrite区别
    UML类图几种关系的总结
    UML类图几种关系的总结
    宏应用缺点
  • 原文地址:https://www.cnblogs.com/gaojian/p/3232543.html
Copyright © 2011-2022 走看看