±à¼ÍƼö: |
±¾ÎÄÊ×ÏȽéÉÜÁËPostgreSQL
ϵͳµÄ»ù±¾Ìåϵ½á¹¹¡¢Potgres(³£×¤½ø³Ì)¡¢Postgres(×Ó½ø³Ì)¡¢Postgres(×Ó½ø³Ì)ÒÔ¼°ºó¶ËµÄ´¦ÀíÁ÷³Ì¡£
±¾ÎÄÀ´×Ôcsdn£¬ÓÉ»ðÁú¹ûÈí¼þAnna±à¼¡¢ÍƼö¡£ |
|
PostgreSQL ϵͳµÄ»ù±¾Ìåϵ½á¹¹ PostgreSQL ʹÓÿͻ§»ú/·þÎñÆ÷£¨C/S£©µÄģʽÌṩ·þÎñ£¬Ò»¸öPostgreSQL»á»°ÓÉÏÂÁÐÏà¹ØµÄ½ø³Ì£¨³ÌÐò£©×é³É£º
(1)Ò»¸ö·þÎñÆ÷¶Ë½ø³Ì¡£¸Ã½ø³Ì¹ÜÀíÊý¾Ý¿âÎļþ£¬½ÓÊܿͻ§¶ËÓëÊý¾Ý¿âµÄÁ¬½Ó£¬ÇÒ´ú±í¿Í»§¶Ë¶ÔÊý¾Ý¿â½øÐвÙ×÷¡£¸Ã½ø³ÌµÄ³ÌÐòÃû½Ð×ö
postgres¡£
(2)ǰ¶ËÓ¦Ó㬼´ÐèÒª½øÐÐÊý¾Ý¿â²Ù×÷µÄ¿Í»§¶ËÓ¦Ó᣿ͻ§¶ËÓ¦ÓÿÉÄܱ¾Éí¾ÍÊǶàÖÖ¶àÑùµÄ£ºËüÃÇ¿ÉÒÔÊÇÒ»¸ö×Ö·û½ç
ÃæµÄ¹¤¾ß£¬ Ò²¿ÉÒÔÊÇÒ»¸öͼÐνçÃæµÄÓ¦Ó㬻òÕßÊÇÒ»¸öͨ¹ý·ÃÎÊÊý¾Ý¿âÀ´ÏÔÊ¾ÍøÒ³µÄ web ·þÎñÆ÷£¬»òÕßÊÇÒ»¸öÌØÊâµÄÊý¾Ý¿â¹ÜÀí¹¤¾ß¡£
һЩ¿Í»§¶ËÓ¦ÓÃÊÇºÍ PostgreSQL ·¢²¼Ò»ÆðÌṩµÄ£¬µ«¾ø´ó²¿·ÖÊÇÓû§¿ª·¢µÄ¡£
ºÍµäÐ͵Ŀͻ§¶Ë/·þÎñÆ÷Ó¦Óã¨C/SÓ¦Óã©Ò»Ñù£¬¿Í»§¶ËºÍ·þÎñÆ÷¿ÉÒÔÔÚ²»Í¬µÄÖ÷»úÉÏ¡£´Ëʱ£¬ËüÃÇͨ¹ýTCP/IP½øÐÐÍøÂçÁ¬½Ó£¬ÄãÓ¦¸Ã¼ÇסÕâÒ»µã£¬ÒòΪÔÚ¿Í»§»úÉÏ¿ÉÒÔ·ÃÎʵÄÎļþδ±ØÄܹ»ÔÚÊý¾Ý¿â·þÎñÆ÷»úÆ÷ÉÏ·ÃÎÊ£¨»òÕßÖ»ÄÜÓò»Í¬µÄÎļþÃû½øÐзÃÎÊ£©¡£
PostgreSQL ·þÎñÆ÷¿ÉÒÔ´¦ÀíÀ´×Ô¿Í»§¶ËµÄ¶à¸ö²¢·¢ÇëÇó¡£ÎªÁËÄÜÕâÑù´¦Àí£¬Ëü»áΪÿ¸öÇëÇóÆô¶¯£¨¡°forks¡±£©Ò»¸öеĽø³Ì£¬È»ºó£¬¿Í»§¶ËºÍзþÎñÆ÷¶Ë½ø³Ì¾Í²»ÔÙ¾¹ý×î³õµÄpostgres
½ø³Ì¶øÖ±½ÓͨÐÅ¡£ Òò´Ë£¬ ·þÎñÆ÷¶ËµÄÖ÷½ø³ÌÒ»Ö±ÔËÐУ¬µÈ´ý×ÅÀ´×Ô¿Í»§¶ËµÄÁ¬½Ó£»¶ø¿Í»§¶ËºÍÏà¹ØÁªµÄ·þÎñÆ÷¶Ë½ø³ÌÔòÔÚÐèÒªµÄʱºò²Å»áÔËÐС££¨µ±È»£¬ÕâЩ¶ÔÓû§À´ËµÊÇ͸Ã÷µÄ£¬ÔÚÕâÀï̸ÕâЩÖ÷ÒªÊÇΪÁË˵Ã÷µÄÍêÕûÐÔ¡££©
PostgreSQLÊý¾Ý¿âÊÇÒ»ÖÖ¼«ºÃ¿ÉÒÔÔËÐÐÔÚ¸÷ÖÖÆ½Ì¨ÉϵÄÃâ·ÑµÄ¿ª·ÅÔ´ÂëµÄ¶ÔÏó¹ØÏµÊý¾Ý¿â£¬ËüÊÇÒ»ÖÖÒÔ¹ØÏµÊý¾Ý¿âºÍSQLΪ»ù´¡£¬À©Õ¹Á˳éÏóÊý¾ÝÀàÐÍ£¬´Ó¶ø¾ß±¸ÃæÏò¶ÔÏóÌØÐÔµÄÊý¾Ý¿â¡£

PostgreSQLÌåϵ½á¹¹Í¼£¨×é³É½á¹¹ºÍ¹ØÏµ£©
PostgreSQLÓÉÁ¬½Ó¹ÜÀíϵͳ£¨ÏµÍ³¿ØÖÆÆ÷£©£¬±àÒëÖ´ÐÐϵͳ£¬´æ´¢¹ÜÀíϵͳ£¬ÊÂÎñϵͳ£¬ÏµÍ³±íÎå´ó²¿·Ö×é³É¡£
Á¬½Ó¹ÜÀíϵͳ½ÓÊÜÍⲿ²Ù×÷¶ÔϵͳµÄÇëÇ󣬶ԲÙ×÷ÇëÇó½øÐÐÔ¤´¦ÀíºÍ·Ö·¢£¬ÆðϵͳÂß¼¿ØÖÆ×÷Óã»
±àÒëÖ´ÐÐϵͳÓɲéѯ±àÒëÆ÷£¬²éѯִÐÐÆ÷×é³É£¬Íê³É²Ù×÷ÇëÇóÔÚÊý¾Ý¿âÖеķÖÎö´¦ÀíºÍת»¯¹¤×÷£¬×îÖÕʵÏÖÎïÀí´æ´¢½éÖÊÖÐÊý¾ÝµÄ²Ù×÷£»
´æ´¢¹ÜÀíϵͳÓÉË÷Òý¹ÜÀíÆ÷£¬ÄÚ´æ¹ÜÀíÆ÷£¬Íâ´æ¹ÜÀíÆ÷×é³É£¬¸ºÔð´æ´¢ºÍ¹ÜÀíÎïÀíÊý¾Ý£¬Ìṩ¶Ô±àÒë²éѯϵͳµÄÖ§³Ö£»
ÊÂÎñϵͳÓÉÊÂÎñ¹ÜÀíÆ÷£¬ÈÕÖ¾¹ÜÀíÆ÷£¬²¢·¢¿ØÖÆ£¬Ëø¹ÜÀíÆ÷×é³É£¬ÈÕÖ¾¹ÜÀíÆ÷ºÍÊÂÎñ¹ÜÀíÆ÷Íê³É¶Ô²Ù×÷ÇëÇóµÄÊÂÎñÒ»ÖÂÐÔÖ§³Ö£¬Ëø¹ÜÀíÆ÷ºÍ²¢·¢¿ØÖÆÌṩ¶Ô²¢·¢·ÃÎÊÊý¾ÝµÄÒ»ÖÂÐÔÖ§³Ö£»
ϵͳ±íÊÇPostgreSQLÊý¾Ý¿âµÄÔªÐÅÏ¢¹ÜÀíÖÐÐÄ£¬°üÀ¨Êý¾Ý¿â¶ÔÏóÐÅÏ¢ºÍÊý¾Ý¿â¹ÜÀí¿ØÖÆÐÅÏ¢¡£ÏµÍ³±í¹ÜÀíÔªÊý¾ÝÐÅÏ¢£¬½«PostgreSQLÊý¾Ý¿âµÄ¸÷¸öÄ£¿éÓлúµØÁ¬½ÓÔÚÒ»Æð£¬ÐγÉÒ»¸ö¸ßЧµÄÊý¾Ý¹ÜÀíϵͳ¡£
ϵͳ±í
ÔÚ¹ØÏµÊý¾Ý¿âÖУ¬ÎªÁËʵÏÖÊý¾Ý¿âϵͳµÄ¿ØÖÆ£¬±ØÐëÌṩÊý¾Ý×ÖµäµÄ¹¦ÄÜ¡£Êý¾Ý×ֵ䲻½ö´æ´¢¸÷ÖÖ¶ÔÏóµÄÃèÊöÐÅÏ¢£¬¶øÇҴ洢ϵͳ¹ÜÀíËùÐèµÄ¸÷ÖÖ¶ÔÏóµÄϸ½ÚÐÅÏ¢¡£Êý¾Ý×Öµä°üº¬Êý¾Ý¿âϵͳÖÐËùÓжÔÏó¼°ÆäÊôÐÔµÄÃèÊöÐÅÏ¢£¬¶ÔÏóÖ®¼ä¹ØÏµµÄÃèÊöÐÅÏ¢£¬¶ÔÏóÊôÐÔµÄ×ÔÈ»ÓïÑÔº¬ÒåÒÔ¼°Êý¾Ý×Öµä±ä»¯µÄÀúÊ·£¬Êý¾Ý×ÖµäÊǹØÏµÊý¾Ý¿âϵͳ¹ÜÀí¿ØÖÆÐÅÏ¢µÄºËÐÄ£¬ÔÚPostgreSQLÊý¾Ý¿âϵͳÖÐϵͳ±í°çÑÝ×ÅÊý¾Ý×ÖµäµÄ½ÇÉ«¡£
ϵͳ±íÊÇPostgreSQLÊý¾Ý¿â´æ·Å½á¹¹ÔªÊý¾ÝµÄµØ·½£¬ËûÔÚPostgreSQLÖбíÏÖΪ´æ·ÅÓÐϵͳÐÅÏ¢µÄÆÕͨ±í»òÕßÊÓͼ£¨Óû§¿ÉÒÔɾ³ý£¬Öؽ¨£©¡£
ϵͳ±í±£´æÁËÊý¾Ý¿âµÄËùÓÐÔªÊý¾Ý£¬ËùÒÔϵͳÔËÐÐʱ¶Ôϵͳ±íµÄ·ÃÎÊÊǷdz£Æµ·±µÄ¡£ÎªÁËÌá¸ßϵͳÐÔÄÜ£¬ÔÚÄÚ´æÖн¨Á¢Á˹²ÏíµÄϵͳ±í£¬Ê¹ÓÃHash±íÌá¸ß²éѯЧÂÊ¡£
Ö÷Ҫϵͳ±í¹¦ÄÜ
1 pg_namespace ´æ´¢ÃüÃû¿Õ¼ä
2 pg_tablespace ´æ´¢¿Õ¼äÐÅÏ¢
3 pg_database ´æ´¢µ±Ç°Êý¾Ý¼¯´ØÖÐÊý¾Ý¿âµÄÐÅÏ¢¡£
4 pg_class ´æ´¢±í¼°Óë±íÀàËÆ½á¹¹µÄÊý¾Ý¿â¶ÔÏóÐÅÏ¢£¬°üº¬£¬Ë÷Òý£¬ÐòÁУ¬ÊÓͼ£¬¸´ºÏÊý¾ÝÀàÐÍ£¬TOAST±íµÈ¡£
5 pg_type ´æ´¢Êý¾ÝÀàÐÍÐÅÏ¢¡£
6 pg_attribute ´æ´¢±íµÄÊôÐÔÐÅÏ¢¡£
7 pg_index ´æ´¢Ë÷ÒýµÄ¾ßÌåÐÅÏ¢¡£
PostgreSQLÊý¾Ý¿âϵͳµÄÖ÷Òª¹¦Äܶ¼¼¯ÖÐÓÚPostgres³ÌÐò£¬ÆäÈë¿ÚÊÇMainÄ£¿éÖеÄmainº¯Êý£¬ÔÚ³õʼ»¯Êý¾Ý¼¯´Ø£¬Æô¶¯Êý¾Ý¿â·þÎñÆ÷ÊÇ£¬¶¼½«´ÓÕâÀ↑ʼִÐС£MainÄ£¿éÖ÷ÒªµÄ¹¤×÷ʱȷ¶¨µ±Ç°µÄ²Ù×÷ϵͳƽ̨£¬²¢¾Ý´Ë×öһЩƽ̨Ïà¹ØµÄ»·¾³±äÁ¿ÉèÖúͳõʼ»¯£¬È»ºóͨ¹ý¶ÔÃüÁîÐвÎÊýµÄÅжϣ¬½«¿ØÖÆ×ªµ½ÏàÓ¦µÄÄ£¿éÖÐÈ¥¡£ÏÂͼÊÇmainº¯ÊýµÄµ÷ÓÃÁ÷³Ì¡£

PostgreSQLϵͳÖ÷º¯ÊýmainµÄÁ÷³Ì
PostgreSQLÊØ»¤½ø³ÌPostmasterΪÓû§Á¬½ÓÇëÇó·ÖÅäºǫ́Postgres·þÎñ½ø³Ì£¬»¹½«Æô¶¯Ïà¹ØµÄºǫ́·þÎñ½ø³Ì£ºSysLogger(ϵͳÈÕÖ¾½ø³Ì),PgStat(ͳ¼ÆÊý¾ÝÊÕ¼¯½ø³Ì),
AutoVacuum(ϵͳ×Ô¶¯ÇåÀí½ø³Ì).ÔÚPostmaster½øÈ뵽ѻ·¼àÌýÖÐʱÆô¶¯ÈçϽøÐУºBgWriter(ºǫ́д½ø³Ì),WalWriter(ԤдʽÈÕ־д½ø³Ì),PgArch(ԤдʽÈÕÖ¾¹éµµ½ø³Ì)¡£ÕâЩ½ø³Ì½«ÔÚºóÐøÎÄÕÂÖнéÉÜ¡£
ÏÂͼÊÇPostgreSQLµÄºǫ́Á÷³Ìͼ£º

1.1 Potgres(³£×¤½ø³Ì)
¹ÜÀíºó¶ËµÄ³£×¤½ø³Ì£¬Ò²³ÆÎª¡¯postmaster¡¯¡£ÆäĬÈϼàÌýUNIXDomain SocketºÍTCP/IP£¨WindowsµÈ£¬Ò»²¿·ÖµÄƽֻ̨¼àÌýtcp/ip£©µÄ5432¶Ë¿Ú£¬µÈ´ýÀ´×Ôǰ¶ËµÄµÄÁ¬½Ó´¦Àí¡£¼àÌýµÄ¶Ë¿ÚºÅ¿ÉÒÔÔÚPostgreSQLµÄÉèÖÃÎļþpostgresql.confÀïÃæ¿ÉÒԸġ£
Ò»µ©ÓÐǰ¶ËÁ¬½Ó¹ýÀ´£¬postgres»áͨ¹ýfork(2)Éú³É×Ó½ø³Ì¡£Ã»ÓÐFork(2)µÄwindowsƽ̨µÄ»°£¬ÔòÀûÓÃcreateProcess()Éú³ÉеĽø³Ì¡£ÕâÖÖÇéÐεϰ£¬ºÍfork(2)²»Í¬µÄÊÇ£¬¸¸½ø³ÌµÄÊý¾Ý²»»á±»¼Ì³Ð¹ýÀ´£¬ËùÒÔÐèÒªÀûÓù²ÏíÄÚ´æ°Ñ¸¸½ø³ÌµÄÊý¾Ý¼Ì³Ð¹ýÀ´¡£
1.2 Postgres(×Ó½ø³Ì) ×Ó½ø³Ì¸ù¾Ýpg_hba.conf¶¨ÒåµÄ°²È«²ßÂÔÀ´ÅжÏÊÇ·ñÔÊÐí½øÐÐÁ¬½Ó£¬¸ù¾Ý²ßÂÔ£¬»á¾Ü¾øÄ³Ð©Ìض¨µÄIP¼°ÍøÂ磬»òÕßÒ²¿ÉÒÔÖ»ÔÊÐíÄ³Ð©ÌØ¶¨µÄÓû§»òÕß¶ÔijЩÊý¾Ý¿â½øÐÐÁ¬½Ó¡£
Postgres»á½ÓÊÜǰ¶Ë¹ýÀ´µÄ²éѯ£¬È»ºó¶ÔÊý¾Ý¿â½øÐмìË÷£¬×îºÃ°Ñ½á¹û·µ»Ø£¬ÓÐʱҲ»á¶ÔÊý¾Ý¿â½øÐиüС£¸üеÄÊý¾Ýͬʱ»¹»á¼Ç¼ÔÚÊÂÎñÈÕÖ¾ÀïÃæ£¨PostgreSQL³ÆÎªWALÈÕÖ¾£©£¬Õâ¸öÖ÷ÒªÊǵ±Í£µçµÄʱºò£¬·þÎñÆ÷µ±»ú£¬ÖØÐÂÆô¶¯µÄʱºò½øÐлָ´´¦ÀíµÄʱºòʹÓõġ£ÁíÍ⣬°ÑÈÕÖ¾¹éµµ±£´æÆðÀ´£¬¿ÉÔÚÐèÒª½øÐлָ´µÄʱºòʹÓá£ÔÚPostgreSQL
9.0ÒÔºó£¬Í¨¹ý°ÑWALÈÕÖ¾´«ËÍÆäËûµÄpostgreSQL£¬¿ÉÒÔʵʱµÃ½øÐÐÊý¾Ý¿â¸´ÖÆ£¬Õâ¾ÍÊÇËùνµÄ¡®Êý¾Ý¿â¸´ÖÆ¡¯¹¦ÄÜ¡£
1.3 ÆäËûµÄ½ø³Ì PostgresÖ®Í⻹ÓÐһЩ¸¨ÖúµÄ½ø³Ì¡£ÕâЩ½ø³Ì¶¼ÊÇÓɳ£×¤postgresÆô¶¯µÄ½ø³Ì¡£
(1) PostmasterÖ÷½ø³ÌºÍ·þÎñ½ø³Ì µ±PGÊý¾Ý¿âÆô¶¯Ê±£¬Ê×ÏÈ»áÆô¶¯PostmasterÖ÷½ø³Ì¡£Õâ¸ö½ø³ÌÊÇPGÊý¾Ý¿âµÄ×Ü¿ØÖƽø³Ì£¬¸ºÔðÆô¶¯ºÍ¹Ø±ÕÊý¾Ý¿âʵÀý¡£Êµ¼ÊÉÏPostmaster½ø³ÌÊÇÒ»¸öÖ¸ÏòpostgresÃüÁîµÄÁ´½Ó£¬ÈçÏ£º
ll/opt/postgresql/bin/postmaster
/opt/postgresql/bin/postmaster-> postgres
µ±Óû§ºÍPGÊý¾Ý¿â½¨Á¢Á¬½Óʱ£¬ÒªÏÈÓëPostmaster½ø³Ì½¨Á¢Á¬½Ó£¬´Ëʱ¿Í»§¶Ë½ø³Ì»á·¢ËÍÉí·ÝÑéÖ¤ÏûÏ¢¸øPostmasterÖ÷½ø³Ì£¬PostmasterÖ÷½ø³Ì¸ù¾ÝÏûÏ¢½øÐÐÉí·ÝÑéÖ¤£¬Ñé֤ͨ¹ýºó£¬PostmasterÖ÷½ø³Ì»áfork³öÒ»¸ö»á»°·þÎñ½ø³ÌΪÕâ¸öÓû§Á¬½Ó·þÎñ¡£¿ÉÒÔͨ¹ýpg_stat_activity±íÀ´²é¿´·þÎñ½ø³ÌµÄpid£¬ÈçÏ£º
test=# select pid,usename,client_addr, client_port
frompg_stat_activity;
(2) Writer process Writer processÔÚÊʵ±µÄʱ¼äµã°Ñ¹²ÏíÄÚ´æÉϵĻº´æÐ´Íù´ÅÅÌ¡£Í¨¹ýÕâ¸ö½ø³Ì£¬¿ÉÒÔ·ÀÖ¹ÔÚ¼ì²éµãµÄʱºò(checkpoint),´óÁ¿µÄÍù´ÅÅÌд¶øµ¼ÖÂÐÔÄܶñ»¯£¬Ê¹µÃ·þÎñÆ÷¿ÉÒÔ±£³Ö±È½ÏÎȶ¨µÄÐÔÄÜ¡£Background
writerÆðÀ´ÒÔºó¾ÍÒ»Ö±³£×¤Äڴ棬µ«ÊDz¢·ÇÒ»Ö±ÔÚ¹¤×÷£¬Ëü»áÔÚ¹¤×÷Ò»¶Îʱ¼äºó½øÐÐÐÝÃߣ¬ÐÝÃßµÄʱ¼ä¼ä¸ôͨ¹ýpostgresql.confÀïÃæµÄ²ÎÊýbgwriter_delayÉèÖã¬Ä¬ÈÏÊÇ200΢Ãë¡£
Õâ¸ö½ø³ÌµÄÁíÍâÒ»¸öÖØÒªµÄ¹¦ÄÜÊǶ¨ÆÚÖ´Ðмì²éµã(checkpoint)¡£
¼ì²éµãµÄʱºò£¬»á°Ñ¹²ÏíÄÚ´æÉϵĻº´æÄÚÈÝÍùÊý¾Ý¿âÎļþд£¬Ê¹µÃÄÚ´æºÍÎļþµÄ״̬һÖ¡£Í¨¹ýÕâÑù£¬¿ÉÒÔÔÚϵͳ±ÀÀ£µÄʱºò¿ÉÒÔËõ¶Ì´ÓWAL»Ö¸´µÄʱ¼ä£¬ÁíÍâÒ²¿ÉÒÔ·ÀÖ¹WALÎÞÏÞµÄÔö³¤¡£
¿ÉÒÔͨ¹ýpostgresql.confµÄcheckpoint_segments¡¢checkpoint_timeoutÖ¸¶¨Ö´Ðмì²éµãµÄʱ¼ä¼ä¸ô¡£
Writer½ø³ÌÊǰѹ²ÏíÄÚ´æÖеÄÔàҳдµ½´ÅÅÌÉϵĽø³Ì¡£ËüµÄ×÷ÓÃÓÐÁ½¸ö£ºÒ»ÊǶ¨ÆÚ°ÑÔàÊý¾Ý´ÓÄڴ滺³åÇøË¢³öµ½´ÅÅÌÖУ¬¼õÉÙ²éѯʱµÄ×èÈû£»¶þÊÇPGÔÚ¶¨ÆÚ×÷¼ì²éµãʱÐèÒª°ÑËùÓÐÔàҳд³öµ½´ÅÅÌ£¬Í¨¹ýBgWriterÔ¤ÏÈд³öһЩÔàÒ³£¬¿ÉÒÔ¼õÉÙÉèÖüì²éµã£¨CheckPoint£¬Êý¾Ý¿â»Ö¸´¼¼ÊõµÄÒ»ÖÖ£©Ê±Òª½øÐеÄIO²Ù×÷£¬Ê¹ÏµÍ³µÄIO¸ºÔØÇ÷ÏòƽÎÈ¡£BgWriterÊÇPostgreSQL8.0ÒÔºóмӵÄÌØÐÔ£¬ËüµÄ»úÖÆ¿ÉÒÔͨ¹ýpostgresql.confÎļþÖÐÒÔ"bgwriter_"¿ªÍ·ÅäÖòÎÊýÀ´¿ØÖÆ£º
bgwriter_delay:
backgroud writer½ø³ÌÁ¬ÐøÁ½´ÎflushÊý¾ÝÖ®¼äµÄʱ¼äµÄ¼ä¸ô¡£Ä¬ÈÏÖµÊÇ200£¬µ¥Î»ÊǺÁÃë¡£
bgwriter_lru_maxpages£º
backgroud writer½ø³Ìÿ´ÎдµÄ×î¶àÊý¾ÝÁ¿£¬Ä¬ÈÏÖµÊÇ100£¬µ¥Î»buffers¡£Èç¹ûÔàÊý¾ÝÁ¿Ð¡ÓÚ¸ÃÊýֵʱ£¬Ð´²Ù×÷È«²¿ÓÉbackgroud
writer½ø³ÌÍê³É£»·´Ö®£¬´óÓÚ¸Ãֵʱ£¬´óÓڵIJ¿·Ö½«ÓÐserver process½ø³ÌÍê³É¡£ÉèÖøÃֵΪ0ʱ±íʾ½ûÓÃbackgroud
writerд½ø³Ì£¬ÍêÈ«ÓÐserver processÀ´Íê³É£»ÅäÖÃΪ-1ʱ±íʾËùÓÐÔàÊý¾Ý¶¼ÓÉbackgroud
writerÀ´Íê³É¡£(ÕâÀï²»°üÀ¨checkpoint²Ù×÷)
bgwriter_lru_multiplier£º
Õâ¸ö²ÎÊý±íʾÿ´ÎÍù´ÅÅÌдÊý¾Ý¿éµÄÊýÁ¿£¬µ±È»¸ÃÖµ±ØÐëСÓÚbgwriter_lru_maxpages¡£ÉèÖÃ̫СʱÐèҪдÈëµÄÔàÊý¾ÝÁ¿´óÓÚÿ´ÎдÈëµÄÊý¾ÝÁ¿£¬ÕâÑùÊ£ÓàÐèҪдÈë´ÅÅ̵Ť×÷ÐèÒªserver
process½ø³ÌÀ´Íê³É£¬½«»á½µµÍÐÔÄÜ£»ÖµÅäÖÃÌ«´ó˵Ã÷дÈëµÄÔàÊý¾ÝÁ¿¶àÓÚµ±Ê±ËùÐèbufferµÄÊýÁ¿£¬·½±ãÁ˺óÃæÔÙ´ÎÉêÇëbuffer¹¤×÷£¬Í¬Ê±¿ÉÄܳöÏÖIOµÄÀË·Ñ¡£¸Ã²ÎÊýµÄĬÈÏÖµÊÇ2.0¡£
bgwriterµÄ×î´óÊý¾ÝÁ¿¼ÆË㷽ʽ£º
1000/bgwriter_delay * bgwriter_lru_maxpages*8K=×î´óÊý¾ÝÁ¿
bgwriter_flush_after£º
Êý¾ÝÒ³´óС´ïµ½bgwriter_flush_afterʱ´¥·¢BgWriter£¬Ä¬ÈÏÊÇ512KB¡£
(3) WAL writer process£¨Ô¤Ð´Ê½ÈÕ־д£© WAL writer process°Ñ¹²ÏíÄÚ´æÉϵÄWAL»º´æÔÚÊʵ±µÄʱ¼äµãÍù´ÅÅÌд£¬Í¨¹ýÕâÑù£¬¿ÉÒÔ¼õÇáºó¶Ë½ø³ÌÔÚд×Ô¼ºµÄWAL»º´æÊ±µÄѹÁ¦£¬Ìá¸ßÐÔÄÜ¡£ÁíÍ⣬·Çͬ²½Ìá½»ÉèΪtrueµÄʱºò£¬¿ÉÒÔ±£Ö¤ÔÚÒ»¶¨µÄʱ¼ä¼ä¸ôÄÚ£¬°ÑWAL»º´æÉϵÄÄÚÈÝдÈëWALÈÕÖ¾Îļþ¡£
ԤдʽÈÕÖ¾WAL£¨Write Ahead Log£¬Ò²³ÆÎªXlog£©µÄÖÐÐÄ˼ÏëÊǶÔÊý¾ÝÎļþµÄÐ޸ıØÐëÊÇÖ»ÄÜ·¢ÉúÔÚÕâЩÐÞ¸ÄÒѾ¼Ç¼µ½ÈÕÖ¾Ö®ºó£¬Ò²¾ÍÊÇÏÈдÈÕÖ¾ºóдÊý¾Ý£¨ÈÕÖ¾ÏÈÐУ©¡£Ê¹ÓÃÕâÖÖ»úÖÆ¿ÉÒÔ±ÜÃâÊý¾ÝƵ·±µÄдÈë´ÅÅÌ£¬¿ÉÒÔ¼õÉÙ´ÅÅÌI/O¡£Êý¾Ý¿âÔÚå´»úÖØÆôºó¿ÉÒÔÔËÓÃÕâЩWALÈÕÖ¾À´»Ö¸´Êý¾Ý¿â¡£postgresql.confÎļþÖÐÓëWalWriter½ø³ÌÏà¹ØµÄ²ÎÊýÈçÏ£º
wal_level£º¿ØÖÆwal´æ´¢µÄ¼¶±ð¡£wal_level¾ö¶¨ÓжàÉÙÐÅÏ¢±»Ð´Èëµ½WALÖС£ ĬÈÏÖµÊÇ×îСµÄ£¨minimal£©£¬ÆäÖÐֻдÈë´Ó±ÀÀ£»òÁ¢¼´¹Ø»úÖлָ´µÄËùÐèÐÅÏ¢¡£replica
Ôö¼Ó wal ¹éµµÐÅÏ¢ ͬʱ°üÀ¨ Ö»¶Á·þÎñÆ÷ÐèÒªµÄÐÅÏ¢¡££¨9.6 ÖÐÐÂÔö£¬½«Ö®Ç°°æ±¾µÄ archive
ºÍ hot_standby ºÏ²¢£©
logical Ö÷ÒªÓÃÓÚlogical decoding ³¡¾°
fsync£º¸Ã²ÎÊýÖ±½Ó¿ØÖÆÈÕÖ¾ÊÇ·ñÏÈдÈë´ÅÅÌ¡£Ä¬ÈÏÖµÊÇON£¨ÏÈдÈ룩£¬±íʾ¸üÐÂÊý¾ÝдÈë´ÅÅÌʱϵͳ±ØÐëµÈ´ýWALµÄдÈëÍê³É¡£¿ÉÒÔÅäÖøòÎÊýΪOFF£¬±íʾ¸üÐÂÊý¾ÝдÈë´ÅÅÌÍêÈ«²»ÓõȴýWALµÄдÈëÍê³É¡£
synchronous_commit£º²ÎÊýÅäÖÃÊÇ·ñµÈ´ýWALÍê³Éºó²Å·µ»Ø¸øÓû§ÊÂÎñµÄ״̬ÐÅÏ¢¡£Ä¬ÈÏÖµÊÇON£¬±íÃ÷±ØÐëµÈ´ýWALÍê³Éºó²Å·µ»ØÊÂÎñ״̬ÐÅÏ¢£»ÅäÖóÉOFFÄܹ»¸ü¿ìµØ·´À¡»ØÊÂÎñ״̬¡£
wal_sync_method£ºWALдÈë´ÅÅ̵ĿØÖÆ·½Ê½£¬Ä¬ÈÏÖµÊÇfsync£¬¿ÉÑ¡ÓÃÖµ°üÀ¨open_datasync¡¢fdatasync¡¢fsync_writethrough¡¢fsync¡¢open_sync¡£open_datasyncºÍopen_sync·Ö±ð±íʾÔÚ´ò¿ªWALÎļþʱʹÓÃO_DSYNCºÍO_SYNC±êÖ¾£»fdatasyncºÍfsync·Ö±ð±íʾÔÚÿ´ÎÌύʱµ÷ÓÃfdatasyncºÍfsyncº¯Êý½øÐÐÊý¾ÝдÈ룬Á½¸öº¯Êý¶¼ÊǰѲÙ×÷ϵͳµÄ´ÅÅÌ»º´æÐ´»Ø´ÅÅÌ£¬µ«Ç°ÕßֻдÈëÎļþµÄÊý¾Ý²¿·Ö£¬¶øºóÕß»¹»áͬ²½¸üÐÂÎļþµÄÊôÐÔ£»fsync_writethrough±íʾÔÚÿ´ÎÌá½»²¢Ð´»Ø´ÅÅ̻ᱣ֤²Ù×÷ϵͳ´ÅÅÌ»º´æºÍÄÚ´æÖеÄÄÚÈÝÒ»Ö¡£
full_page_writes£º±íÃ÷ÊÇ·ñ½«Õû¸öpageдÈëWAL¡£
wal_buffers£ºÓÃÓÚ´æ·ÅWALÊý¾ÝµÄÄÚ´æ¿Õ¼ä´óС£¬ÏµÍ³Ä¬ÈÏÖµÊÇ64K£¬¸Ã²ÎÊý»¹ÊÜwal_writer_delay¡¢commit_delayÁ½¸ö²ÎÊýµÄÓ°Ïì¡£
wal_writer_delay£ºWalWriter½ø³ÌµÄд¼ä¸ôʱ¼ä£¬Ä¬ÈÏÖµÊÇ200ºÁÃ룬Èç¹ûʱ¼ä¹ý³¤¿ÉÄÜÔì³ÉWAL»º³åÇøµÄÄÚ´æ²»×㣻ʱ¼ä¹ý¶Ì½«»áÒýÆðWALµÄ²»¶ÏдÈ룬Ôö¼Ó´ÅÅÌI/O¸ºµ£¡£
wal_writer_flush_after£º
commit_delay£º±íʾһ¸öÒѾÌá½»µÄÊý¾ÝÔÚWAL»º³åÇøÖдæ·ÅµÄʱ¼ä£¬Ä¬ÈÏÖµÊÇ0ºÁÃ룬±íʾ²»ÓÃÑÓ³Ù£»ÉèÖÃΪ·Ç0ֵʱÊÂÎñÖ´ÐÐcommitºó²»»áÁ¢¼´Ð´ÈëWALÖУ¬¶øÈÔ´æ·ÅÔÚWAL»º³åÇøÖУ¬µÈ´ýWalWriter½ø³ÌÖÜÆÚÐÔµØÐ´Èë´ÅÅÌ¡£
commit_siblings£º±íʾµ±Ò»¸öÊÂÎñ·¢³öÌá½»ÇëÇóʱ£¬Èç¹ûÊý¾Ý¿âÖÐÕýÔÚÖ´ÐеÄÊÂÎñÊýÁ¿´óÓÚcommit_siblingsÖµ£¬Ôò¸ÃÊÂÎñ½«µÈ´ýÒ»¶Îʱ¼ä£¨commit_delayµÄÖµ£©£»·ñÔò¸ÃÊÂÎñÔòÖ±½ÓдÈëWAL¡£ÏµÍ³Ä¬ÈÏÖµÊÇ5£¬¸Ã²ÎÊý»¹¾ö¶¨ÁËcommit_delayµÄÓÐЧÐÔ¡£
wal_writer_flush_after£ºµ±ÔàÊý¾Ý³¬¹ýãÐֵʱ£¬»á±»Ë¢³öµ½´ÅÅÌ¡£
(4) Archive process Archive process°ÑWALÈÕÖ¾×ªÒÆµ½¹éµµÈÕÖ¾Àï¡£Èç¹û±£´æÁË»ù´¡±¸·ÝÒÔ¼°¹éµµÈÕÖ¾£¬¼´Ê¹ÊµÔÚ´ÅÅÌÍêÈ«Ë𻵵Äʱºò£¬Ò²¿ÉÒԻظ´Êý¾Ý¿âµ½×îеÄ״̬¡£
ÀàËÆÓÚOracleÊý¾Ý¿âµÄARCH¹éµµ½ø³Ì£¬²»Í¬µÄÊÇARCHÊǰÉredo log½øÐй鵵£¬PgArchÊǰÑWALÈÕÖ¾½øÐй鵵¡£ÔÙÉîÈëµã£¬WALÈÕÖ¾»á±»Ñ»·Ê¹Óã¬Ò²¾ÍÊÇ˵£¬¹ýÈ¥µÄWALÈÕÖ¾»á±»Ð²úÉúµÄÈÕÖ¾¸²¸Ç£¬PgArch½ø³Ì¾ÍÊÇΪÁËÔÚ¸²¸Çǰ°ÑWALÈÕÖ¾±¸·Ý³öÀ´¡£¹éµµÈÕÖ¾µÄ×÷ÓÃÊÇΪÁËÊý¾Ý¿âÄܹ»Ê¹ÓÃÈ«Á¿±¸·ÝºÍ±¸·Ýºó²úÉúµÄ¹éµµÈÕÖ¾£¬´Ó¶øÈÃÊý¾Ý¿â»Øµ½¹ýÈ¥µÄÈÎһʱ¼äµã¡£PG´Ó8.X°æ±¾¿ªÊ¼ÌṩµÄPITR£¨Point-In-Time-Recovery£©¼¼Êõ£¬¾ÍÊÇÔËÓõĹ鵵ÈÕÖ¾¡£
PgArch½ø³Ìͨ¹ýpostgresql.confÎļþÖеÄÈçϲÎÊý½øÐÐ
archive_mode£º
±íʾÊÇ·ñ½øÐй鵵²Ù×÷£¬¿ÉÑ¡ÔñΪoff£¨¹Ø±Õ£©¡¢on£¨Æô¶¯£©ºÍalways£¨×ÜÊÇ¿ªÆô£©£¬Ä¬ÈÏֵΪoff£¨¹Ø±Õ£©¡£
archive_command£º
ÓɹÜÀíÔ±ÉèÖõÄÓÃÓڹ鵵WALÈÕÖ¾µÄÃüÁî¡£ÔÚÓÃÓڹ鵵µÄÃüÁîÖУ¬Ô¤¶¨Òå±äÁ¿¡°%p¡±ÓÃÀ´Ö¸´úÐèÒª¹éµµµÄWALȫ·¾¶ÎļþÃû£¬¡°%f¡±±íʾ²»´øÂ·¾¶µÄÎļþÃû£¨ÕâÀïµÄ·¾¶¶¼ÊÇÏà¶ÔÓÚµ±Ç°¹¤×÷Ŀ¼µÄ·¾¶£©¡£Ã¿¸öWAL¶ÎÎļþ¹éµµÊ±½«µ÷ÓÃarchive_commandËùÖ¸¶¨µÄÃüÁî¡£µ±¹éµµÃüÁî·µ»Ø0ʱ£¬PostgreSQL¾Í»áÈÏΪÎļþ±»³É¹¦¹éµµ£¬È»ºó¾Í»áɾ³ý»òÑ»·Ê¹ÓøÃWAL¶ÎÎļþ¡£·ñÔò£¬Èç¹û·µ»ØÒ»¸ö·ÇÁãÖµ£¬PostgreSQL»áÈÏΪÎļþûÓб»³É¹¦¹éµµ£¬±ã»áÖÜÆÚÐÔµØÖØÊÔÖ±µ½³É¹¦¡£
archive_timeout£º
±íʾ¹éµµÖÜÆÚ£¬ÔÚ³¬¹ý¸Ã²ÎÊýÉ趨µÄʱ¼äÊ±Ç¿ÖÆÇл»WAL¶Î£¬Ä¬ÈÏֵΪ0£¨±íʾ½ûÓøù¦ÄÜ£©¡£
(5) stats collector process ͳ¼ÆÐÅÏ¢µÄÊÕ¼¯½ø³Ì¡£ÊÕ¼¯ºÃͳ¼Æ±íµÄ·ÃÎÊ´ÎÊý£¬´ÅÅ̵ķÃÎÊ´ÎÊýµÈÐÅÏ¢¡£ÊÕ¼¯µ½µÄÐÅÏ¢³ýÁËÄܱ»autovaccumÀûÓ㬻¹¿ÉÒÔ¸øÆäËûÊý¾Ý¿â¹ÜÀíÔ±×÷ΪÊý¾Ý¿â¹ÜÀíµÄ²Î¿¼ÐÅÏ¢¡£
PgStat½ø³ÌÊÇPostgreSQLÊý¾Ý¿âµÄͳ¼ÆÐÅÏ¢ÊÕ¼¯Æ÷£¬ÓÃÀ´ÊÕ¼¯Êý¾Ý¿âÔËÐÐÆÚ¼äµÄͳ¼ÆÐÅÏ¢£¬Èç±íµÄÔöɾ¸Ä´ÎÊý£¬Êý¾Ý¿éµÄ¸öÊý£¬Ë÷ÒýµÄ±ä»¯µÈµÈ¡£ÊÕ¼¯Í³¼ÆÐÅÏ¢Ö÷ÒªÊÇΪÁËÈÃÓÅ»¯Æ÷×ö³öÕýÈ·µÄÅжϣ¬Ñ¡Ôñ×î¼ÑµÄÖ´Ðмƻ®¡£postgresql.confÎļþÖÐÓëPgStat½ø³ÌÏà¹ØµÄ²ÎÊý£¬ÈçÏ£º
track_activities£º±íʾÊÇ·ñ¶Ô»á»°Öе±Ç°Ö´ÐеÄÃüÁÆôͳ¼ÆÐÅÏ¢ÊÕ¼¯¹¦ÄÜ£¬¸Ã²ÎÊýÖ»¶Ô³¬¼¶Óû§ºÍ»á»°ËùÓÐÕ߿ɼû£¬Ä¬ÈÏֵΪon£¨¿ªÆô£©¡£
track_counts£º±íʾÊÇ·ñ¶ÔÊý¾Ý¿â»î¶¯¿ªÆôͳ¼ÆÐÅÏ¢ÊÕ¼¯¹¦ÄÜ£¬ÓÉÓÚÔÚAutoVacuum×Ô¶¯ÇåÀí½ø³ÌÖÐÑ¡ÔñÇåÀíµÄÊý¾Ý¿âʱ£¬ÐèÒªÊý¾Ý¿âµÄͳ¼ÆÐÅÏ¢£¬Òò´Ë¸Ã²ÎÊýĬÈÏֵΪon¡£
track_io_timing£º¶¨Ê±µ÷ÓÃÊý¾Ý¿éI/O£¬Ä¬ÈÏÊÇoff£¬ÒòΪÉèÖÃΪ¿ªÆô״̬»á·´¸´µÄµ÷ÓÃÊý¾Ý¿âʱ¼ä£¬Õâ¸øÊý¾Ý¿âÔö¼ÓÁ˺ܶ࿪Ïú¡£Ö»Óг¬¼¶Óû§¿ÉÒÔÉèÖÃ
track_functions£º±íʾÊÇ·ñ¿ªÆôº¯ÊýµÄµ÷ÓôÎÊýºÍµ÷ÓúÄʱͳ¼Æ¡£
track_activity_query_size£ºÉèÖÃÓÃÓÚ¸ú×Ùÿһ¸ö»î¶¯»á»°µÄµ±Ç°Ö´ÐÐÃüÁîµÄ×Ö½ÚÊý£¬Ä¬ÈÏֵΪ1024£¬Ö»ÄÜÔÚÊý¾Ý¿âÆô¶¯ºóÉèÖá£
stats_temp_directory£ºÍ³¼ÆÐÅÏ¢µÄÁÙʱ´æ´¢Â·¾¶¡£Â·¾¶¿ÉÒÔÊÇÏà¶Ô·¾¶»òÕß¾ø¶Ô·¾¶£¬²ÎÊýĬÈÏΪpg_stat_tmp£¬ÉèÖô˲ÎÊý¿ÉÒÔ¼õÉÙÊý¾Ý¿âµÄÎïÀíI/O£¬Ìá¸ßÐÔÄÜ¡£´Ë²ÎÊýÖ»ÄÜÔÚpostgresql.confÎļþ»òÕß·þÎñÆ÷ÃüÁîÐÐÖÐÐ޸ġ£
(6) Logger process °ÑpostgresqlµÄ»î¶¯×´Ì¬Ð´µ½ÈÕÖ¾ÐÅÏ¢Îļþ£¨²¢·ÇÊÂÎñÈÕÖ¾£©£¬ÔÚÖ¸¶¨µÄʱ¼ä¼ä¸ôÀïÃæ£¬¶ÔÈÕÖ¾Îļþ½øÐÐrotate.
(7) Autovacuum£¨×Ô¶¯ÇåÀí£©Æô¶¯½ø³Ì autovacuum launcher processÊÇÒÀÀµÓÚpostmaster¼ä½ÓÆô¶¯vacuum½ø³Ì¡£¶øÆä×ÔÉíÊDz»Ö±½ÓÆô¶¯×Ô¶¯vacuum½ø³ÌµÄ¡£Í¨¹ýÕâÑù¿ÉÒÔÌá¸ßϵͳµÄ¿É¿¿ÐÔ¡£
ÔÚPGÊý¾Ý¿âÖУ¬¶ÔÊý¾Ý½øÐÐUPDATE»òÕßDELETE²Ù×÷ºó£¬Êý¾Ý¿â²»»áÁ¢¼´É¾³ý¾É°æ±¾µÄÊý¾Ý£¬¶øÊDZê¼ÇΪɾ³ý״̬¡£ÕâÊÇÒòΪPGÊý¾Ý¿â¾ßÓÐ¶à°æ±¾µÄ»úÖÆ£¬Èç¹ûÕâЩ¾É°æ±¾µÄÊý¾ÝÕýÔÚ±»ÁíÍâµÄÊÂÎñ´ò¿ª£¬ÄÇôÔÝʱ±£ÁôËûÃÇÊǺÜÓбØÒªµÄ¡£µ±ÊÂÎñÌá½»ºó£¬¾É°æ±¾µÄÊý¾ÝÒѾûÓмÛÖµÁË£¬Êý¾Ý¿âÐèÒªÇåÀíÀ¬»øÊý¾ÝÌÚ³ö¿Õ¼ä£¬¶øÇåÀí¹¤×÷¾ÍÊÇAutoVacuum½ø³Ì½øÐеġ£postgresql.confÎļþÖÐÓëAutoVacuum½ø³ÌÏà¹ØµÄ²ÎÊýÓУº
autovacuum£ºÊÇ·ñÆô¶¯ÏµÍ³×Ô¶¯ÇåÀí¹¦ÄÜ£¬Ä¬ÈÏֵΪon¡£
log_autovacuum_min_duration£ºÕâ¸ö²ÎÊýÓÃÀ´¼Ç¼ autovacuum µÄÖ´ÐÐʱ¼ä£¬µ±
autovaccum µÄÖ´ÐÐʱ¼ä³¬¹ý log_autovacuum_min_duration²ÎÊýÉèÖÃʱ£¬ÔòautovacuumÐÅÏ¢¼Ç¼µ½ÈÕÖ¾ÀĬÈÏΪ
"-1", ±íʾ²»¼Ç¼¡£
autovacuum_max_workers£ºÉèÖÃϵͳ×Ô¶¯ÇåÀí¹¤×÷½ø³ÌµÄ×î´óÊýÁ¿¡£
autovacuum_naptime£ºÉèÖÃÁ½´Îϵͳ×Ô¶¯ÇåÀí²Ù×÷Ö®¼äµÄ¼ä¸ôʱ¼ä¡£
autovacuum_vacuum_thresholdºÍautovacuum_analyze_threshold£ºÉèÖõ±±íÉϱ»¸üеÄÔª×éÊýµÄãÐÖµ³¬¹ýÕâЩãÐֵʱ·Ö±ðÐèÒªÖ´ÐÐvacuumºÍanalyze¡£
autovacuum_vacuum_scale_factorºÍautovacuum_analyze_scale_factor£ºÉèÖñí´óСµÄËõ·ÅϵÊý¡£
autovacuum_freeze_max_age£ºÉèÖÃÐèÒªÇ¿ÖÆ¶ÔÊý¾Ý¿â½øÐÐÇåÀíµÄXIDÉÏÏÞÖµ¡£
autovacuum_vacuum_cost_delay£ºµ±autovacuum½ø³Ì¼´½«Ö´ÐÐʱ£¬¶Ô
vacuum Ö´ÐÐ cost ½øÐÐÆÀ¹À£¬Èç¹û³¬¹ý autovacuum_vacuum_cost_limitÉèÖÃֵʱ£¬ÔòÑÓ³Ù£¬Õâ¸öÑÓ³ÙµÄʱ¼ä¼´Îª
autovacuum_vacuum_cost_delay¡£Èç¹ûֵΪ -1, ±íʾʹÓà vacuum_cost_delay
Öµ£¬Ä¬ÈÏֵΪ 20 ms¡£
autovacuum_vacuum_cost_limit£ºÕâ¸öֵΪautovacuum ½ø³ÌµÄÆÀ¹À·§Öµ,
ĬÈÏΪ -1, ±íʾʹÓà "vacuum_cost_limit " Öµ£¬Èç¹ûÔÚÖ´ÐÐautovacuum
½ø³ÌÆÚ¼äÆÀ¹ÀµÄcost ³¬¹ýautovacuum_vacuum_cost_limit, Ôò autovacuum
½ø³ÌÔò»áÐÝÃß¡£
(8) ×Ô¶¯vacuum½ø³Ì autovacuum worker process½ø³Ìʵ¼ÊÖ´ÐÐvacuumµÄÈÎÎñ¡£ÓÐʱºò»áͬʱÆô¶¯¶à¸övacuum½ø³Ì¡£
(9) wal sender / wal receiver wal sender ½ø³ÌºÍwal receiver½ø³ÌÊÇʵÏÖpostgresql¸´ÖÆ(streaming
replication)µÄ½ø³Ì¡£Wal sender½ø³Ìͨ¹ýÍøÂç´«ËÍWALÈÕÖ¾£¬¶øÆäËûPostgreSQLʵÀýµÄwal
receiver½ø³ÌÔò½ÓÊÕÏàÓ¦µÄÈÕÖ¾¡£Wal receiver½ø³ÌµÄËÞÖ÷PostgreSQL£¨Ò²³ÆÎªStandby£©½ÓÊܵ½WALÈÕÖ¾ºó£¬ÔÚ×ÔÉíµÄÊý¾Ý¿âÉÏ»¹Ô£¬Éú³ÉÒ»¸öºÍ·¢ËͶ˵ÄPostgreSQL(Ò²³ÆÎªMaster)ÍêȫһÑùµÄÊý¾Ý¿â¡£
(10) CheckPoint£¨¼ì²éµã£©½ø³Ì ¼ì²éµãÊÇϵͳÉèÖõÄÊÂÎñÐòÁе㣬ÉèÖüì²éµã±£Ö¤¼ì²éµãǰµÄÈÕÖ¾ÐÅϢˢµ½´ÅÅÌÖС£postgresql.confÎļþÖÐÓëÖ®Ïà¹ØµÄ²ÎÊýÓУº
1.4 ºó¶ËµÄ´¦ÀíÁ÷³Ì
ÏÂÃæ¿´¿´Êý¾Ý¿âÒýÇæpostgres×Ó½ø³ÌµÄ´¦Àí¸ÅÒª¡£ÎªÁ˼òµ¥Æð¼ûÏÂÃæµÄ˵Ã÷ÖУ¬°Ñbackendprocess¼ò³ÆÎªbackend¡£BackendµÄmainº¯ÊýÊÇPostgresMain
(tcop/postgres.c)¡£
½ÓÊÕǰ¶Ë·¢Ë͹ýÀ´µÄ²éѯ(SQLÎÄ) SQLÎÄÊǵ¥´¿µÄÎÄ×Ö£¬µçÄÔÊÇÈÏʶ²»Á˵ģ¬ËùÒÔҪת»»³É±È½ÏÈÝÒ×´¦ÀíµÄÄÚ²¿ÐÎʽ¹¹ÎÄÊ÷parser tree,Õâ¸ö´¦ÀíµÄ³ÆÎª¹¹ÎĽâÎö¡£¹¹ÎĽâÎöµÄÄ£¿é³ÆÎªparser.Õâ¸ö½×¶ÎÖ»Äܹ»Ê¹ÓÃÎÄ×Ö×ÖÃæÉϵÃÀ´µÄÐÅÏ¢£¬ËùÒÔֻҪûÓï·¨´íÎóÖ®ÀàµÄ´íÎ󣬼´Ê¹ÊÇselect²»´æÔڵıíÒ²²»»á±¨´í¡£Õâ¸ö½×¶ÎµÄ¹¹ÎÄÊ÷±»³ÆÎªraw
parse tree. ¹¹ÎÄ´¦ÀíµÄÈë¿ÚÔÚraw_parser (parser/parser.c)¡£ ¹¹ÎÄÊ÷½âÎöÍêÒԺ󣬻áת»»Îª²éѯÊ÷(Query tree)¡£Õâ¸öʱºò£¬»á·ÃÎÊÊý¾Ý¿â£¬¼ì²é±íÊÇ·ñ´æÔÚ£¬Èç¹û´æÔڵϰ£¬Ôò°Ñ±íÃûת»»ÎªOID¡£Õâ¸ö´¦Àí³ÆÎª·ÖÎö´¦Àí(Analyze),
½øÐзÖÎö´¦ÀíµÄÄ£¿éÊÇanalyzer¡£ ÁíÍ⣬PostgreSQLµÄ´úÂëÀïÃæÌáµ½¹¹ÎÄÊ÷parser
treeµÄʱºò£¬¸ü¶àµÄʱºòÊÇÖ¸²éѯÊ÷Query tree¡£·ÖÎö´¦ÀíµÄÄ£¿éµÄÈë¿ÚÔÚparse_analyze
(parser/analyze.c) PostgreSQL»¹Í¨¹ý²éѯÓï¾äµÄÖØÐ´ÊµÏÖÊÓͼ(view)ºÍ¹æÔò(rule), ËùÒÔÐèÒªµÄʱºò£¬ÔÚÕâ¸ö½×¶Î»á¶Ô²éѯÓï¾ä½øÐÐÖØÐ´¡£Õâ¸ö´¦Àí³ÆÎªÖØÐ´(rewrite)£¬ÖØÐ´µÄÈë¿ÚÔÚQueryRewrite
(rewrite/rewriteHandler.c)¡£ ͨ¹ý½âÎö²éѯÊ÷£¬¿ÉÒÔʵ¼ÊÉú³É¼Æ»®Ê÷¡£Éú³É²éѯÊ÷µÄ´¦Àí³ÆÎª¡®Ö´Ðмƻ®´¦Àí¡¯£¬×î¹Ø¼üÊÇÒªÉú³É¹À¼ÆÄÜÔÚ×î¶ÌµÄʱ¼äÄÚÍê³ÉµÄ¼Æ»®Ê÷(plan
tree)¡£Õâ¸ö²½Öè³ÆÎª¡¯²éѯÓÅ»¯¡¯(²»½Ðquery optimize, ¶øÊÇoptimize),
¶øÍê³ÉÕâ¸ö´¦ÀíµÄÄ£¿é³ÆÎª²éѯÓÅ»¯Æ÷(²»½Ðquery optimizer,¶øÊÇoptimizer, »òÕß³ÆÎªplanner)¡£Ö´Ðмƻ®´¦ÀíµÄÈë¿ÚÔÚstandard_planner
(optimizer/plan/planner.c)¡£ °´ÕÕÖ´Ðмƻ®ÀïÃæµÄ²½Öè¿ÉÒÔÍê³É²éѯҪ´ïµ½µÄÄ¿µÄ¡£ÔËÐÐÖ´Ðмƻ®Ê÷ÀïÃæ²½ÖèµÄ´¦Àí³ÆÎªÖ´Ðд¦Àí¡®execute¡¯,
Íê³ÉÕâ¸ö´¦ÀíµÄÄ£¿é³ÆÎªÖ´ÐÐÆ÷¡®Executor¡¯, Ö´ÐÐÆ÷µÄÈë¿ÚµØÖ·Îª£¬ExecutorRun (executor/execMain.c) Ö´Ðнá¹û·µ»Ø¸øÇ°¶Ë¡£ ·µ»Øµ½²½ÖèÒ»ÖØ¸´Ö´ÐС£
|