ǰÑÔ
¹ØÏµÐÍÊý¾Ý¿â·¢Õ¹ÖÁ½ñ,ϸ½ÚÉÏÒÔ×ö×ãÎÄÕÂ,ÔÚѰÇó×ÔÉíÍ»ÆÆ·¢Õ¹µÄ¹ý³ÌÖÐ,ÄÚ´æÓë·Ö²¼Ê½Êý¾Ý¿âÊǵ±ÏÂ×îÁ÷ÐеÄÖ÷Ìâ,ÕâÓëÐÔÄܼ°À©Õ¹ÐÔÔÚ´óÊý¾Ýʱ´úµÄÐèÇó½»Ïà»ÔÓ³.SQL
Server×÷Ϊ´«Í³µÄÊý¾Ý¿âÒ²ÔÚ×îз¢²¼°æ±¾SQL Server 2014ÖÐÌṩÁËÐÂÀûÆ÷ SQL Server
In-Memory OLTP(Hekaton),ʹµÃÆäÔÚOLTPϵͳÖеÄÐÔÄÜÓÐÁ˼¸Ê®±¶ÉõÖÁÉϰٱ¶µÄÐÔÄÜÌáÉý,±¾ÆªÎÄÕÂΪ´ó¼Ò̽¾¿Ò»¶þ.
´óÊý¾Ýʱ´úµÄÊý¾ÝÈçºÎ×éÖ¯Ó¦Óã¿Õâ¿ÖÅÂÖÚ¿Ú²»Ò».µ«²»¿É·ñÈÏ,¹ØÏµÐÍÊý¾ÝÒÀ¾ÉÊǵ±ÏÂÊÀ½ç×îÓÐЧµÄÓ¦Ó÷½Ê½.×÷ΪӦÓü¼Êõ,Ò²±Ø½«°éËæ×ÅÓ¦ÓõÄÐèÇó¶ø²»¶ÏÑÝ»¯.ÐÅÏ¢±¬Õ¨¶ÔÐÅÏ¢´¦ÀíÌá³öÁ˸üΪÑÏ¿ÁµÄÐèÇó,µ¥´Ó´«Í³µÄOLTPϵͳÀ´¿´,ÐÔÄܺÍÀ©Õ¹ÐÔ±ãÊÇÓ¦ÓÃÕß×îΪ¹Ø×¢µÄ·½Ãæ.¼ÙÈçÓ¦ÓÃÕ߸æËßÄãÎÒÐèÒªµ±ÏÂÊý¾Ý¿â·ÃÎÊÁ¿100±¶µÄ¼ÆËã×ÊÔ´,µ¥´¿Ó²¼þ£¿ÏÔȻеļ¼ÊõÓ¦ÓúôÖ®¶ø³ö.
´«Í³¹ØÏµÐÍÊý¾Ý¿â×Ôµ®ÉúÆð×ÔÉí²»¶ÏÍêÉÆµÄͬʱҲ°éËæ×ÅÓ²¼þµÄ·ÉËÙ·¢Õ¹,ÐÔÄÜÌáÉýÉϰéËæ´¦ÀíÆ÷ÉñÆæµÄĦ¶û¶¨ÂÉ,TPC-C,TPC-EµÈÖ¸±ê²»¶ÏÌáÉý,¶øËæ×ŽñÄêÀ´´¦ÀíÆ÷ÎïÀí¹¤ÒÕ½Ó½ü¼«ÏÞ,CPUµÄÖ÷ƵËٶȼ¸ºõ²»ÔÙÌáÉý,Õâʱ¼ÆËã»ú³¯×ŶàºË·½Ïò½øÕ¹,ͬʱÄÚ´æ³É±¾Ò²ÔÚÏßÐÔ½µµÍ,²»ÔÙÈç´Ë°º¹ó,ĿǰÄÚ´æµÄ³É±¾ÒѾµÍÓÚ10$/GB.
¶ø¹Ì̬ӲÅÌ(SSD)µÄ¹ã·ºÓ¦ÓÃҲʹµÃ´«Í³Êý¾Ý¿âÔÚÐÔÄÜÉÏÓиü¶àµÄÑÓÉì.Ãæ¶ÔÕâЩеÄÓ²¼þ»·¾³´«Í³µÄ¹ØÏµÐÍÊý¾Ý¿â×ÔȻҲÓÐÆäÉè¼ÆÖ®³õ²»¿É±ÜÃâµÄ×ÔÉíÐÔÄÜÆ¿¾±.
SQL Server 2014µÄ´«Í³ÒýÇæÖÐÒýÈ뻺³å³ØÀ©Õ¹£¨Buffer Pool Extension£©¹¦ÄÜÀûÓÃSSDµÄ¸ßIOPS×÷Ϊ»º³å³ØµÄÓÐÀûÑÓÉì,¹¹³ÉÁËÈÈ,»î,ÀäÈý²ãÊý¾ÝÌåϵ,ÓÐЧ»º½â´ÅÅ̵ÄѹÁ¦.ÎÒÃÇ¿ÉÒ԰Ѹü¶àµÄÊý¾Ý·ÅÈëÄÚ´æ,SSDÖÐ,µ«¼´±ãÈç´ËÊý¾Ý¿âµÄÐÔÄÜ»¹ÊDZ»×ÔÉíµÄһЩ¼Ü¹¹ºÍ´¦Àí·½Ê½ËùÔ¼Êø×Å.
¾Í×ÅÇ°ÃæµÄ¼ÙÉè,ÎÒÃÇÒª°ÑÊÂÎñ´¦ÀíÄÜÁ¦ÌáÉý100±¶.¼ÙÉèÎÒÃÇÏÖÔڵĴ¦ÀíÄÜÁ¦ÊÇ100 TPS,¶øÕâʱÿ¸öÊÂÎñËùÒÔµÃÆ½¾ùCPUÖ¸ÁîΪ100Íò¸ö,ÒÔ´ËÌáÉý10±¶1000
TPS,ÿ¸öÊÂÎñµÄCPUÖ¸Áî¾ÍÐ轵Ϊ10Íò¸ö,¶øÔÙÌáÉý10±¶10000 TPSÿ¸öÊÂÎñµÄCPUÖ¸Áî¾ÍÐ轵Ϊ1Íò¸ö,ÕâÔÚÏÖÓеÄÊý¾Ý¿âϵͳÖÐÊDz»¿ÉÄÜʵÏÖµÄ,ËùÒÔÎÒÃÇÒÀ¾ÉÐèҪеĴ¦Àí·½Ê½.
´«Í³Êý¾Ý¿âÒýÇæÃæÁÙµÄÎÊÌâ
ÓеÄÅóÓÑ¿ÉÄÜ»á˵°ÑËùÓÐÊý¾Ý¶¼·ÅÈëÄÚ´æÖоÍÊÇÄÚ´æÊý¾Ý¿â,¾Í²»´æÔڶ̰åÁË,µ«¼´±ãÈç´ËÎÒÃÇÈÔÃæÁÙÈçÏÂÖ÷ÒªÎÊÌâ:
1:±£»¤ÄÚ´æÖеÄÊý¾Ý½á¹¹¶ø²ÉÓõÄãÅËø(latch)ÒýÆðµÄÈȵã (hot spots) ÎÊÌâ.
2:ʹÓÃËø»úÖÆ¿ØÖÆ¶à°æ±¾²¢·¢´øÀ´µÄ×èÈûµÈÎÊÌâ.
3:ʹÓýâÊÍÐÍ(interpretation)ÓïÑÔµÄÖ´Ðмƻ®µÄÖ´ÐÐЧÂÊÎÊÌâ.
ÎÒÃǼòµ¥¿´ÏÂÉÏÊöÎÊÌâµÄÓÉÀ´
1:¼ÙÉèÎÒÓÐÒ»¸ö²éѯQ1ÐèÒª·ÃÎÊÒ»¸öÊý¾ÝÒ³ Ò³ºÅ7,´ËʱÊý¾ÝÒ³²»ÔÚBuffer Pool(BP)ÖÐ,Ϊ´ËϵͳΪÆä·ÖÅäÁËÄÚ´æ¼Ü¹¹,²¢È¥´ÅÅÌÈ¡Ïà¹ØÊý¾ÝÒ³ÖÃÈëBPÖд˹ý³ÌÕý³£´ó¸Å10-20ms,¶ø´ËʱǡºÃÁíÒ»¸ö²éѯQ2Ðè·ÃÎÊÊý¾ÝÒ³ºÅ7,ÓÉÓÚBPÖÐÒѾ´æÔÚÓ¦¸ÃÒ³¼Ü¹¹,Èç¹û´ËʱÔÊÐíQ2¶ÁÈ¡,ÔòQ2½«»áÔà¶Á.Òò´ËÒýÈëãÅËø,µ±Q1È¥´ÅÅ̶ÁÈ¡Êý¾ÝʱBPÖеÄÏàÓ¦¼Ü¹¹±»ãÅËø±£»¤,Q2¶ÁÏàÓ¦µÄҳʱ½«±»×èÈû,ÖªµÀQ1Íê³ÉÏàÓ¦²Ù×÷²¢ÊÍ·ÅãÅËø,ÈçÏÂͼ1-1Ëùʾ
ÏÖÔÚÓÐÊý¾Ý¿âϵͳÖÐΪ±£Ö¤¶àÏß³ÌÏµĹ²ÏíÊý¾ÝÒ»ÖÂÐÔ,ÄÚ´æÈκÎÊý¾Ý½á¹¹¶¼Ðè±»ãÅËø±£»¤.¶øµ±´óÁ¿²¢·¢½ø³Ìͬʱ·ÃÎÊÒ»¸öÊý¾ÝÒ³(½á¹¹)¾ÍÔì³ÉÁËÈȵãÎÊÌâ.ÏûºÄÁË´óÁ¿CPUµÄͬʱӰÏìÁ˲¢·¢ÍÌÍÂ.
ͼ1-1
2:¼ÙÉèÓÐÈçÏÂÁ½¸ö²Ù×÷,¶¼¶ÔÊý¾Ý¿âÖеÄij¸öÖµ½øÐÐÐÞ¸Ä
A=1000
Q1: A = A + 100 Q2: A = A + 500
ÔÚÊý¾Ý¿âÖеIJÙ×÷Ϊ
Q1: Read A, A=A+100, Write A
Q2: Read A, A=A+500, Write A
Èç¹ûÊÇ´®ÐÐÏȺóÖ´ÐÐ,ÔòûÓÐÎÊÌâ,µ«Èç¹ûͬʱִÐÐÔò¿ÉÒÔ³öÏÖÊý¾ÝµÄ²»Ò»ÖÂÇéÐÎ.
Q1,Q2ͬʱ¶ÁÈ¡ÁËAµÄÔʼֵºó,½øÐÐÐÞ¸Ä,ÔòÊý¾Ý²»Ò»ÖÂÈçͼ1-2
ͼ1-2
ΪÁ˽â¾ö´ËÎÊÌâ,ÒѹʵÄÒµ½ç´óÉñ,ͼÁé½±µÄ»ñµÃÕßJim GrayÌá³öÁËÁ½½×¶ÎËø¸ÅÄî (Two-Phase
Locking),ºÏÀíµØ½â¾öÁ˲¢·¢Ò»ÖÂÐÔÎÊÌâ,²¢±»¾ø´ó¶àÊýÊý¾Ý¿âϵͳӦÓò¢¸Ä½ø(ÈçSQL ServerÖÐÊý¾Ý²»Í¬Á£¶Èϲ¢·¢¼æÈÝÇéÐÎÒýÈëµÄÒâÏòËø).
±¾ÀýÖе±Q1¶ÁÈ¡Aʱ,¶ÔA¼ÓÅÅËûËø,µ±Q2ÊÔͼ¶Áȡʱ¾Í»á±»×èÈû,ÐèµÈ´ýQ1µÄÊÂÎñÍê³ÉºóÊÍ·ÅËø×ÊÔ´ºó²ÅÄܼÌÐø¶ÁÈ¡.Èçͼ1-3
ͼ1-3
µ«Ò²ÕýÒòÎªËøµÄÒýÈë,ʹµÃÊÂÎñ¼ä¿ÉÄܳöÏÖÏ໥×èÈû,²¢ÇÒÐèÒªÌØ¶¨µÄ½øÐйÜÀíËø×ÊÔ´,ÇÒÐè¶ÔËÀËøµÈÎÊÌ⼴ʱ¼ì²â,¶øÕâЩÎÊÌâ×ÔÈ»µØ»áÓ°Ïì²¢·¢ÐÔÄÜ.
3:ÊìϤSQL ServerµÄÈ˶¼ÖªµÀÒ»ÌõÓï¾äÔÚSQL ServerÖÐÖ´ÐÐ,ÏÖÓнøÐаó¶¨,ÓïÒå·ÖÎö,»ùÓڳɱ¾µÄÓÅ»¯µÈһЩÁйý³ÌÈ»ºóÉú³ÉÏàÓ¦µÄ½âÊÍÐÔÓïÑÔÖ´Ðмƻ®,¶øÒýÇæÔÚÖ´ÐÐÏàÓ¦µÄÖ´Ðмƻ®Ê±»áµ÷ÓÃÏàÓ¦µÄÊý¾Ý¿âº¯Êý,ÔËÐÐÿһ¸öÔËËã·û,Èç¹ûÊý¾ÝÔÚÓ²ÅÌÉÏÔò»áÈ¥Ó²ÅÌÉÏÈ¡Êý¾Ý¡ÕâЩÇéÐÎʹµÃÖ´ÐнâÊÍÐÔÓïÑÔʱ¸ßʱ¼äÏûºÄµÄͬʱҲ´ò¶ÏCPUÁ÷Ë®,ʹµÃCPUµÄЧÂÊÎÞ·¨³ä·Ö·¢»Ó,¶øÈç¹ûÊý¾Ý¾ùÔÚÄÚ´æÖÐ,Ôò¿ÉÒÔ²ÉÓøü¸ßЧµÄ·½Ê½´¦Àí.¶ø¾ø´ó¶àÊý¹ØÏµÐÍÊý¾Ý¿âϵͳµÄÖ´Ðмƻ®¾ùΪ½âÊÍÐÔÓïÑÔ.
Ãæ¶ÔÕâЩÎÊÌâ,¾ÞÍ·Êý¾Ý¿â³§ÉÌÃǶ¼ÌṩÁËÏàÓ¦µÄÄÚ´æÊý¾Ý¿â½â¾ö·½°¸,ÈçOracleµÄTimesten,»¹ÓÐ×îÐÂͼÁé½±»ñµÃÕßMichael
Stonebraker½ÌÊÚµÄÑо¿H-storeÑÝ»¯³öµÄÉÌÒµ²úÆ·VoltDBµÈ.¶øÎ¢ÈíµÄSQL Server
2014Ò²ÍÆ³öÁËÄÚ´æÊý¾Ý¿âSQL Server In-Memory OLTP(¿ª·¢´úºÅHekaton),½ÓÏÂÀ´ÎÒÃǾͼòÒªµÄ¿´ÏÂHekatonÈçºÎÓ¦¶ÔÉÏÃæµÄÎÊÌâ,ʹµÃÐÔÄܵõ½ÐµÄÉý»ª.
SQL Server HekatonµÄÓ¦¶Ô·½Ê½
SQL Server HekatonÊÇÒ»¸ö»ùÓÚÄÚ´æÓÅ»¯µÄ¸ßÐÔÄܵÄOLTPÊý¾Ý¿âÒýÇæ,ÇÒÊý¾ÝÊǿɳ־û¯µÄ,ËûÍêÈ«¼¯³ÉÓÚSQL
ServerÄÚ(¿ÉÓ봫ͳÒýÇæ,»ùÓÚÁд洢ÒýÇæ»ìºÏ͸Ã÷ʹÓà Èçͼ2-1),ÇÒÊÇ»ùÓÚÏÖ´ú¶àºËCPU¼Ü¹¹Éè¼Æ.
ͼ2-1
Ó¦¶ÔÉÏÊöÈýµãÐÔÄÜÆ¿¾±,ÈȵãÉÏHekaton²ÉÓá±Bw-tree¡±Êý¾Ý½á¹¹ÊµÏÖLatch-free,²¢·¢ËøÉϲÉÓÃÀÖ¹Û²¢·¢ÖÐ¶à°æ±¾Ê±¼ä´ÁÊý¾ÝÐпØÖÆÊµÏÖÎÞËøÊÂÎñ,½âÊÍÐÔÓïÑÔÖ´ÐÐЧÂʲÉÓýØÖ´Ðмƻ®±àÒëΪ»úÆ÷´úÂë(DLL)ÌáÉýCPUЧÂÊ.ÏÂÃæÕë¶ÔÕâÈýµãÀ´¼òҪ˵Ã÷ÏÂ.
HekatonÖеÄÊý¾ÝÒ³´óСÊǵ¯ÐÔµÄ,ÒÔ±ãÓÚÔöÁ¿¸üÐÂDelta update,ÒòΪÏÖÓд«Í³µÄupdate
in place»áʹµÃÏÖÓеÄCPU CacheʧЧ,ÔÚ¶àºË¼Ü¹¹Ï»áʹµÃÐÔÄÜÊÜÏÞ.Êý¾ÝÒ³ÔÚÄÚ´æÖÐͨ¹ýÓ³Éä±í¹ÜÀí,½«Ã¿¸öÊý¾ÝÒ³µÄÂß¼IDÓëÎïÀíµØÖ·Ò»Ò»Ó³Éä.Èçͼ2-2
ͼ 2-2
ÔÚ¶ÔÊý¾Ý½øÐиüÐÂʱ²ÉÓÃCompare and Swap(CAS)ʵÏÖÎÞËø(Latch free)²Ù×÷
CAS:ͨ¹ý±È¶ÔÎïÀíµØÖ·µÄÖµÓëЯ´øÖµÊÇ·ñÆ¥Åä,Æ¥ÅäÔò¿É²Ù×÷,²»Æ¥ÅäÔò¾Ü¾ø²Ù×÷.
Èçij¸ö½ø³ÌÔÚЯ´øµÄµØÖ·MµÄֵΪ20,Æ¥Å䵨ַMµÄʵ¼ÊÖµ,Èç¹ûΪ20Ôò¿ÉÒÔÐÞ¸Ä,·ñÔò¾Ü¾øÈçͼ2-3
ͼ2-3
ÔÚ¶ÔÊý¾ÝÒ³½øÐÐÔöÁ¿¸üÐÂʱÿ´Î²Ù×÷¾ù»áÔÚÊý¾ÝÉÏÉú³ÉÒ»¸öеÄÔöÁ¿µØÖ·×÷ΪÊý¾ÝÒ³µÄ·ÃÎÊÈë¿Ú,²¢²ÉÓÃCASÍê³ÉÓ³Éä±íÖÐ(mapping
table)ÎïÀíеØÖ·µÄÓ³Éä(delta address),²¢¶ÔÕë¶ÔͬһÊý¾ÝÒ³¿ÉÄܳöÏÖµÄͬʱ¸üнøÐÐÖÙ²Ã,´Ëʱʤ³öÕß½«½øÐиüÐÂ,¶øÊ§°ÜÕß¿ÉÒÔ½øÐÐÖØÊÔ,Òź¶µÄÊÇĿǰSQL
ServerÖ»»á¶Ôʧ°Ü²Ù×÷Å׳ö´íÎóÐÅÏ¢,ÐèÒªÎÒÃÇ×Ô¼º²¶×½´íÎóÐÅÏ¢²¢ÖØÊÔ,¾ßÌå¿É²Î¿¼Áª»úÎĵµ.¾ßÌåÈçͼ2-4Ëùʾ
ͼ2-4
ÕâÑùµÄ²Ù×÷·½Ê½ÏÂ,µ±¸üÐÂÁ´¹ý³¤Ê±·ÃÎÊÊý¾Ý»áÔì³Éʱ¼ä¸´ÔÓ¶ÈÌáÉý´Ó¶øÓ°ÏìÐÔÄÜ,SQL server»áÔÚºÏÊʵÄÇéÐÎϽøÐÐÕûÀí,Éú³ÉеÄÊý¾ÝÒ³,²¢½«ÎïÀíµØÖ·Ö¸ÏòеÄÊý¾ÝÒ³,¶øÀϵÄÊý¾ÝÒ³Á´±í½«»á×÷ΪÀ¬»ø»ØÊÕÊÍ·ÅÄÚ´æ.Èçͼ2-5
ͼ2-5
ÓÉÓÚÊý¾ÝÒ³Êǵ¯ÐÔµÄ,ËùÒÔ¿ÉÄÜÔì³ÉÊý¾ÝÒ³¹ý´ó»òÊǹý³Ì,HekatonÖлáÔÚÆäÈÏΪºÏÊʵÄÇéÐÎϽøÐÐÒ³·ÖÁÑ»òÊǺϲ¢.ÏÞÓÚÆª·ùÕâÀï¾Í²»ÔÚÏêϸÐðÊöÁË,ÔÚʵÏÖLatch-freeÖÐËùÓÐÄÚ´æÖеIJÙ×÷¶¼ÊÇͨ¹ýÒ»¸ö»ò¶à¸öÔ×Ó²Ù×÷Íê³É.¸ÐÐËȤµÄÅóÓÑ¿ÉÒԲο¼Î¢ÈíµÄÏà¹ØÎÄÏ×.
ÓеÄÅóÓÑ¿ÉÄÜ»á˵ãÅËø±¾ÉíÊDZ£»¤ÄÚ´æ½á¹¹µÄÇáÁ¿¼¶Ëø,¿öÇÒ²»Í¬ÀàÐ͵ÄãÅËø¿ÉÄܼæÈÝ,Latch-free¶ÔÐÔÄܰïÖúÄÜÓжà´óÄØ?ʵ¼ÊSQL
ServerÔÚ·ÃÎÊÄÚ´æÖÐÊý¾Ýʱ,ãÅËø±¾ÉíÓÃ×÷¿ØÖÆÊý¾Ý·ÃÎÊʱ³É±¾ºÜ¸ß,Ϊ´Ë»áÔÚÊý¾ÝÉϼÓ×ÔÐýËø(Spin lock)¹©Ïß³Ì̽²âÊý¾ÝÊÇ·ñ¿ÉÒÔ·ÃÎÊ,Spin
lockʵÏÖ¼´Ò»¸öBitλ(0»ò1),Ï̻߳áһֱ̽²âÄÚ´æÖеÄÕâ¸öBitλÒÔÊÔͼ»ñµÃ×ÔÐýËø,Èç¹û¿ÉÒÔ·ÃÎÊÔò·ÃÎÊ,·ñÔò×ÔÐý,Èç¹û¼¸Ç§´ÎµÄ̽²âÈÔÎÞ·¨·ÃÎÊÔòͣϡ±ÐÝÏ¢¡±Õâ¸ö³Æ×÷Ò»´ÎÅöײ.µ«ÊÇÔÚ×ÔÐýµÄ¹ý³ÌCPU¸ººÉ״̬,Òò´ËÒ²¾ÍÔì³ÉCPU×ÊÔ´°×°×ÀË·Ñ.Éú²úÖÐÎÒÃÇ¿ÉÄÜ¿´µ½CPU¸ßÆô,¶ø²¢·¢È´Éϲ»È¥,·ÃÎʱäÂý,ÆäÖеÄÒ»¸öÔÒò¾ÍÊÇ´óÁ¿½ø³Ì·ÃÎÊÈȵãÊý¾ÝÏ´óÁ¿×ÔÐýËøÕ÷ÓÃʹµÃÐÔÄÜÊÜÏÞ.¶øÔÚHekatonÖÐÎÞãÅËøµÄÇé¿öϾͲ»´æÔÚÕâÑùÎÊÌâ,µ¥´ÓÕâ¸ö½Ç¶ÈÀ´¿´Ëæ×ÅÏ̵߳ÄÔö¼ÓÐÔÄÜÒ²ÊÇÏßÐÔ·Å´ó.µ±È»³ýÁËLatch-free£¬ÆäËûµÄÁ½¸ö·½ÃæHekatonͬÑù±íÏÖ³öÉ«.
ǰÎÄÖÐÐðÊö¿ÉÖª,¹ØÏµÐÍÊý¾Ý¿âÖÐÊÂÎñÊÇ¿¿ËøÀ´±£Ö¤¶à°æ±¾²¢·¢¿ØÖƵÄ,ÓÉ´Ë´øÀ´µÄ×èÈûËÀËøµÈÎÊÌâÏàÐÅËùÓеÄDBA¶¼Ó¡ÏóÉî¿Ì.¶øHekatonÖвÉÓÃÀÖ¹Û²¢·¢ÏÂ¶à°æ±¾Êý¾Ý¼Óʱ¼ä´ÁµÄÐÎʽʵÏÖ.ÏÂÃæÀ´¼òÒª½âÏÂ.
HekatonÖн«Ò»¸öÊÂÎñ·ÖΪÈý¸ö½×¶Î,Õý³£ÊÂÎñ´¦Àí²½ÖèÓÃÓÚÎÒÃǵÄÊý¾Ý²Ù×÷DMLÔò´´½¨Ðµİ汾ÐÐ.ÑéÖ¤Ìá½»½×¶ÎÑéÖ¤Õâ¸öÊÂÎñÊÇ·ñ¿ÉÒÔ°²È«Ìá½»(¸ù¾Ý°æ±¾Êý¾Ý).Ìá½»´¦Àí½×¶ÎÓÃÓÚдÈÕÖ¾,²¢½«Ðµİ汾ÐÐÊý¾Ý¶ÔÆäËüÊÂÎñ¿É¼û.Èçͼ2-6
ͼ2-6
ÎÒÃÇͨ¹ýÒ»¸öʵÀý¼òҪ˵Ã÷ÏÂ:ÊÂÎñ¹ý³Ì²ÉÓÃTimestamps(ʱ¼ä´Á(È«¾ÖʱÖÓ))±ê¼ÇÊÂÎñºÍÐа汾,ÿ¸öÊÂÎñ¿ªÊ¼Ê±¸³Ó迪ʼʱ¼ä´ÁBegin_TS,ÓÃÓÚ¶ÁÈ¡ÕýÈ·µÄÐа汾(Êý¾ÝÐÐͬÑù¾ù¾ßÓÐʱ¼ä´Á),Ðа汾Êý¾Ý½áÊøÊ±¼ä´ÁEnd_TSÒ»°ãΪÕýÎÞÇî(+¡Þ),µ±½øÐÐÊý¾Ý¸üÐÂʱ´´½¨Ðµİ汾ÐÐ,²¢½«¾ÉµÄ°æ±¾ÐÐEnd_TSÐÞ¸ÄΪÊÂÎñID
Xb(´Ë´¦·Çʱ¼ä´Á),еİ汾ÐеÄBegin_TSͬÑù±ê¼ÇΪÊÂÎñID (Xb).È»ºó»ñÈ¡ÊÂÎñµÄEnd_TS
(Ψһ),È·ÈÏ¿ÉÌá½»ºó,Ìá½»ÊÂÎñ,²¢½«Ð¾ɰ汾µÄÊÂÎñID(Xb)Ìæ»»³É»ñÈ¡µÄEnd_TS.ÖÁ´ËÍê³ÉÒ»´Î²Ù×÷.Î´Éæ¼°ÈκÎËø,ãÅËø,×èÈû.Èçͼ2-7
ͼ2-7
ÓеÄͬѧ¿´µ½ÉÏͼ¿ÉÄÜ»ØÏë,ÕâÑùXa¶ÁÈ¡µÄ°æ±¾ÐÐÊÇÕýÈ·µÄÂð?ËûΪʲô²»ÄܶÁµ½XbµÄÐÂÐÐÊý¾Ý.ÎÒÃÇÀ´¼òµ¥·ÖÎöÏÂ
Xa¿ªÊ¼Ê±·ÖÅäµÄʱ¼ä´ÁΪ25,XbΪ35,Õâ¾ÍÒâζ×ÅXbµÄ½áÊøÊ±¼ä´ÁÒ»¶¨´óÓÚ35´ËʱXa¶ÁÈ¡Êý¾Ý,ʱ¼ä´Á·¶Î§Ó¦ÎªBegin_TS-20,
End_TS-+¡Þ,¶øXaµÄBegin_TSСÓÚXbµÄBegin_TS,ËùÒÔ¶ÁÈ¡ÕýÈ·Èçͼ2-8.
2-8
ʵ¼ÊÉÏHekatonÖй涨 ²éѯµÄ¿É¼ûÖµÇø¼ä±ØÐ븲¸Ç´Ë²éѯµÄ¿ªÊ¼Ê±¼ä´Á±ÈÈçÒ»¸ö²éѯÊÂÎñµÄ¿ªÊ¼Ê±¼ä´ÁΪ30,Ëû¿É¼ûµÄÐа汾¿ÉÒÔ°üÀ¨10ÖÁ+¡Þ,20ÖÁ150,µ«²»ÄÜ¿´µ½40ÖÁ+¡Þ
Èçͼ2-9
ͼ2-9
ÓеÄͬѧ¿ÉÄÜ»áÏë,Ëæ×Å·ÃÎÊ,DMLµÄÔö¼Ó,»áÀÛ»ý´óÁ¿µÄÎÞÓÃÊý¾ÝÕ¼ÓÃÄÚ´æ,ʵ¼ÊÉϸù¾Ý²éѯ×ÔÉíµÄÊÂÎñʱ¼ä´Á,ÈçÉϵ±×î¹ÅÀϵÄÊÂÎñ¿ªÊ¼Ê±¼ä´Á´óÓÚµÈÓÚ50ʱ,¾É°æ±¾µÄÊý¾Ý¾Í¿ÉÒÔ°²È«µÄÇå³ýÊÍ·ÅÄÚ´æÁË.
Çå³ý¹¤×÷¿ÉÒÔʹ¶àÏ̲߳¢ÐÐÖ´ÐÐ,¶ÔÐÂÄÜÓ°ÏìºÜС.
´Óͼ2-6ÖпÉÒÔ¿´µ½,²¢²»ÊÇÿ¸öÊÂÎñ¶¼¿ÉÒÔ°²È«Ìá½»µÄ,ÔÚÑéÖ¤½×¶Î,Hekaton»á¸ù¾ÝÓû§É趨µÄ¸ôÀë¼¶±ð½øÐÐÑéÖ¤.HekatonΪÀÖ¹Û²¢·¢,ÌṩÈýÖÖ¸ôÀë¼¶±ðµÄÖ§³Ö·Ö±ðΪ¿ìÕÕ¸ôÀë¼¶±ð(Snapshot
Isolation),¿ÉÖØ¸´¶Á¸ôÀë¼¶±ð(Repeatable Reads Isolation)¼°ÐòÁл¯¸ôÀë¼¶±ð(Serializable),ÕâÓ봫ͳµÄ¹ØÏµÐÍÊý¾ÝÀàËÆ,
SnapshotÖÐÊÇÎÞÐèÑéÖ¤µÄ,¶ø¿ÉÖØ¸´ÔòÐèÔÚÌύǰÔÙ´ÎÑéÖ¤ÓëÊÂÎñ¿ªÊ¼Ê±µÄÊý¾ÝÊÇ·ñÒ»ÖÂ,ÈçÒ»ÖÂÔò¿ÉÌá½»,·ñÔò²»¿ÉÌá½».¶øÐòÁл¯ÖйËÃû˼Òå¶ÁÈ¡µÄÇø¼äÊý¾Ý¶¼ÐèÒ»ÖÂ,·ñÔòʧ°Ü.ÓÐͬѧ¿ÉÄÜ»áÏëÐòÁл¯Öн«Æ¥Åä¶àÉÙÊý¾Ý°¡,³É±¾ÊDz»ÊÇÌ«¸ßÁË,±ðÍüÁËÕâÊÇÔÚÄÚ´æÖÐ,ÒÀÈ»±È´«Í³µÄÐòÁл¯³É±¾ÒªµÍºÜ¶à.ÊìϤÀÖ¹Û¼¶±ðµÄͬѧ¶¼ÖªµÀ,´«Í³µÄÀÖ¹Û²¢·¢¼¶±ðÏ»عö³É±¾ÊǷdz£¸ßµÄ,¶øHekatonÖвÉÓÃÑéÖ¤µÄ·½Ê½ÓÐЧµÄ¹æ±ÜÁËÕâÏî³É±¾.Ìá½»¾ÍÊÇдÈÕÖ¾¼Ç¼±ä»¯,²¢½«Êý¾ÝÐÐÖÐÊÂÎñIDÌæ»»³É»ñÈ¡µÄʱ¼ä´Á,¶ÔÆäËûÊÂÎñ¿É¼û.
µ±È»Ìá¸ßдÈÕÖ¾,ÎÒÃǶ¼ÖªµÀ´ÅÅÌÖÕ¾¿ÊÇÆ¿¾±,Ϊ´ËHekatonÒ²ÓÐÆäÌØ¶¨µÄÓÅ»¯·½Ê½À´»º½âÕâ¸öÎÊÌâ,ÏÞÓÚÆª·ùÕâÀï¾Í²»ÔÚÐðÊö.¶øÇÒÕë¶ÔÒ»Ð©ÌØ¶¨µÄ³¡¾°ÎÒÃÇ¿ÉÒÔÑ¡ÔñÖ»±£ÁôSchema¶øÎÞÐèÊý¾Ý³Ö¾Ã»¯(ÈçÓÎÏ·µÄ³¡¾°Êý¾ÝµÈ).
×îºó,Õë¶ÔCPUÖ´ÐÐЧÂʽ«Ö´Ðмƻ®ÓɽâÊÍÐÔÓïÑÔ(Interpreted)Ìæ»»Îª»úÆ÷ÓïÑÔ(Native).
ÓÅ»¯Æ÷¿ÉÒÔ˵ÊǹØÏµÐÍÊý¾Ý¿â×ÔӵIJ¿·ÖÁË,¼òµ¥ËµÏÂSQL ServerÓÅ»¯Æ÷´¦Àí¹ý³Ì:Ò»ÌõÓï¾ä½»¸øÓÅ»¯Æ÷»á½øÐа󶨽âÎö,Éú³É½âÎöÊ÷,È»ºó½øÐÐÓïÒå·ÖÎöÉú³ÉÂß¼Ö´Ðмƻ®,×îºóÓÅ»¯Æ÷ÔÙΪÂß¼Ö´Ðмƻ®»ùÓڳɱ¾Éú³ÉÎïÀíµÄÖ´Ðмƻ®.¶øHekatonÖÐ,Èç¹ûÎÒÃÇÑ¡ÔñNative·½Ê½Ö´ÐÐ(½«ËùÖ´ÐÐÓï¾äͨ¹ý´æ´¢¹ý³ÌÌØÊâ±àÒë)£¬ÔÚÉú³ÉÂß¼Ö´Ðмƻ®Ö®ºó½«»á¸ù¾Ý²»Í¬µÄËã·¨,³É±¾Ô¤¹ÀÉú³É²»Í¬µÄÎïÀíÖ´Ðмƻ®,È»ºó½«ÎïÀíÖ´Ðмƻ®×ªÒë³ÉCÓïÑÔ´úÂëÔÙͨ¹ý±àÒëÆ÷½«Æä±àÒë³ÉDLL¼´»úÆ÷´úÂë.Èçͼ2-10
ͼ2-10
Ôø¾Î¢²©ÉÏÓÐÅóÓÑÎÊΪʲôMysqlÖØ¹¹ÓÅ»¯Æ÷ʱΪʲôҪ½«parsing, optimizing, executionÈý¸öÄ£¿é·Ö¿ª¶ø²»ÊÇ»ìÔÚÒ»ÆðÁË,ÎÒÏëÕâÀï¿ÉÄܾÍÕÒµ½´ð°¸ÁË,Ò»¸öÓÅÐãRDBMSËü×ÔÉíµÄ½¡×³ÊǶàÃ´ÖØÒª.
ÔÚNativeÏÂ,ËùÓеÄÖ´Ðж¼ÊÇ¡±Goto¡±,Ö±½Ó¶ÁÈ¡Êý¾Ý,ÔÙÒ²²»ÓÃÒ»¸öÒ»¸öµÄfunctionµÄµ÷ÓÃ,¼«´óÌáÉýCPUµÄ¹¤×÷ЧÂÊ.ÓÐÈË¿ÉÄÜ»áÎÊÕâÑùÿ´Î¶¼±àÒ뽫ÊǷdz£´óµÄ¹¤×÷³É±¾,ʵ¼ÊÉÏHekaton½«Ö¸¶¨²éѯ(´æ´¢¹ý³Ì)±àÒë³ÉDLLÎļþ,Ö»ÊÇÔÚµÚÒ»´Î½«ÆäÔØÈëÄÚ´æ¾Í¿ÉÒÔÁË.¶ÔÓÚ¼´Ï¯²éѯÊDz»¿ÉÒÔµÄ.
HekatonÔÚ»úÆ÷´úÂëÏÂÖ´ÐÐЧÂÊ´ó·ùÌáÉý,ÒÔÏÂÊÇ΢Èí¸ø³öµÄ²âÊÔÊý¾Ý
a. InterpretedÓëNativeµÄ¶Ô±È,ÆäÖзÖΪÊÇ·ñΪÄÚ´æÓÅ»¯±í,²éѯµ¥ÌõÊý¾ÝËùÏûºÄµÄCPUÖ¸Áî
Èçͼ2-11
ͼ2-11
b.Ëæ»ú²éÕÒ1000ÍòÊý¾ÝÆÕͨ±íÓëHekatonÄÚ´æÓÅ»¯±í²éѯʱ¼ä¶Ô±Èͼ2-12
ͼ2-12
c. ÆÕͨ±íÓëHekatonÄÚ´æÓÅ»¯±íÄÚ´æÖÐËæ»ú¸üÐÂÊý¾Ý¶Ô±È,´Ëʱ²»Ð´ÈÕÖ¾Èçͼ2-13
ͼ2-13
HekatonÓ¦Óð¸Àý
Hekaton£¬¹ÅÏ£À°ÓïÖбíʾ°Ù±¶,ËäȻĿǰ»¹Î´´ïµ½Ô¸¾°,ÎÒÏëÕâ¸ö³öÉ«µÄÍŶÓÒ»¶¨Äܹ»×öµ½.
SQL ServerÓÐÁËÕâ¸öÐÂÀûÆ÷,ÔÚÓ¦¶ÔÐÔÄÜÎÊÌâÉϸü¼Ó³öÉ«.ÔÚ΢ÈíµÄ¹Ù·½ÍøÕ¾ÉÏÓдóÁ¿°¸Àý,ÕâÀïÎÒÃÇÁоټ¸¸ö.
Bwin,Å·ÖÞ×î´óµÄÔÚÏß²©²Ê¹«Ë¾,²ÉÓÃHekatonºó,ÏßÉÏÿÃëÅú´¦ÀíÓÉ15000ÌáÉýµ½250000.
EdgeNet,¹è¹ÈÖøÃûµÄÊý¾Ý·þÎñÉÌ,²ÉÓÃHekatonºó,ÏßÉÏÈë¿âÊý¾ÝÁ¿ÓÉ7450/sÌáÉýµ½126665/s
¾ùÓɽü17±¶µÄËÙ¶ÈÌáÉýÈçͼ3-1
ͼ3-1
¶ø½«Ò׳µµÄ»ÝÂò³µµÄ·ÃÎÊÁ¿ÔÚHekatonÄ£ÄâÔËÐÐʱ,¸÷ÏîÐÔÄÜÖ¸±ê¶¼±íÏֵĺܵ¶¨.
Èçͼ3-2

ͼ3-2
Hekaton²»½öΪÎÒÃǽâ¾öÁ˲»ÉÙ³¡¾°ÏµÄÐÔÄÜÎÊÌâ,ÎÒÏëÃæ¶ÔÌØ¶¨³¡¾°ÖеÄһЩ¼¬ÊÖÎÊÌâÒ²ÓÐÒ»¶¨µÄ°ïÖú.±ÈÈçµçÉÌÈÈÖÔµÄÃëɱ/ÇÀ¹º.ÕâÀï±ÊÕ߾Ͳ»ÔÚÐðÊöÒµÄÚÅóÓÑÑо¿µÄÅŶÓÂÛ,ÅúÁ¿Ìá½»µÈµÈ°ì·¨.ʵ¼ÊÉϼÆËã»úÔÚµ±ÏÂÆÕ±éÓ¦Óö¼ÊÇÄ£ÄâÈýά¿Õ¼äÄÚµÄÈËΪ»î¶¯,ÊÔÏëÏÂ,ÇÀ¹ºµÄ¹ý³ÌÖÕ¾¿Óгɹ¦»òÊÇʧ°Ü,¾ÍºÃÏñÄãÔÚÇÀ¹ºÈÈÏú²úƷʱ±»ÉíÊֽý¡µÄ´óÂèÍÆµ½Ò»±ßÄãûÇÀµ½Ò»Ñù,Õâ²»ÕýºÃ·ûºÏHekatonÖеÄÊÂÎñ»úÖÆ?¡ÎÒÃÇÔÚÉè¼ÆÍøÉϲúÆ·»î¶¯µÄʱºòÊÇ·ñ¸ÃÏëÏëÄ£Äâµ½ÏÖʵÖÐÊÇʲôÑù×ÓµÄ?¶Ô´Ë,ÎÒÈÏΪÎÒÃÇÐèÒªµÄÊǿɿØ,¶ø²»ÊÇ¿ØÖÆ.
|