
以åã®èšäºã§ã¯
ãPostgreSQLã®éçºããã»ã¹ãš ããã®RDBMSã§æè¿æ¡çšããã
å®éã®ãããã®äŸã
èŠãŠããŸãã ã åæã«ãèæ
®ããããããã¯ãççŽã«èšã£ãŠãã軜èããªãã®ã§ãã-ã¿ã€ããã¹ã®ä¿®æ£ãéçåæã䜿çšããŠèŠã€ãã£ãæãåçŽãªåŠšå®³ã®ä¿®æ£ãªã©ã§ãã
ä»æ¥ã¯ããã§ã«æ·±å»ãªãããã®äŸãèŠãŠãã³ãŒãã®ããã«ããã¯ã解æ¶ããããªãæ·±å»ãªãã°ãä¿®æ£ããæ¯èŒç倧ããªãªãã¡ã¯ã¿ãªã³ã°ãªã©ãè¡ããŸãã 以åãšåæ§ã«ããã®èšäºã®äž»ãªç®çã¯ãPostgreSQL 9.6ã§æ¡çšãããå€æŽã匷調ããããšã§ã¯ãªãããªãŒãã³ãœãŒã¹ãããžã§ã¯ããç¹ã«PostgreSQLã®éçºãèå³æ·±ããããªãã«ãšã£ãŠã¯ããã»ã©é£ãããªãããšã瀺ãããšã§ãã
ãã®ãããã¯ã«èå³ãããå Žåã¯ãç«ããé¡ãããŸãã
6.å€æ°ã®ãªãœãŒã¹ã«å¯ŸããResourceOwnerã®é«éå
ResourceOwnerã¯ãSQLã¯ãšãªã®å®è¡ããã»ã¹ã§ãªãœãŒã¹ã管çããããã«èšèšããããªããžã§ã¯ãã§ãïŒããªããžã§ã¯ãããšããåèªãæç¶ãåèšèªCã«é©çšãããéãïŒã ãã©ã³ã¶ã¯ã·ã§ã³ãšãµããã©ã³ã¶ã¯ã·ã§ã³ããšã«åå¥ã®ResourceOwnerãäœæãããŸãã ResourceOwnerã«ã¯ãRememberLock / ForgetLockãRememberFile / ForgetFileãªã©ã®å€ãã®ã¡ãœããããããŸãã ããã«ãResourceOwnersã¯éå±€åã§ããŸãã äœããã®çç±ã§ãã©ã³ã¶ã¯ã·ã§ã³ã®ããŒã«ããã¯ãçºçããå ŽåïŒãŠãŒã¶ãŒãããŒã«ããã¯ãäŸå€ãçºçãããªã©ïŒãResourceOwnerãåã«ãªãªãŒã¹ããŸãããã®ãªãªãŒã¹ã«ããããã®ResourceOwnerã§äœ¿çšãããŠãããã¹ãŠã®ãªãœãŒã¹ã解æŸãããŸãã圌ã®ãåäŸãã 詳现ã¯ã
察å¿ããREADMEãã¡ã€ã«ã«èšèŒãããŠã
ãŸã ã
9.5ã§ã¯ãResourceOwnerã¯é
åã䜿çšããŠãªãœãŒã¹ãä¿åããŸããã éåžžããªãœãŒã¹ã¯å²ãåœãŠãããé åºãšéã®é åºã§è§£æŸããããšæ³å®ãããŠãããããForget *ã¡ãœããã¯é
åã®æåŸãããªãœãŒã¹ãæ¢ããŸããã ããããå®éã«ã¯ããã®ã¢ãããŒãã¯å¿
ãããããŸãæ©èœããªãããšãå€æããŸããã ãããã£ãŠã
ãããã¡ã€ãªã³ã°ã¯ ããã®ã¢ãããŒãã§
å€æ°ã®ããŒãã£ã·ã§ã³ãæã€ããŒãã«ã«å¯ŸããŠæãåçŽãªSELECTã¯ãšãªãå®è¡ãããšãPostgreSQLã¯ãããã®åãForget *ã¡ãœããã§ãã¹ãŠã®æéã®30ïŒ
ãè²»ããããšã瀺ããŸããã
é
åãããã·ã¥ããŒãã«ã«çœ®ãæããããšã§ãããã«ããã¯ã解æ¶ããããšãã§ããŸããã ããã«ãResourceOwnerã®ãªãœãŒã¹ã®éãå°ãªãå Žåã以åãšåæ§ã«é
åã䜿çšãããŸãã
typedef struct ResourceArray { Datum *itemsarr; Datum invalidval; uint32 capacity; uint32 nitems; uint32 maxitems; uint32 lastidx; } ResourceArray;
åããããã«ã¯ResourceOwnerãªãã¡ã¯ã¿ãªã³ã°ãå«ãŸããŠããŸãã 以åã¯ããªãœãŒã¹ã®ã¿ã€ãããšã«ãFilesãHeapTuplesãªã©ã®åå¥ã®é
åã䜿çšãããŠããŸããã ãããã®åã¯ãã¹ãŠãã€ã³ã¿ãŒãŸãã¯æŽæ°ã§ãããããDatumïŒuintptr_tã®ããŒã«ã«å¯Ÿå¿ïŒã«æ ŒçŽã§ããŸãã æ°ããResourceArrayãšã³ãã£ãã£ãå°å
¥ãããŸãããããã«ããããªãœãŒã¹ãä¿åã§ããããã«ãªãã倧éã®éè€ã³ãŒããæé€ãããŸããã
ã³ãããïŒ
cc988fbb0bf60a83b628b5615e6bade5ae9ae6f4ãã£ã¹ã«ãã·ã§ã³ïŒ
20151204151504.5c7e4278@fujitsu7.å
±æãã€ãããã·ã¥ã®ããŒãã£ã·ã§ãã³ã°ããªãŒãªã¹ã
DynahashïŒ
dynahash.cãã¡ã€ã«ãåç
§ïŒã¯ãããã·ã¥ããŒãã«ã®ããŒã«ã«å®è£
ã§ãã PostgreSQLããã·ã¥ããŒãã«ã¯ãäœæããããã©ã°ã«ãã£ãŠéåžžã«ç°ãªãåäœãããå¯èœæ§ããããŸãã ããšãã°ãããŒã«ã«ããã»ã¹ã¡ã¢ãªãš
å
±æã¡ã¢ãªã®äž¡æ¹ã«ååšã§ã
ãŸã ã åŸè
ã䜿çšããå Žåãå
±æã¡ã¢ãªã¯ãã¹ãŠã®PostgreSQLããã»ã¹ã®åãä»®æ³ã¢ãã¬ã¹ã«ããããããŸãã å
±æã¡ã¢ãªã¯äžåºŠå²ãåœãŠããããã®ã¡ã¢ãªã®éã¯RDBMSã®æäœäžã«å€æŽã§ããŸããã
ãããã®çç±ãããããããããªãŒãªã¹ãã䜿çšããŠãå
±æããã·ã¥ããŒãã«ã®ç©ºãã¡ã¢ãªïŒç©ºãã¡ã¢ãªã®å°ããªæçã®ãªã¹ãïŒã远跡ããŸãã ã¡ã¢ãªã解æŸãããšã空ããªã¹ãã«è¿œå ãããŸãã ã¡ã¢ãªãå²ãåœãŠãå¿
èŠãããå Žåã空ããªã¹ãããååŸãããŸãã å
±æããã·ã¥ããŒãã«ãžã®ã¢ã¯ã»ã¹ã¯äžåºŠã«è€æ°ã®ããã»ã¹ã«ãã£ãŠå®è¡ããããããããªãŒãªã¹ããžã®ã¢ã¯ã»ã¹ã¯ã¹ãã³ããã¯ã䜿çšããŠåæãããŸãã ç¹å®ã®ããŒãããã®ã¹ãã³ããã¯ã®ããã¯ç«¶åãåŒãèµ·ããããšãå€æããŸããã
çµæã®ãããã¯ããã®åé¡ã次ã®ããã«è§£æ±ºããŸãã 1ã€ã®ããªãŒãªã¹ãã®ä»£ããã«ãããã€ãã®ïŒ32ïŒã䜿çšãããããããã«ç¬èªã®ã¹ãã³ããã¯ããããŸãã
ããã¯ïŒ
struct HASHHDR { slock_t mutex; long nentries; HASHELEMENT *freeList;
次ã®ããã«ãªããŸããïŒ
#define NUM_FREELISTS 32 typedef struct { slock_t mutex; long nentries; HASHELEMENT *freeList; } FreeListData; struct HASHHDR { FreeListData freeList[NUM_FREELISTS];
ããã©ã«ãã§ã¯ã空ããªã¹ãã¯ã¡ã¢ãªã®å²ãåœãŠã«äœ¿çšããããã®æ°ã¯ããŒããã®ããã·ã¥å€ã®äžäœãããã«ãã£ãŠæ±ºå®ãããŸãã
#define FREELIST_IDX(hctl, hashcode) \ (IS_PARTITIONED(hctl) ? hashcode % NUM_FREELISTS : 0)
ãã ãããç§ãã¡ã®ãããªãŒãªã¹ãã®ã¡ã¢ãªããªããªããšãä»ã®ããªãŒãªã¹ããããåçšããããŸãã
ãšãããããã®ãããã¯ãæ¡çšåã«çŽ15ã®ããŒãžã§ã³ãäœæããããªãŒãªã¹ãããã®æ°ãããã³ãã®ä»ã®ãã©ã¡ãŒã¿ãŒã®å¯èœãªãã¹ãŠã®ã·ã£ãŒãã£ã³ã°æŠç¥ãå®éã«ãœãŒãããæé«ã®ããã©ãŒãã³ã¹ã瀺ãã1ã€ã®ãªãã·ã§ã³ãéžæããå¿
èŠããããŸããã ããšãã°ãæçµå®è£
ã§äœ¿çšããã32åã®ã¹ãã³ããã¯ã®ä»£ããã«ã1ã€ã®RWLockã䜿çšã§ããŸããRWLockã¯ããç§ãã¡ã®ãããªãŒãªã¹ãããã¡ã¢ãªãååŸããå Žåã¯èªã¿åãçšãä»ããåããå Žåã¯èšé²çšã«ãã£ããã£ãããŸãã ããã«ãã¹ãã³ããã¯ã¯ããã£ãã·ã¥ã©ã€ã³ã®é
眮ã®æç¡ã«ããããããã¡ã¢ãªå
ã§ããŸããŸãªæ¹æ³ã§é
眮ã§ããŸãã
ã³ãããïŒ
44ca4022f3f9297bab5cbffdd97973dbba1879edãã£ã¹ã«ãã·ã§ã³ïŒ
20151211170001.78ded9d7@fujitsu8. RBããªãŒã§ã®è€æ°ã®ã€ãã¬ãŒã¿ãŒã®ãµããŒã
å¥ã®æ©èœã«åãçµãã§ãããšãã«ãPostgreSQLã®èµ€é»ããªãŒïŒçŸåšã¯GINã€ã³ããã¯ã¹ã§ã®ã¿äœ¿çšãããŠããŸãïŒã®å埩ã€ã³ã¿ãŒãã§ã€ã¹ã次ã®ããã«ãªã£ãŠããããšã«æ°ä»ããŸããã
void rb_begin_iterate(RBTree *rb, RBOrderControl ctrl); RBNode *rb_iterate(RBTree *rb);
ãã®ã€ã³ã¿ãŒãã§ã€ã¹ã§ã¯ãããªãŒå
ã«è€æ°ã®ã€ãã¬ãŒã¿ãäœæã§ããªããããããªãäžäŸ¿ã§ãã ããã«ãå®è£
ã¯éåžžã«å¥åŠã§ããã ããšãã°ã圌女ã¯ããªãŒã®ããŒãã«å埩ç¶æ
ãä¿åããŸããã
å°ãèããŠããã®çµæžããã¹ãŠæžãçŽããåŸãã€ã³ã¿ãŒãã§ãŒã¹ã¯æ¬¡ã®ããã«ãªããŸããã
void rb_begin_iterate(RBTree *rb, RBOrderControl ctrl, RBTreeIterator *iter); RBNode *rb_iterate(RBTreeIterator *iter);
PostgreSQLã§äœ¿çšãããããŸããŸãªã³ã³ããã®è©³çŽ°ã«ã€ããŠã¯ã
Cãªã¹ããšæ€çŽ¢ããªãŒã«é¢ããå調ãªèšäºã§
ã¯ãããŸãã ã ããã«ããã®ã¿ã¹ã¯ã«åãçµãéçšã§äœæãã
GitHubãªããžããªã«èå³ããããããããŸããã ãã®äžã«ã¯ãCã®åäžããã³äºéãªã³ã¯ãªã¹ããèµ€é»ããªãŒãããã·ã¥ããŒãã«ã®å®è£
ããããŸããã©ã€ãã©ãªã¯ããã¹ãã§ååã«ã«ããŒãããMIT / BSDã©ã€ã»ã³ã¹ã®äžã§é
åžãããŠããŸãã
ã³ãããïŒ
9f85784cae4d057f307b83b0d33edede33434f04ãã£ã¹ã«ãã·ã§ã³ïŒ
20160727172645.3180b2e0@fujitsu9.ããã€ãã®ã»ã°ã¡ã³ããæã€ããŒãã«ã®pg_filedumpã®ãã§ãã¯ãµã ã®æ€èšŒã®ä¿®æ£
PostgreSQLã¯ãããŒãã«ãšã€ã³ããã¯ã¹ã®ããŒã¿ãããããããŒãžã«ä¿åããŸãã 1ããŒãžã®ããã©ã«ããµã€ãºã¯8 Kbã§ãã ããŒãžã¯ãã»ã°ã¡ã³ããšåŒã°ãããã£ã¹ã¯äžã®ãã¡ã€ã«ã«ä¿åãããŸãã 1ã€ã®ã»ã°ã¡ã³ãã®ãµã€ãºã¯ããã©ã«ãã§1 GBã§ãã é¢ä¿ãšã€ã³ããã¯ã¹ãã»ã°ã¡ã³ãã«åæãããšãPostgreSQLã¯1 GBãè¶
ãããã¡ã€ã«ããµããŒãããªããã¡ã€ã«ã·ã¹ãã ã§ãåäœããŸãã ããŒãžã䜿çšããŠãã¡ã¢ãªå
ã®é »ç¹ã«äœ¿çšãããããŒã¿ã®ãã£ãã·ã¥ã¯ããããããããã¡ãããŒãžã£ã«ãã£ãŠå®è£
ããããã£ã¹ã¯ã¢ã¯ã»ã¹ã®æ°ã倧å¹
ã«åæžãããŸãã
pg_filedumpãŠãŒãã£ãªãã£ã䜿çšãããšãã»ã°ã¡ã³ããšããŒãžã§ããŸããŸãªäŸ¿å©ãªããšãã§ããŸãã ããšãã°ã圌女ã¯ã»ã°ã¡ã³ãå
ã®ãã¹ãŠã®ããŒãžã®ãã§ãã¯ãµã ããã§ãã¯ã§ããŸãã ããŒã¿ããŒã¹ã-kãã©ã°ãæå®ããŠinitdbãåŒã³åºããŠäœæãããå Žåããã§ãã¯ãµã ã¯ããŒãžã«æžã蟌ãŸããŸãã
-k, --data-checksums use data page checksums
èå³æ·±ãããšã«ãããŒãžã®ããã·ã¥é¢æ°ãèšç®ããpg_checksum_pageããã·ãŒãžã£ã¯ãããŒãžã®ã³ã³ãã³ãã ãã§ãªããããã¯çªå·ã«ãäŸåããŸãã
uint16 pg_checksum_page(char *page, BlockNumber blkno)
ããã«ãããããŒãžã«æ£ããããŒã¿ãä¿åãããã ãã§ãªããã»ã°ã¡ã³ãå
ã®æ£ãããªãã»ããã«èšé²ãããããšã確èªã§ããŸãã
ãã®ãããæè¿ãpg_filedumpã§ãã°ãçºèŠãããŸããã ãŒãã»ã°ã¡ã³ãã®ãã§ãã¯ãµã ã¯æ£ãããã§ãã¯ãããŸãããã1çªç®ã2çªç®ãªã©ã®ã»ã°ã¡ã³ãã§ã¯ãpg_filedumpã«ãã£ãŠèªã¿åããããã§ãã¯ãµã ã¯ãPostgreSQLèªäœã«ãã£ãŠèšç®ããããã§ãã¯ãµã ãšäžèŽããŸããã§ããã çµå±ã®ãšãããpg_filedumpã¯ã©ã®ã»ã°ã¡ã³ãã§ããããã¯çªå·ããŒãããã«ãŠã³ããå§ããŸããã æ£ããæ¹æ³ã¯ã以åã®ãã¹ãŠã®ã»ã°ã¡ã³ããèæ
®ãããçžå¯Ÿçãªããã®ã§ã¯ãªãããã®ã»ã°ã¡ã³ãã«ã絶察çãªãããã°çªå·ã䜿çšããããšã§ãã
æãããªçç±ã«ãããåããããã§ãpg_filedumpã«ä»¥åã¯æ¬ èœããŠãã2ã€ã®ãã©ã°ã®ãµããŒããè¿œå ãããŸããã
-s Force segment size to [segsize] -n Force segment number to [segnumber]
ã³ãããïŒ
052ed0112967dd1e9b0e2cbe54821c04475f1a3aãã£ã¹ã«ãã·ã§ã³ïŒïŒ
æä»çã«ãªããªã¹ãïŒ10. mallocïŒïŒãreallocïŒïŒãããã³ãã®ä»ã®ããã·ãŒãžã£ã«ãã£ãŠè¿ãããå€ã確èªãã
çµå±ãç§ã¯èªåã§ã¯ãªããã¬ãã¥ã¢ãŒãšããŠè¡åããããããæžããŠæ®ãããšã«ããŸããã ã³ãŒãã¬ãã¥ãŒã®éçšã§ããã®ãããã®å€ãã®æ¹åãææ¡ããŸããã
Michael Paquierã¯ãPostgreSQLãmallocïŒïŒãreallocïŒïŒãããã³strdupïŒïŒããã·ãŒãžã£ã®ãªã¿ãŒã³ã³ãŒãããã§ãã¯ããªãå Žæããããšããäºå®ã«æ³šç®ããŸããã ãããã®äœæ¥äžã«ãããã·ãŒãžã£ã®ãªã¹ãã¯callocïŒïŒã§è£å®ãããå
±æã¡ã¢ãªãæäœããããã®ããã·ãŒãžã£ãè¿œå ãããŸããã
ãã®çµæãå¯èœãªå ŽåãåŒã³åºãã¯åæ§ã®å®å
šãªPostgreSQLã®é¡äŒŒç©ïŒpg_strdupãpg_mallocãªã©ïŒã«çœ®ãæããããŸããã
- steps = malloc(sizeof(Step *) * nsteps); + steps = pg_malloc(sizeof(Step *) * nsteps);
ä»ã®å Žæã§ã¯ããã§ãã¯ãåã«è¿œå ãããŸããã
new_environ = (char **) malloc((i + 1) * sizeof(char *)); + if (!new_environ) + { + write_stderr("out of memory\n"); + exit(1); + }
ãã€ã±ã«èªèº«ã®æçš¿
-Postgres 10ãã€ã©ã€ã-ShmemAllocããã³ShmemAllocNoErrorãåç
§ããŠãã ããã
ã³ãããïŒ
052cc223ã6c03d981ãã£ã¹ã«ãã·ã§ã³ïŒ
CAB7nPqRu07Ot6iht9i9KRfYLpDaF2ZuUv5y_+72uP23ZAGysRg@mail.gmail.comç¶è¡ããã«ã¯...
ãã¡ããããã®ãããªæçš¿ã誰ãã«èå³ããããšããæ¡ä»¶ã§:)ãããããååã®1人ã«æè¿äœæ¥ããããããã«ããŒããããã«èª¬åŸããããšãã§ããã§ãããã çµå±ã®ãšããããã®æŽæ°ããã°ã©ã ã®éçºè
ãããããã®æŽæ°ããã°ã©ã ã«ã€ããŠèª°ãããããç¥ãããšãã§ããŸããïŒ
ãã€ãã®ããã«ãç§ã¯ããªãã®è³ªåã楜ãã¿ã«ããŠãããã³ã¡ã³ãã§ãããã«çãããã§ãã ãããŠäžè¬çã«ãã³ã¡ã³ããè¿œå ããããããªãã§ãã ããïŒ
ç¶ãïŒ
PostgreSQLã®å®éã®ãããã®äŸïŒNã®ããŒã3