Ãâó : http://database.sarang.net/ ------------------------------------------------------- PostgreSQL ÀÇ ÃÖÀûÈ­ ¿øº» : http://www.phpbuilder.com/columns/smith20010821.php3 ÀúÀÚ : Ericson Smith ¹ø¿ª : Á¤ÀçÀÍ Tim Perdue ÀÇ MySQL °ú PostgreSQL À» ºñ±³ÇÑ ¾ÆÁÖ ÁÁÀº ±Û(http://www.phpbuilder.c om/columns/tim20000705.php3)À» ÀÐ°í ³ª´Â ÀÌ µ¥ÀÌÅͺ£À̽º¸¦ ¼³Ä¡Çؼ­ »ç¿ëÇϱâ·Î °áÁ¤Çß´Ù.³ª´Â ´ëºÎºÐÀÇ ÀÛ¾÷À» »ç¿ëÇϱâ ÆíÇÏ°í, ºñ±³ÇÒ ¼ö ¾ø´Â select query ÀÇ ¼Ó µµ ¶§¹®¿¡ MySQL À» »ç¿ëÇß¾úÀ¸¸ç, Áö±Ýµµ ±×¸®ÇÏ°í ÀÖ´Ù. ±×·¯³ª »õ·Î¿î ÇÁ·ÎÁ§Æ®¿¡¼­´Â ¸¹Àº update ¸¦ ½ÇÇàÇØ¾ß Çϴµ¥ MySQL ÀÇ table locki ng feature ¶§¹®¿¡ ¸¹Àº °íÅëÀ» ¹Þ¾Ñ´Ù. ¿ì¸®°¡ ¼³Á¤ÇÑ PostgreSQL ¼­¹ö ȯ°æÀº ´ÙÀ½°ú °°´Ù : . Redhat 7.1 . Dual PIII 650 MHz System . 512 MB RAM . 18 Gb SCSI for the postgresql data partition [ ´Ù¿î·Îµå¿Í ¼³Ä¡Çϱâ ] 7.1.2 RPM À» http://postgresql.org ·Î ºÎÅÍ ´Ù¿î·Îµå ¹Þ¾Ò´Ù. ¼­¹ö ¼³Ä¡¸¦ À§Çؼ­ ´Ü¼øÈ÷ postgresql-server ±×¸®°í postgresql-7.1.2 (base) ¸¸À» ¼³Ä¡Çß´Ù. ´ÙÀ½°ú °°ÀÌ ¼­¹ö¸¦ ±âµ¿Çß´Ù : /etc/init.d/postgresql start ÀûÀº Å©±âÀÇ µ¥ÀÌÅͺ£À̽º Çϳª¸¦ MySQL ·Î ºÎÅÍ À̵¿½ÃÄÑ ¿Ô´Ù (5000 °³ Á¤µµÀÇ ·¹ÄÚ µå¸¦ Æ÷ÇÔÇÑ ¼¼°³ÀÇ Å×À̺í). PostgreSQL ÃÖÀûÈ­±â°¡ »ç¿ëÇÒ ÃæºÐÇÑ À妽º¸¦ »ý¼ºÇß ´Ù. ±×¸®°í ÀÌ Å×À̺í·Î ÁúÀǸ¦ º¸³»´Â C·Î ÀÛ¼ºµÈ ÀÛÀº CGI ÇÁ·Î±×·¥À» postgreSQL C client ÀÎÅÍÆäÀ̽º¸¦ ÀÌ¿ëÇÏ¿© ¼öÁ¤Çß´Ù. ÀÌ ÀÛÀº CGI ÇÁ·Î±×·¥Àº ºÐ´ç ¼öõ°³ÀÇ Áú ÀǸ¦ ¹Þµµ·Ï µÇ¾î ÀÖ´Ù. [ ÃÖÀûÈ­ ] CGI ÇÁ·Î±×·¥¿¡¼­ Æ©´×À» ÇÑÈÄ¿¡ °¡Àå óÀ½À¸·Î ¾Ë°Ô µÈ °Í Áß Çϳª´Â, ´ëºÎºÐÀÇ ÁúÀÇ µéÀº ¿¹ÀüÀÇ MySQL ±â¹ÝÀÇ ½Ã½ºÅÛ Ã³·³ ºü¸£°Ô ±× °á°ú°¡ µ¹¾Æ¿À´Âµ¥, ¼­¹öÀÇ ·ÎµùÀÌ ÈξÀ ³ô´Ù´Â °ÍÀ̾ú´Ù -- °ÅÀÇ 90%¿¡ À°¹ÚÇÏ°í ÀÖ¾ú´Ù. ±×·¡¼­ ³ª´Â ÀÌ°ÍÀ» ³·Ãß±â À§ ÇØ ÀÛ¾÷À» ½ÃÀÛÇß´Ù. ³ª´Â ÀÌÀü¿¡ MySQL ¿¡¼­´Â ¹®Á¦°¡ µÉ¸¸ÇÑ ¸Þ¸ð¸® »çÀÌÁî º¸´Ùµµ ´õ Å©°Ô cache ¿Í buffer size ¸¦ ´Ã¿© ÁÜÀ¸·Î¼­ ÃÖÀûÈ­¸¦ ½ÃÄ×´Ù. PostgreSQL À» ½ÇÇàÇϱâ Àü¿¡ °¡Àå Áß¿äÇÑ °ÍÀº ÃæºÐÇÑ shared buffer space ¸¦ ´Ã¿© ÁÖ´Â °ÍÀÌ´Ù. ´Ù½Ã ¹Ýº¹Çغ¸ÀÚ: ÃæºÐÇÑ buffer space ¸¦ Á¦°øÇØ Áà¶ó. ÀÌ µ¥ÀÌÅͺ£ÀÌ ½º ¼­¹ö¿¡´Â 512 Mb ÀÇ ·¥ÀÌ ÀÖ´Ù. ¿©·¯ºÐµéÀº À̵é Áß 75% Á¤µµ¸¦ shared buffer ·Î Àüȯ½ÃÄÑ Áà¾ß ÇÑ´Ù. PostgreSQL Àº ±× Å×À̺íÀÇ ´ëºÎºÐÀ» ÀÌ shared buffer ·Î ¿Ã¸± ¼ö ÀÖÀ»¶§ °¡Àå Àß ¶Ç´Â Á»´õ Àß µ¿ÀÛÇÒ ¼ö ÀÖ´Ù. ¿ì¸®ÀÇ °æ¿ì ¿ì¸®µé µ¥ÀÌÅͺ£À̽º°¡ »ý°¢º¸´Ù´Â À۾ұ⠶§¹®¿¡ 128 Mb ÀÇ ¸Þ¸ð¸®¸¸À» shared buffer space ·Î °áÁ¤Çß´Ù. /var/lib/pgsql/data/postgresql.conf ÆÄÀÏ ³»¿¡ µ¥ÀÌÅͺ£À̽º ¼­¹ö¿¡ ´ëÇÑ ¼³Á¤À» Æ÷ ÇÔÇÏ°í ÀÖ´Ù. PostgreSQL Àº shared memory ¸¦ buffer ·Î »ç¿ëÇÑ´Ù. Linux system ¿¡ ¼­´Â, ¿©·¯ºÐµéÀº ´ÙÀ½ ¸í·É¾î¸¦ ÀÌ¿ëÇؼ­ ½Ã½ºÅÛ¿¡ ¾ó¸¶³ª ¸¹Àº shared memory °¡ ÇÒ ´çµÇ¾î ÀÖ´ÂÁö È®ÀÎÇÒ ¼ö ÀÖ´Ù: cat /proc/sys/kernel/shmmax ±×¸®°í ½Ã½ºÅÛÀÌ »ç¿ëÇÏ´Â °øÀ¯¸Þ¸ð¸®´Â ´ÙÀ½ ¸í·É¾î·Î º¼¼ö ÀÖ´Ù: ipcs °á°ú´Â byte ´ÜÀ§·Î º¸¿© ÁØ´Ù. Redhat 7.1 ¿¡¼­´Â ±âº»ÀûÀ¸·Î 32 MB ÀÇ °øÀ¯¸Þ¸ð¸®¸¸ À» ÇÒ´çÇÏ°í ÀÖ´Ù. ÀÌ°ÍÀº PostgreSQL ¿¡¼­´Â ¾ÆÁÖ ¸ðÀÚ¶ó´Â ¸Þ¸ð¸®ÀÌ´Ù. ³ª´Â ´ÙÀ½°ú °°Àº ¸í·É¾î·Î¼­ ÀÌ ÇѰ踦 Áõ°¡½ÃÄ×´Ù. echo 128000000 > /proc/sys/kernel/shmmax ¸¸¾à ½Ã½ºÅÛÀ» ¸®º×ÇÏ°Ô µÇ¸é ÀÌ ¼³Á¤Àº »ç¶óÁø´Ù´Â °ÍÀ» ¸í½ÉÇϱ⠹ٶõ´Ù. ¿©·¯ºÐµé Àº ÀÌ ¸í·É¾î¸¦ postgresql startup ÆÄÀÏ ³»ºÎ¿¡ Àû¾î ³õ´Â°ÍÀÌ ÁÁ´Ù. /etc/sysctl.co nf ÆÄÀÏÀ» ¼öÁ¤ÇÏ¸é ¿µ±¸ÀûÀ¸·Î ÀÌ º¯È­°¡ ¹Ý¿µµÉ °ÍÀÌ´Ù. ±×¸®°í ³ª¼­ ³ª´Â postgresql.conf ÆÄÀÏ¿¡ shared_buffers ¸¦ 15200 À¸·Î ¼³Á¤Çß´Ù. P ostgreSQL Àº 8K segment ¸¦ »ç¿ëÇϱ⠶§¹®¿¡ 128000/8192 + 512K overhead Çؼ­ °è»ê À» Çß´Ù. ±×¸®°í sort_mem À» 32168 (sort memory area ¸¦ 32M ·Î ¼³Á¤)·Î ¼³Á¤ÇØ ÁÖ ¾ú´Ù. connection pooling ÀÌ È¿À²ÀûÀ¸·Î Çϱâ À§Çؼ­ max_connection À» 64·Î ¼³Á¤Çß ´Ù. ±×¸®°í fsync ´Â false ·Î ¼³Á¤ÇØ ÁÖ¾ú´Ù. shared_buffers = 15200 sort_mem = 32168 max_connections=64 fsync=false ÀÌµé ¼³Á¤À» Á¶ÀýÇϱâ À§Çؼ­ ¸Þ´º¾óÀ» ÀÐ¾î º¸±â ¹Ù¶õ´Ù. ±×·¯³ª ³ª´Â ±×·¸°Ô ÇÒ ÇÊ ¿ä°¡ ¾ø´Ù°í »ý°¢ÇÑ´Ù. ¸¸¾à ¿©·¯ºÐµéÀÌ shared_buffers ¸¦ ÇÒ´çµÈ shared memory ÇÑ °èº¸´Ù ´õ Å©°Ô ¼³Á¤Çß´Ù°í »ý°¢ÇØ º¸ÀÚ. postgresql Àº ±âµ¿½Ã¿¡ ½ÃÀÛÀ» °ÅºÎÇÒ °ÍÀÌ ´Ù. ÀÌ·¯ÇÑ »ç½ÇÀº óÀ½¿¡ ¾Æ¹«·± ·Î±× ÆÄÀÏÀ» ³²±âÁö ¾Ê¾Ò±â ¶§¹®¿¡ ¿ì¸®¸¦ È¥¶õ ½º ·´°Ô ¸¸µé¾ú´Ù. ¿©·¯ºÐµéÀº /etc/init.d ³»ÀÇ startup ÆÄÀÏ¿¡ ·Î±× ÆÄÀÏ·Î Ãâ·ÂÀ» ±â ·ÏÇϵµ·Ï ÇÒ¼ö ÀÖ´Ù. ´ÙÀ½°ú °°ÀÌ ÀûÇô ÀÖ´Â ºÎºÐÀ» ã¾Æ¼­... /postmaster start > /dev/null 2> ´ÙÀ½À¸·Î º¯°æÇϵµ·Ï Ç϶ó. /postmaster start > /var/lib/pgsql.log 2> (¶Ç´Â ¿©·¯ºÐµéÀÌ ·Î±×¸¦ Àû±â ¿øÇÏ´Â Àå¼Ò·Î ±â·ÏÇÏ¸é µÉ°ÍÀÌ´Ù) ÀÌ ·Î±×ÆÄÀÏÀ» ÂÑ¾Æ °¡ º¸¸é ¹®Á¦°¡ ¹«¾ùÀÎÁö ¾Ë¼ö ÀÖÀ»°ÍÀÌ´Ù. ¸ðµç Á¾·ùÀÇ µð¹ö±ë Á¤º¸µéÀÌ ÀÌ ÆÄÀϳ»¿¡ ±â·ÏµÉ °ÍÀÌ´Ù. ÀÌ°ÍÀº SQL ±¸¹®¿¡·¯¿Í EXP LAIN state, emts, connection problem, authentication attempts µîµîÀÇ µð¹ö±ë Á¤º¸ µéÀ» Æ÷ÇÔÇÑ´Ù. ³ª´Â postgresql À» Àç±âµ¿ÇÏ°í ¿ì¸®µéÀÇ CGI ¸¦ ¿Â¶óÀÎ ½ÃÄ×´Ù. ¿ì¸®µéÀÇ ±â¿ì´Â ¾ø ¾îÁö°í, postgresql Àº °ð buffer ¸¦ »ç¿ëÇϱ⠽ÃÀÛÇß´Ù. ±×¸®°í ¼­¹öÀÇ ½Ã½ºÅÛ ·Îµù Àº 10% ÀÌÇÏ·Î ¶³¾î Á³´Ù. ÃÊâ±â ½Ã½ºÅÛÀÇ ¹®Á¦Á¡Àº postgresql connection ¿ä±¸°¡ ÀÖÀ»¶§¸¶´Ù Çѹø¾¿ ÀÌ·± °Í µéÀÌ ²÷±ä´Ù´Â °ÍÀ̾ú´Ù. ±×·¡¼­ ³ª´Â C library ÀÇ connection pooling ¹æ¹ýÀ» »ç¿ë Çϱ⠽ÃÀÛÇß´Ù. ÀÌ ¿É¼ÇÀ¸·Î ¼­¹öÀÇ ·ÎµùÀÌ ¼ø°£ÀûÀ¸·Î Áõ°¡ÇÏ´Â Çö»ó¸¶Àúµµ ÁÙ¾î µé ¾ú´Ù. PHP ¿¡¼­ ¿©·¯ºÐµéÀº ÀÌ È¿°ú¸¦ ¾ò±â À§Çؼ­´Â persistent connection (pg_conn ect ´ë½Å¿¡ pg_pconnect ¸¦ »ç¿ëÇ϶ó) À» ÀÌ¿ëÇÏ¸é µÉ °ÍÀÌ´Ù. [ Indexes ] PostgreSQL ¿¡¼­ ÀûÀýÇÑ À妽ÌÀÇ Çʿ伺Àº ¾Æ¹«¸® °­Á¶Çصµ Áö³ªÄ¡Áö ¾Ê´Ù. ³ªÀÇ ÃÊ Ã¢±âÀÇ ½Ç¼ö´Â BIGINT column ¿¡ ´ëÇؼ­ À妽ÌÀ» ½ÃµµÇÑ °ÍÀ̾ú´Ù. ÀÌ Ä÷³Àº Àε¦½Ì Àº ÀߵǾú´Ù. ±×·¯³ª postgresql Àº ±×µéÀ» ÀÌ¿ëÇÏÁö ¾Ê´Â °ÍÀ̾ú´Ù. ÀÌƲ ÈÄ ³ª´Â ³ª ÀÇ ¸Ó¸®¸¦ Áã¾î ¶â¾î¾ß Çß´Ù. ½Ã½ºÅÛ ¾ÆÅ°ÅØÃÄ°¡ 32 bit ¿´´ø °ÍÀÌ´Ù. ÀÌ°ÍÀÌ postgre SQL Àº 64 bit (BIGINT) ¸¦ À妽º·Î »ç¿ëÇÒ ¼ö ¾ø´Â °ÍÀϱî? ÀÌ ÀÚ·áÇüÀ» INTEGER ·Î º¯°æÇÔÀ¸·Î½á ÀÌ ¹®Á¦¸¦ ÇØ°áÇÒ ¼ö ÀÖ¾ú´Ù.³»°¡ ¸¸¾à 64bit ÀÇ Itanium processor ¸¦ ÀÌ¿ëÇß´Ù¸é ÀÌ·± ¹®Á¦´Â ¾ø¾úÀ» °ÍÀ¸·Î »ý°¢µÈ´Ù. [ °á·Ð ] ÁúÀÇÀÇ ¹ÝÀÀ¼Óµµ¸¦ Áõ°¡½ÃÅ°±â À§ÇÑ SQL ±¸¹®À» º¯°æ½Ãų¼ö ÀÖ´Ù. ±×·¯³ª À̵éÀº post gresql ¹®¼­¿¡ ÀûÀýÇÏ°Ô ¼³¸íÇÏ°í ÀÖ´Ù.