你的位置:首页 > 软件开发 > 数据库 > SQL Server 内存数据库原理解析

SQL Server 内存数据库原理解析

发布时间:2015-12-24 11:02:39
前言关系型数据库发展至今,细节上以做足文章,在寻求自身突破发展的过程中,内存与分布式数据库是当下最流行的主题,这与性能及扩展性在大数据时代的需求交相辉映.SQL Server作为传统的数据库也在最新发布版本SQL Server 2014中提供了新利器 SQL Server In- ...

前言

关系型数据库发展至今,细节上以做足文章,在寻求自身突破发展的过程中,内存与分布式数据库是当下最流行的主题,这与性能及扩展性在大数据时代的需求交相辉映.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中,但即便如此数据库的性能还是被自身的一些架构和处理方式所约束着. 就着前面的假设,我们要把事务处理能力提升100倍.假设我们现在的处理能力是100 TPS,而这时每个事务所以得平均CPU指令为100万个,以此提升10倍1000 TPS,每个事务的CPU指令就需降为10万个,而再提升10倍10000 TPS每个事务的CPU指令就需降为1万个,这在现有的数据库系统中是不可能实现的,所以我们依旧需要新的处理方式.

 

传统数据库引擎面临的问题

有的朋友可能会说把所有数据都放入内存中就是内存数据库,就不存在短板了,但即便如此我们仍面临如下主要问题:

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的同时影响了并发吞吐.

 SQL Server 内存数据库原理解析

                           图1-2

为了解决此问题,已故的业界大神,图灵奖的获得者Jim Gray提出了两阶段锁概念 (Two-Phase Locking),合理地解决了并发一致性问题,并被绝大多数数据库系统应用并改进(如SQL Server中数据不同粒度下并发兼容情形引入的意向锁).

本例中当Q1读取A时,对A加排他锁,当Q2试图读取时就会被阻塞,需等待Q1的事务完成后释放锁资源后才能继续读取.如图1-3

 SQL Server 内存数据库原理解析

SQL Server  Hekaton的应对方式

SQL Server Hekaton是一个基于内存优化的高性能的OLTP数据库引擎,且数据是可持久化的,他完全集成于SQL Server内(可与传统引擎,基于列存储引擎混合透明使用 如图2-1),且是基于现代多核CPU架构设计.

 SQL Server 内存数据库原理解析mvcAQ4leDjzDO7b0L1y40K1bt23btg0YMMDV1VWajqSP0BtGCux08NJMmEFbCr/GHQJJXyo4jgOTS98Yxu8k0gcATJ48GcOwd955p7KyUpqIpI/QD57nGobSNHco35RFy80ANeQ2/XYmk35tba2RqvkdUvqDBg3CMMzX11c+MTIyEg7II5+Yk5ODYRiGYWjANYTuCAJPUY+R6w2rxU4rfZIEJpS+8YzfIaV/4MABV1fXmzdvyicyDHPixAm1jlpVVVWurq7r1q2DBwyBaBVp8GTpUje/bjpOAZ1X+vKUTRNI36g5WvBU70jSRyCMB89xJEkSj7H01ZIIUXgHFlNKX6VSweiiSvbWQyR9BMLwCIJAUxSu1+thO0fROkiD7osDJP32AUP5Up0Db3xvZcvIj1fLE+F0eLYj6SMed+DgyfDCMLtitBYTAHMTYUBZCivr/vIsgKTfbuCNFp6EhHHGZoAnPJI+4nFHFEWGYWiaZiwVttXCaiu6LNi4OE3TJEmQJBxdjiBJkqYohqbhDK0CAMjKyoLSLy8vhz9p5wC+ZfCbb77BMGz//n0AgDrY3NruFld5PyySJOG2mCZHhKRIkqJaKHJanpOkqA44nj4CYSRECAAWVCRM8gvwPM8ytHQbYBia53n5PrRcAAA5d+9C6dfU1gKz/3qGKxCYGn7w4EEAAKyGG/AZi6Io+GtLpyL8Bw9fZ64P0r2/CfC7IOkjEAggiqKkBo7lWJYRBKFNa7jbKP3a2loj7aQZgdI/dOgQAIBlmLY2dLcQtSMJQhpATA0R3ozhQTEEcLVI+giERQOrfoKR4XleLebD83yb9vPxkb4oijRFGaSOj+M4w7R0f5XfjNsPXKdJpc93QEz5+yAQmgiCwLKsFFtvQ6S+TaVhE48iPKimL0cufQAAy7IGkT5JEq3+znxjZb+DSR/HcVtb27feeuu11177Twfhtdde69+/v52dHerhhTAjDXU94+m+mYKkL0dN+jDjq53SJ0myucCOHFEU9Y/tm1H6mZmZcFyE559//sUOQq9eveA+5+fnm+ZXQiA0kUufkdXEkfRNiZr0AXx/MqlPPi1M3SEJgmUYHbfe8LTXsaQPc3h79+5dXV1NdxAKCgq6devWpUuXgoIC0/xKCIQm8vCOyQrD0G2VflFREYZhvXr10qX22uHQlD4AgGNZGKXRQ/0wY0f3HTBIkAeuyqQ1/VdeeYXR+eZmdqqqqh4T6bM8e/GB39WiKHPvCEI7HMdxLMuZSv1wQ7pLnyCImzdvhoWFYRjWo0ePa9euZWZmdqArXRe0Sh92R9DD+ARBcBzbph0QRbH93oerMrX0CYIwzRbbT1lZ2eMgfRVddzrbyyl2wap4+6iCiyZKC0e0BdEc6L57ZWVlo0eP7t69O4ZhTzzxxLPPPjt9+vQOdKXrApS+l5eX2nQ9gjw4jtN0mx+kgCGC+3A9SPrN8jhIv4qs8M7c4xSzwEVp6xy1yCXWJujeaZqjzb1fiA6Gp6cn1kjXrl0vXLhg7j0yMNOmTcMwzMfHR/MjeZBH9jKCZiFJUg/jQ9pZ2YcrQdJvlk4v/Yd1uf+kb1wZs0ChtHONsneNsndW2jhFLzh5+4CKqTP33iE6EizLjh8/Hkr/559/1ltqFoiHh8ecOXP69euHYdjIkSPnzZsXFxcnn6Ehk0cH3cN+vJJ89aCdlX24EiT9Zunc0r9TdWt7yiqn6EfGh0WhtF0ZbX0gY0cZUWLufURoQWvXKnlYpp0T9d6xqKgoDMO6d++emZlpwO9rdoKCgjAZb7/9dlFRkdo8MMiDy0al1lLBJwgcxxmabs+PDNqXyQPXgKTfLJ1Y+mmlCRuv/ekUtcBVaecaZa+IsndtUL+dq9JeEWW3Msp6d9ravLp75t5TxCNEQzTltQq8B+i3h1ZWVn/88Ydhv7Ul8Ntvv0nSP3HihNZ5WJZtQfpkY2DHIP099T4N4OJI+s3SWaUf+zBizdU/nC4vVChlFfxHlf2G28AK5YKtSc5Zlenm3l8EANJ1bopkTQaqX4+dLCwsLC8vN/h3NzuZmZmvvvoqhmHffPNNs+PkiCLdOCaP1sZbgiAYhjFInoTeQR64OJJ+s3Q+6bM8czHXf1W8vbNyUUPVXuZ99T+V9iuVC9ddXXa1UMnwnSr9rsPB8zxrup5ZNNsO73dWnJycnnnmmejo6BbmaTmTh253YEdtW0j6hqeTSZ9gcb873s5xi5yVNvJKfQtFobRbrvx1S5JTGV5s7t1/fDFL5yyWYTplHyu9KSgo2L17d8vziKLIsQxJNnbXanxllQEDO3L0CPLABZH0m6UzSb+SKD9ya69TzEIXpW2rrn8U4Ymy/ivJNbvqpgFrKIi2wmuMf/koDmPAonFfQdLXA1EUGZqWB3lwgsBVKrYdGTstbEsK8ugY7YELIuk3S6eRflF9vkf6Jpioo2hF91KI325FlPU/aZuK6tG4Q2ZGXfosa4CRlLWhtiEkff3gBZ6SD7yM4xRFGana9OgpsBPU9AVBSExMXL9+/YgRI4YNGzZkyJAhQ4YMHTp0+PDhGzduzM7Obnnx27dvr169evjw4R9//PGQIUOGDRs2adKkgICANoUpO4f0c6oyt6e4rYxe4KK0ldpsFVF26tH8KHvXKDvYtOuitFsRNf9wxu4qssLcu49oKn1jhtobao5I+u2GbTrwsmDMEdrbFOSBi1ic9AVBOHXq1KRJk7Dm6dmz5759+5pbg7e393PPPad1wUmTJumeRNwJpJ9edm1T0gqnqIWKxtRMRZPqvJZ/OyttnWIWns4+jDMqc+8+AoCm0udYlm/6Xj0DwqGavoEQBIGmKRxX4ThujMCOnDZl8sBFLE76N27ckBw9aNCg2bNnHzhwoLS0tLi4+Ny5cz/99NMzzzwDP928ebPm4tu2bZNuDPPmzbt69WpRUdHhw4f79+8Pp48ePVrHoV87tvRFEPcwcs3VP5yUC6VKvSLKThbQt5P9F35k76xc5BJre/G+HyegC96clJWV+fr6VlVVgUbpSx9B7wP4aK/zc71OoJi+4eB5jiQI4wV2JNrUewMuYnHSz8zM7Nev3wcffODt7a0159fPzw/qu3v37snJyfKPrl+/3q1bNzi+a0REhPyj3NzcTz75BC74+++/67LPJpZ+LVVtqFXxAh+We27VFZiaCeM2dgqlXWMLrZ2iIZJj5wr/HWWvUNo5Ry10j3eIfRhhkNO0rKzs8OHDU6ZMsbOzW7JkyeLFiydPnrx8+fLO+jIyQRCcnZ0dHBwM8gUvX76MYVhiYiJcMwDgYUGBq6vrN19/7eDgYGtj89NPPyUkJIiiaOLsnYKCgnnz5kVGRkpTIiIiZs6cuWTJklmzZm3dupWiKM2l/vjjD2tr6xYCU+Xl5dOnT/f09Gz5Z8nLy7Oxsfn++++XLFlib29/4cIFVqMe7eXlNWvWrCVLlnz33Xeenp46Ho7IyMh58+YtXrx40aJFTk5O9+/fV5shJSVl3rx5S5YsmT9/voODg6Sm06dPL1y4ULMeKYoix7Emu3F27IZcnudra2tVqpZiC1OnToX6VigU0kRRFK2srOD0TZs2aS6VmpoKP+3du3dSUlKr+2xK6V8riv0rRRH3MKL1WVuDYPGzOUddYhtSMxsUHyVJ364x1NPQqAtD/CuV1uuvOqaVJrZ/BwAAkZGR//d//7dkyRJ/f/+SkpKampqKigp/f39PT89ONuKuRHZ29nvvvYdhWEpKSvvXFhMTI19VcnLyO++88/XXX/v5+VVXVxcVFYWGhubk5DRU9g1faFZb40FFRcUXX3xha2srXcVnzpwZNmzY+fPna2pqEhIShjP38m0AACAASURBVAwZ8ueff2p+nU8//RTDsMDAwOa+b0BAAIZhWpeVEARh8+bNv/3226VLl2pqagoKCkJCQrKzs6X9FARh2bJlo0aNCgsLq6mpCQ0NHTVqVMvrlPD19T106FBlZWVeXp61tfXnn39eX18vfRocHPz+++9v3769pqYmJyfH1tZ29OjRDx8+BABUVVV99913U6dO1Wo2k6W96RjkgTNbnPR1ITAwEOp74cKF0sTo6OinnnoKw7A+ffo8ePBAcylRFOfOnQsX3Lt3b6tbMY30RVGMzg9bFbd4hXK+2xX78NyA9oRWaqkqn6x/nGIWujQYvyFuoxbGaWi2lRJ1lNZ/JSnuVN0yyDc6c+bMhAkTlEqlQdbWUVi2bJmbm9tHH300f/789q8tMTFRkr4gCL/88guGYffv3QUACDwvQs2JonQHlXzNcxwAgJfaY1kWACA23hvEph7XXEpssZV44cKF77//vnQJkyQ5YMCALVu2SDPs3bsXw7C6OvXR+iZMmPDUU0/9+uuv1dVaHmdLS0tdXFwwDFu0aFELWxdFUfPFpaWlpZL0/fz83nnnHfnAOOnp6S+++GJbT8Xy8vIePXqcPXsW/llWVjZw4MADBw7I5/nkk08k+ZSUlPTu3Xv9+vVt2orB0aW7FpyzQ0o/IiJCU/rHjh3TrP6rAU9KDMMWL17c6k3YBNJneTb4/hmXGBsn5UKF0s4lysYldpH/HR+S1edXKqov2Hdjq1P0AoXSVvEocC9FdRpq/fJovkuU7Z/K+XvTNj6szzPIN0pJSendu/elS5d0mbm2tvbmzZupqakZGRk1NTXqX6eoCMdxURRv3LiRlpYmf2nl/fv3U1NTb95s0oFAEISCggI45datW6mpqenp6TiOa24Xx/HMzEw4g/zBHMdxeKyLioquX79+69Ytmm4YZTovLy8tLS0tLS0vT8sPdfPmzXfffTc3N3f9+vV9+vTJzc2Vf1paWgq3kpOTAzdaWVmptob4+HgbG5ulS5c6ODhs3Ljx6NGjkvRZlp0wYQKGYRXl5fBPln2UpVeQn19ZUcFzHMuyHMsyDFNYWEiSJHzpCsdxhQ8flpWVcSwLACAJIiMj49q1a0lJSQX5+QAAnuM4lsVxHNaTcBy/fv16SkpKRkaGWmDkwYMH77777sWLF6UpJEm+++67e/bskabs2rVrxowZmg9zI0eOHDVq1PTp0/fv36/56/n6+m7fvv0///mP/HLWEekEEEXx559/XrVqldoMM2fOXLNmTZvWSZLkwIEDT548Cf88efLk6NGjpTNB2ufx48dLN6GDBw9+9NFHsA3GjLRa2YezdUjp7969G7rb2dkZTuF5HtaGMAxbvXp1cwueP3/+2WefxTCsb9++JSWtjCJpbOnjbP2p24dWRi9waegia6eIsnNR2jjFLDya+W8N1bYT6F717V1pq1dGLZASdVwbh1FTKO1clXZSZF+q7CuUtiuirb0ydleSBhsvxdXV1crKSpc5Q0NDP/zww5kzZyoUinnz5n3wwQdnzpyRzzB06NBPPvnkxx9/XLBggYuLy+jRo728vIqKiuzt7b/77juFQjFr1ixra2vpZlBeXv7ss88uXbp00aJFkydPVigUdnZ2EydOPHLkiLROhmG8vLw+++wzuAbY0iBFqH18fJ566il7e/vp06cvX7581apV1dXVoiiuWbOmT58+K1euXLly5YgRI5YsWaIWfnR0dPzwww8BALdv39aMLn777bcffPDB8uXLv/76a4VC4eDg8Nlnn8ntuX///hEjRuzatauoqOjOnTtr1qyBZ2lqaiqcYe3atfITG7bdwWEyFy1aZGVlJaX0XLx48dVXX71y5Qqcs6ioaNiwYXCMsAsXLnz11Vfjx49XKBTLly+X/zIpKSlPPfXUhg0bfvjhh1mzZikUil9++WXSpEnyndyxY8f48ePVgtTbtm377LPPYP09MDBw2bJlWh+yR4wY8d133wUGBg4ePFgeNgEAlJSU/PDDDzdv3hwwYEBbH5JIkszLy4M3J5VK9cUXX2iOhrZs2bLvv/++Tas9duzY559/Lt2YXVxcZs2apTZPXFzcgAED7t69C/+sra0dOnSodJ8wF6IosvAhr5NJn2VZmIrTtWtXKUpTV1f3yiuvYBj28ssvx8fHN7dsZWXl4MGD4b3h3r1WhpA0qvSryIpDN3atiLZ2Udo2tLXCOrjSXqG0WxmzYF/6lmLVQx3Xll6evDlppWR8jT63TZJ24P3ARWm7MnrB6WwvwnCpmRzHffrppxs2bGh1Tm9v7y+++CIkJESqTkZFRY0bN07e0/2jjz7q0qXLrl274J937twZM2bM66+/bmVlBS9IQRCsra0lU5SVlXXt2rVnz55Hjx6VTjM/P7+ePXtKtxMcx/fs2RMcHCzVRoODg4cMGXLnzh0AwJEjRzAMGzx4sHQxcxxnbW39wgsvSEOo37x586WXXrK2tpb2s6qqatCgQf/++y/cpQkTJgwfPlx+V/j666/hw6VUEzx37tzAgQOvX78OALh8+XLv3r3VUhLWr18vj+nX1dX9+uuvGIbNnj1brTnK29v7iSeeyMrKgn86OztjGCaFGnx9ffv27QsjHkePHj116pT0RJWZmfnxxx/DG15KSgqGYW+++WZQUJB0RHbv3v3SSy9dvXoV/vnLL79ojY+///77//3vfxUKhbe3d0VFQ8eO7Ozsa9euSYGXESNGfPXVVwCAt99+e9u2bfLFN2/ebGNjI4piv3792ir9wsLCO3fuwK3cvHmzW7dumo+Ybm5uury2t7q6OiAgICAg4Lfffhs1apR0uwUADB48ePbs2WrzZ2dnd+nSRX5TnDNnjpOTU5v23xi0nMkD5+l40t+2bdsTTzyBYdjQoUOlZ67a2trnn38ew7D3339frSohh+d5+KqHJ598UmuVRI7xpF9Yn7sndf0KpbXiUfhFrmk7hdJuZbT1zhT3BzV3Wl3blaLLaxP+cFJKo2baNdX9ozT8xuq/vbNykSLWJvjeGcOOpFZbW4th2M6dO1uerbKy8uOPPz59+rTa9PDw8MGDB0sx2bfffnvy5MnyGZYsWaIWMr506dILL7wAHV1WVoZh2PLly9VW6+bmNm3aNM0sDlEUi4uL8/Ly+vTps27dOgDA4cOHMQyTD6oVHBz85JNPShVnyLFjx/r37y/FcI4fPy5vRvLy8sIwLDw8XJp/7NixgwYNUtv6559//ssvvwAAbGxsNGUXFxen2Sbs6+v76aef/r//9//c3d2libm5uW+99RZ8jV9xcfHw4cM///zzcePGwSt87ty5mrVU+FsVFxePGTPmu+++A405Dpqxlzlz5ixevBgAQFFUv3795OF7AEBBQcGcOXPee++9//3vf2+++ab81SJfffVVz549JdWOGDHiyy+/BAB4enp+9tln0hVaXFw8efJkmKTUt2/fNkn/9u3bSqVSMkBycrLasYO4u7t36dKl1fSB0tLSPXv27NmzZ8mSJbNnz5a/+atv376a0r979y6GYQEBAdIUOzu7jz/+WPf9Nx4teB/O0MGkn5qaCmv0GIaFhoZK02tra1988UUMw4YPH97yGuC7Ls0o/ezKm1sTXVYorRsjLWrSf5RjszJqweZrKzPKm80GYXk2PDdg1ZXFTspFUidbRZPWWnnfq4ZhNZ2UC93iFkcXhBnwS0GgGrT2n5Bz/vz5l156STO8Vlpa+txzz0nPyG+99dacOXPkM/z555+9evWST4mPj8cw7Nq1a6BR+mqvrgYAnDhxAsOwwsJC+CdBEN7e3q6urpMmTRo3btyCBQu6detmb28PADh06BCGYfLDPW/evFdeeWXz5s17ZNjZ2WEYBm9aoiiOHDkSRrTgYAb5+fn9+vWbMWOGtJLRo0ePGTNGba+++OKLUaNGAQB69Oih2QoVGxurNRGIZdkzZ868/vrrP/30kxRQ/vHHH8eOHQsAuHDhwsiRIy9fvjxo0KDMzMyampp+/frJ3/B39uzZdevW/fDDD6NGjVqwYEG/fv0+//xz0Ch9zUdkV1fXZ599FgBQX1+PYdjff/8tfcTz/Ndffz1s2LCcnBxRFPfs2dO9e/djx45JX3nKlCnSzJL06+rqPvnkEyk1c82aNT/++CP8d5ukn5ycfPTo0bKyMvkUDMNiYmI0v0L//v3blEebkZExbty4gwcPSjumdh4CADIzM7t37y6/x/z+++9PP/207lsxHo9adDXiPHCGjiT9q1evvvbaa9D4q1atkqeUdQjpi6KYWBSz5sofK5WP3lcl6bihnq60awz12Lsq7ZyUC9cmLE0oitJcG8US/jk+LnGLnJQ2MCjk2hi7d1XKRllQNv5XaeeqtF+pXLDu6rKUkqsG+Uaa/Pnnn3Pnzm15nn///RfDMM1Ejpqami5dukh9rd966y21Gpajo2OvXr3kjbfy1MbmpH/s2LGnnnoK3mNu3LgxduzY1atXX7hwITQ0FGbdvfrqq7a2tqBR+nKVDB48eNSoUUFBQQEyQkJCYmNjYSgjLS3t6aefHjt27OJGHBwchg4d2qNHDxi9AQCMHj0a+l3OF198AT344osvuri4qH0Kb2bNZX9mZWW98sorUmzTy8urT58+1dXV06ZN+/nnn3meHzFixLZt2yIiIvr37w/vdhUVFf/73/8cHBwCAwNDQkJgOGvSpEnDhg0DzUtfoVC8/PLLAACSJJ955pkdO3ZIH0VHR/fp0weuB3LmzJkXX3zxr7/+Onr06JNPPhkVFSV9JEkfAODq6vruu+8KglBeXv7ee+9JERLdpZ+cnLx7926167eysnLIkCFqzUIAgCVLltjZ2emyWjknT57s06cPDMfZ2trOnDlTbYZLly4NHz5cfqo4ODj069evrRsyEtD7mu268NMOI33pPQbykKWE7tKfMmWKGaUfmRukiLdxVtq4KhtFrDYATtMhcRRKe+eoRaviF0fkBfKyVM5qstIn61/n2IWNjcD2smi+nUJzXB2lvavSboXSeluSIrvypkG+jlauXbv27rvvxsbGtjBPWlram2++efOm+m7cunVrwIABGRkZ8E/9pK/Zwcfd3X3GjBlwKalWLuf555+X1/RLS0ulj1auXDl16tQWvouNjc1rr71WVlaGy8bRzc3N7dq1q+Sa5qQ/btw4AMCvv/66YMECtU/Dw8NbTvkfOXLk+PHj4b+Lior69OmzePHiL774Asbo3d3dp06dOmfOnHnz5sF57OzsPvjgA7WVjB49Gl4vUPqasZG5c+dKb8KaNm2aPDdmx44dGIapxcqvXbv2/fffYxj29ddfy9Nd5NKvqqp644039u7d++eff37++eeSiXSUvoeHx+zZs7U2yM2cOXPp0qXyKSzLjh071sPDo9XVqhESEtK9e3cYaTx58uQnn3yilga2YcOGKVOmyOud8+fPbznl1MQ0jN7RcaX/4MGD4cOHt9DxSnfpf/vtt+YN71wrjlt3damTssmYl80PfmnnqrRzUdoo4mwCco5RHAkAKFY93H9jm1PMAkXjGGpNAjhR9gqlNMyONMVupXL+ntT1+XWtfOv2s3nz5p49ewYFBTU3gyiKs2bN+vXXX9Wm//HHH7CiCv/UQ/pdu3YdP368PAvz/v378ryggQMHSh6EeHh4YBi2bNkyoE36aWlpgwcPVgsaEAQBo9K5ubl9+/aVR9glbGxs3nvvPfh40Zz0YUwmODh42LBh8iozz/NQnc1Jn6bpKVOmyOM2X331FWyChg3Ily5d6t69e7du3aT+UD///PPgwYPlKwkPD+/Rowe88UDpz5s3Ty7xK1euDBgwQGrIdXNzmz59uvTp/fv333rrLc0hsLy9vTEMmzFjRnPSBwDs3LnzhRdeeOedd4KDg6WJcunjOB4WFiY/EJADBw4MGDCgueGzvL29n332WXllYt++fR9++GFxccPbIB48eBAZGdlqo64gCDNmzJg3bx4804qKivr27StPT8jPz3/nnXfkjVIMw4wePbqFAcFMz6Ph8zqi9NPT04cMGQKN7+bmprUztyT9gQMHttCbl6bpkSNHwswfMzbkZlZc35TotDJqgVQllwZFaJpc/0jiLkpb55hFJ7IOppUk7rm+fmXjC82bjqYAk3/sm8aO7BVK2xVR1ocydlYSZa3vnCHw8fGZNGnSzJkzDxw4cPXq1YSEhKioqBUrVlhbW0Mjl5aWzp07d8yYMT4+PgkJCSdOnBg3btzcuXPlgf6ePXvK48IAgEWLFmEYJpf+pUuXsMbhCuDxeuutt6ysrI4cOZKQkKBQKD799FPYyAmJior68MMPN27cmJCQEBQU9OWXX0Jdwgzxf/75B8MwyRGQM2fOjB49evny5QkJCVeuXHFwcPjmm2+kCjWGYTk5OZq/wJUrVzAMg8lIH374oWZD7gcffPDRRx/Bf3t4eIwdO3bHjh3wp/jhhx969eoltVUwDLNs2bJffvklIiIiISHh8OHDEydOdHZ2llv17Nmz8h4qBEH897//xTBMyjt88ODBkCFDlixZEh8fHxsbO3369IkTJ3br1m3IkCEAgLS0NAzDBg0a9Msvv5w7dy4hIWHhwoWfffaZ/M595cqVvn37SjErAMDp06f79OmzdOnS6OjohIQET09PKysrOzu7oKCg8ePHf/TRR5Kd3333XRhHglRUVLz99tvTpk2T/yBPP/20FN8PCgp6/fXX1cZCOHLkSO/evT09Pa9fv57QSFJSEisbiWHHjh0DBw7ctm1bQkLCokWLBg4cKG9Rnz9//rfffqsp/cjIyOnTpx84cCAhISEkJOTHH38cPny4vF9IYmLi0KFD4dAXBw4c+Pjjj93c3OTnYWho6BtvvCG/c1sCgiCoRXjgdEuXfkpKyjvvvAONDwOvWqmpqenevTvcRFpaWnOzZWVlvfHGGxiGPfHEE2aUPgAgt/bezqTVK6KsFfLXFj4KxEv59fLGWFvnKBtFtK1LlI2UeSmL3siDRY9S9V2UNk7RC07ePqhi1PtJGhWGYYKCgpycnNzd3d3d3d3c3BwdHb29veX37H///dfZ2dnd3d3FxUWzj/T27dvVQrQXL15cv369/GLLzc11dXWFYWsY3jl8+HBUVBRc7fLly+WRZcjdu3fXrVvn7u7u6uq6fv36+vr6bdu2wRpxSkqKq6urZqUhKysLfhE3N7dly5ZFR0fD6+f48ePy6rYcnucPHjx47tw5AMDBgwfV+nMCADw9PaWmQgDA1atXV6xYAX+KEydOZGVlSd9LFMWQkJA//vhj1apV7u7uzs7Omk9RRUVFrq6u8irw8ePH1ZIjy8vLd+zY4ebm5ubmtmLFitLSUl9fX5hpCmv6MTExZ8+eVSgU7u7uS5cuvXHjhtpWvv3224kTJ6r9mGvXrnVzc3N3d1coFFKAvr6+3tHREX59AMC+ffvkt14AQHJyshTHg2zdutXf3x/+29raWjOMfuzYMYVCsWnTJncZGzZsUDte58+fh7/k0qVLb9161Mm8srJy4MCBx48fBxpUVlbu2bMHHmJXV9eTJ09q1iwfPHjg6Ojo7u7u5OSklo/PMMzgwYNbsJMZ6XjSDw8Pl+L4a9eubWFOHMcHDRoEbb5169bmZoNJzRiGWVlZaR0ZSo6xO2cVqx56pG155P1m32ciL43jo7UQDnp0P7BzVi5yiVkUdP80xxt3fFdLAEpfblKEjsA8fXnOpVYyMjJef/11eQ6PMSgsLHz77bflKfAG4ciRIx9++GHLg3rpgSiKTk5OH3zwAUwKsDREUYS6h/aHEy1X+qdPn4bD4sszOlrgwIED8PbQwhBL69atg/PACk7LmGAYhlqq+mjmvyubDJwgHy3HThaXV8vlV0vH1OyEZe+kXLgqbnFUQaggPhZvuG6uIRfRKlD6Lb/1GxIVFTVixAi1jguGpaKi4ty5cwa38/Xr1y9fvmzYdQIAAgMDP/30U93f0mF65GPywCkWKn0PDw9YJX/ppZfkHSVa4MqVKzDC8/bbb8sHXZIoKyt7/fXXMQzr1auXZj6v1vlNMOAayRJns486xyxqSOlp2pdKEWXvqtRer5fSdZpm5dvBUM9K5cJ1Vx2TS4x4cVoapaWlGIZZVGNaRwEmuWuGwrRSV1dncCN3XDrEryEFeeCfFid9URTd3NxgffyNN95o9ZFTguO4b775Bi6odfgdqZqvmTeiFZMNrcwLfNiDAEWcnZPSRvGog5Xk+oYq/6Ox0pSPkjIVj8L3dq7KhpHxVyitt15zvl2Z0fq2OxEsyyYlJWl9BwOiZXAcT0pKaqErO6JDIw28DP+0OOn//fffUM3vvfdeYmIiz/Oq5lHrXR0eHt6zZ0+Ykbl582b5GLCenp7wlVs9evRotQkXYtKXqIggvvDymiu/N772RDO801zEv8nwagql7Qrl/N2pawuMn5qJQFga169fN2roqeMCgzzw3xYnfRiBgU2yvXv37t4imr20AgMDX3jhBbiG119//a+//tq7d++7774Lp7z88svy1OCWMf3rEm+UJW9KXOGkXOja5JW2dtrCO413AqU8Ucd2RZT1gRs7yohWBhBFIDofHMeNHTt21KhRreZoPJ5IPWAsTvrffPPNe++999577w0YMOCt1tA6tldMTMznn3+OafDZZ5/BxGcdMcs7cnOqb29PclsZZd0Y55Fn4zTtb9VkMDU7F6XNyugFx7M8VQx6SEc8jvj5+cGGQF9fX3PviyUi5TpbnPQNAs/zgYGBG2ToXsGXMNeL0UtUD/elb1kRLR8nWX0YTldlk1HVnJU2zjGLAu+eoDlUx0E8jtTV1Q0bNgxW7wYNGqT59i6EROeUvkEwl/QBANVk5ZGbe1c2jrav0Jav2Vjrt1upXLgqzl6ZH2KyF3IiEJaGlKYBUeuYhpCDpN8sZpQ+AIBkCb9sb6cY6b1a6i26CqW9q9JupXLB2qtLk4p1zXFCIDof1dXVc+bMGTx4cNeuXbt16zZs2LCFCxeiZKTmQNJvFvNKHwDA8ezF+2cVcbaNKT1q0rdbqbTekuiUVZlult1DICwEnuc5jktMTHzmmWfeeOONe/fucRyndZAuBEDSbwGzSx8S9zDSLd7BKWqha5MUfrs/o+bvSl2bV9vKSx8RiMeElJQUKH35WGkITZD0m8VCpA8ASCtN2JDguFK5AL4IRdGQmrm9nFAfexaBeGy5du0alL6OHXEeW5D0m8VypA8AyKm6tT3JdWWUNXyhuW/W/jq6xtw7hUBYEElJSc8884zmmMwINZD0m8WipA8AKKzL25u6YWWcdUDOccO+0ByB6ARERUV17dr1/fffV3sjAkINJP1msTTpAwDKiJLkkjhOaOXVPwjEY0hYWBiGYUOGDJFeHYPQCpJ+s1ig9BEIRHPAFwt/9NFH8J31iOYwqfT/85//mGZzBoHn+aeffhpJH4HoECDp64iJpJ+RkYFhWPfu3VevXr2hg+Di4vLkk09iGIYywBAIyyciIgLDsMGDByPpt4yJpP/gwYNu3bppDoJm+Tz77LPyt3UjEAjL5OLFixiGffzxxyim3zImkr4gCLGxsb4dkOjoaNS1D4GwfM6cOYNh2OjRo0mSNPe+WDQmkj4CgUAYldOnT2MYNm7cOLV3KyHUQNJHIBCdASj9sWPH0jRt7n2xaJD0EQhEZwBJX0eQ9BEIRGcAxvTHjBmDpN8ySPoIBKIz4OPjg2HYxIkTUeZFyyDpIxCIzsD+/fsxDJs+fbq5d8TSQdJHIBCdAU9PTwzDpk2bZu4dsXSQ9BEIRGcASV9HkPQRCISZ4XmeIAgcx1mW1XslMLwzefJkA+5YpwRJH4FAmI2ampqYmJigoKAVK1YsXrz44MGDWVlZ+q0KxfR1BEkfgUCYhwcPHvj6+sbFxdXU1PA8LwhCbW1tWVmZfmurra2NjIxMT0837E52PpD0EQiEGaioqPDy8ioqKmphnjt37hw5cmTv3r05OTnSxKKiotTU1JqammPHjvn7+8NXdBQWFvr5+cXHx0uzsSwbGxsrimJGRsaePXsCAgLkA7HRNJ2dne3l5XXw4MGHDx/CieXl5cnJyaWlpZ6entLYuhRFJSQkHDhwAK7NgL+AuUDSRyAQZiAuLi45Obm5T+vr6w8dOhQaGhoREXH+/Pnz588HBATAXldKpfLLL79MTEy8dOnS2bNnfXx8YmJiwsPDL1++7Ofnd/z4cdgwQBDEl19+efLkybCwsICAgLCwsIMHD2ZkZMD1nz17NiIiIjQ0NCgoyMPDIzs7GwBw7dq1iRMnxsXF+fv7w3cu5uXlHT9+/OrVqyEhIWfPnt24caPeDyKWA5I+AoEwA6tWrWqumi8IQlhYWHh4uHxiUFBQYmIiACAuLm7KlCkURcHpvr6+S5YskXrh+vv7w/o+RVFjx46NjY2V1lBYWHjs2LG6ujoAAI7j0vSysjJ3d3cAQHp6+sSJE6WPCIK4ePFiVVWVNOe+fft8fHza+83NDZI+AoEwA9OmTSssLNT6UU1Nzfr169U61lZUVGzevBkAoFQqly1bJk339fVdvXq19OfevXv37dsHAFCpVLNnz+a4Ji+UXrZs2dWrV+G/GYYpKSm5d++er6/v2LFjAQDJyckLFiyQZk5PT1+4cKG3t7eXl9ehQ4e8vLxcXV2//PLLdn1tCwBJH4FAmAFPT887d+5o/aikpGTu3LlqE8vKyuBEpVLp6OgoTT9x4sSGDRukP3fu3Onh4QEAUKlUc+bM4XlevhJHR0f4uJCYmAifCZKTk319fb/55hsAQFJS0uLFi6WZw8LCpk6d6uvr69PIiRMnoqOj2/nFzQ6SPgKBMAP5+fne3t5qNXEISZJHjhyprq6WT7x///6pU6cAAJcvX5bX9E+cOLF+/Xrpz127dsGaPo7j33//PQzmQGiaPnnyJI7jp06dCgwMpGkaNszW19dbWVkBAJKSkuzt7aX57969e+HCBUN9X8sBSR+BDVG47QAAIABJREFUQJgBURRjYmJ8fHzkmTk4jsMYelpa2t69e8vLy+H0vLy8f//9F2bUREZGLlmyRFrk2LFj8vDO9u3b//nnHwAARVETJkwIDAysra0FABAEAV+EBwDw9vaG9w8AQGVl5fHjxydMmAAASExMXLhwoXwPT506dfHiRRhoYlk2IyND3hjQQUHSRyAQZiMzMzM4OPjEiROOjo4bN24MDg6+ffs2/CgxMdHPz2/Dhg27du06e/as1GkrLi4OtrtCzp07t3PnTulPT0/PI0eOAABwHJ8zZ056evrRo0cdHR09PT2lV58SBBEaGvrXX385OjpeuHAhJSUFVvCvX7/u5OQk3736+vrw8PAdO3Y4OjoGBATEx8cj6SMQCER7qaqqysvLKyoqgkn3EjRNFxYWFhcXyxt1eZ6Xj5jPcZz8/Ygsy8KUTdiQCwDAcTwvLw/W9+WUlpbm5eXBZeEK1dYsUV5enpeXV19f3/5vagkg6SMQiE6ISqX66aef0PtyNUHSRyAQnRAcx+fPn4+krwmSPgKB6ISIoqgZ0kEAJH2EkRAfGwQNRFQsoYhiw3lozK2YmHaeq/DaRNJHGAOR5ViKoiiKojs1FEXhOK5qBMdxgiBIVB6bIj/6xgPHcbghkiQZhuY4jtULeHEi6SMMjyDw9ONhfIIgNK9PkiAMpf42AdVgdg8+boVo9L6kZmPqX0VRJMeyHMfpoX54eSLpIwyMKIoMw5AkaW4nGxmKIklS60VOGEj6hF4Sgeox1D6g0vphMlV9H0IQBE3TSPoIC4LjOIqiOr30SZLUrOZL2m2ncNvvERxJ34SluTPBSBBkQ2UfSR9hfgRBoGmapjt5bAcGdlrwcnvCLGpr1t3+anMi6ZuymCy4D/9LU1RbjY+kjzA8MLDTWXUvb5emmgnsGMS5hgoXIOmbuJgipi87uLBFt031fXidIukjDEbnDuxI0m8ulK+OvpV9rdLHdUBzEbN78LEqpg3u4yRJciyDpI8wGzCwQ5FkJ63oN0JRRFviLUTbzasZ3tGxzq7Z8NuGrZOk2aXZCYopW3RVKhVFUawsuN/qDQBeqkj6CAMgiiLLsiRJwjziTgxJkm26LE0qfQ3pSGk8rUOSKBzU/mLiTB4cx9m2pO3DqxVJH2EApMAORVGdWPpqXbF0vCzbKlOt7tYjvKPjsipZlqfZpdnRC2HaTB5cpaJIEoV3EKZGFEWGpqHxza1l46LH9WwQ6ZsGJH1Ded8Eh09+w6YpWpfYDpI+wjCIosgyDNmpoWmaar4rlo6XqKVZQxMkfYN537SHD8dxRrfuWvCaRdJHtAtBEJjODsuyNBxxQdbhvoXwOI7jKqk0zo+k/1gVEx9BkiB0qezDaxZJH9FeBGk4w84IAEAQRBjb0Z32+MJs0kcpngYpJEmSpH5DaOgNrsJpikLSRyAMA8dzFEWZ0ok6ttwaHPMbs3MVU3qfIAiWkaXtMwySPgKhD6LYUM03u0FQ6XDFlA9tuEpFkuSjIA+SPgKhHyzLkO2O2KDy2BaTBnlwnG6xRRee0kj6CESz8DxPkZ2zq6qEqnEsaHRjM9LvbOIgTwtvWYFnNZI+AqEdQRBg0o7ZxaGfazRpWRYd9JtafjGx95sEeTqc9Hme53m+TfMbb2cQjxWiKLIsS1hwP1V5hiiknbKw2G/aCUrLd1zDIgV5OqT0bW1t+/fvHxkZ2eqcNE3/+uuv/fv3z8vLM8GOITo9MLBjFg+qbbS5TBvDy0KlMrscO2sxZU1f1RDkYTRftALPbYuW/tSpUzEMW7lyZatzZmVlYRiGYVhOTo4JdgzRuRFFkWEYgjDP2JNEU9GbzhQoZdOYxaQtuioVRZIcx/E838Gk/+OPP2IY9ttvv+Xm5rYwG8MwUVFRTz/9NIZhd+/eNdXeITotHMeSJGFe6ZtMEBAU0zdBMbH3NTN54OndAaTv6OgYEhJSWVnZ3GxZWVmXLl3q2bMnkj6i/fA8T5p1nGHjSR8+Ohi2/zAqbTiyJg7y4DjLMhzLch1O+vv27QsMDDx58qTWeSorK0+ePJmdnd27d28kfUQ7EUWRpimCMGegQxfpa3W3GporMbv1UDHxM5xaJg88yTuA9D09PSsqKhwdHUtLSzXnOXr06Pnz53Ecf/7555H0Ee1D5FiWNHflV2/pt+oXsysPFdPH7mia6njS//fffwEADg4Ozs7OajMUFRW5uLg8ePCAoigU3kG0EwvpimUQL+AqleZKUEjHEoop0zdVjZk8sL4Pz/MOIP09e/YAABISEvr06ZOWliafYcWKFWvXrgUA1NXVIekj2oMIAGMZY+yYpjIoZQcRsKA7gWmPr2m7axHwFerwVO8w0gcAfPXVV1OnTpU+vXLlygsvvJCQkAAAqK2tRdJHtAeO40jLEJ9ZUjZxC+6GZuIfX/qH5lNRqxNbfZCSmltMm8mD0zTdkcI7kvTj4+N79OgRGhoK/xw+fPi8efPgv5H0Ee2B53mKosxuHK0eMdkNAEmfJIh6larefBj14HZI6QuCMHny5GHDhgEArly58vLLLycmJsKPkPQReiOKIs1YRGBHKs3VGeW3Alhwjbd0tccLZv/iZi8qlarOTBhV+iqViqYoeMJ3JOkDAM6dO4dh2IULF2bMmDFmzBhpOpI+Qm84ljVvYr6hitYRG1RaC5J+c78hQajq6y3E+AZ8gID/hSd8B5M+z/NfffXVSy+91KtXr5iYGGk6kj5CP0RRpCiSIMzT+daMatO8PSDpSz+OyoT1/dra2uaMT1EUZ1DgOW/R0p88eTKGYdu3b5dPDAoKwjDs22+/lY+pWVNT06VLFwzD7ty5Y/LdfITWMazbA8dxgnEQRVEQBIHnYTdt+DLYxw04xg5pGe23pleb7s2Pj0+BPwKO4yaTfl1dndYHr/r6eikKb1gsWvrOzs7Dhw8/ffq0fCJN0w4ODmFhYfKJKpVq/Pjxw4cPLygoMO0+NsGAT2QQXKViGNrg9xKWZXme51iWpiiYHig8lqNSsyyLZIeKZpFX9uuNHO1RaetR8fhKv8NhjPwKqvlXIrQHjmMZhm6IaeD4Yyh9QRAoisKloSUfp/COmuAaWobNvScWVQgcrzd+kKe+vp5ovMeo2R9Jv2NglFHO8YYcW4Man2NZlqYbXwv1WEofDp5M6DCIjenR1dTNL6XLDOpnmmyexxb572OCIA/e2E1autjl6blI+h0AQqN9TE3fOk6Uf6qSdaQ2rPFJ6Sx//KTPsiw8VGavUeru9Cbg2oru4ASO4/LUDvgPNKS+/BDgxszkge23ZGMTOkGoGwDV9DsGRuo+U19fT5Ikazjvw8DOo3rNYyZ9QRAYmiZJkrJU6FYLra3osmDj4hRF4k2rKCRJUiQJZ0BQVMNPqlKp6urqDNhQJ9Xx4SYafnOaJklSHmQjcJzjkPQtHs2afpPalc4Tm1bKcJWqQfpqr0TQo47PcRzLMOrDij1m0gcASDlMllWkzCrjAxt1pAJfuCHP7kJFFEVREFiWlR64pT5xbS3yyxwG0liWbTjUsmw6jmVZhpGKka5KJH1DwrKM/EJiGJppAt1i0Qq8ICmD5PBA59M0rf4w+/hJHyEIIss2PDtyLMuyjCAI5t4pC4WhaYP0Y5BgGEbrhkRRlF5wCO/Bxvg6SPqGROdOEqystDpnu2r3TY3PsQyjJU0FSd/yMHZNXxAElmVZhm0IGzIMj86BZoCJXm1pM2nuoR3HcZyiqBZ+6sbjwrAsi6TfATB4YqWBYRiaaszYQdK3VERRNNGJJIskGC+Y0DlgG7t0tFP6BIFLPWObQzr6HUz6oigGBgZaW1vPnz//t46DtbX1/v37aZrW71vrc60CoKW0H22rpWlKezY6kr4lIYqiZGSmqZeNWtA50AKCINA03X7vMwwtttb7XToBOpj0KysrX3rpJaxjkp6ert+3bpv0OY7leS42lvf0lBe2sJCFR11vRJEtLFRf7ZUrFMtqjzYi6VsScumbsqBzoGUEQYA5b3pU8HEcJ3CcpqhWjS9ti+lw0i8pKXnyySe7dOly7ty5uA6CUql8+eWXMQxLSUnR71u3Tfo8zwLAz5wJMExehEmTWABYGNrTA0FgARAmTVJbLffLLyQAqKZv+SDpWywsyzZGadosfZIkWw3syOF5voNJv7S09KmnnuratWtdXZ2RNmEMXn/9dQzDUlNT9VsctpTqameOYwHgdu1SszPo0oXfs4cFgNUjWMRxLAD8nj2gS5cm6+zWjTl1ihRFVNPvEDScSAzT0NBq/MIwNDoHWkUURb2DPLoEdtS21ab5dcfo0i8sLDTSJgwOwzB9+/Ztr/TbhCCwFCVMnqzu/a5dufh4fYL7AHAJCaBrV/Vq/vz5RHPVfCR9y8NIQ6u2jJEU08ngeV6PGA9FkQLfhmq+UUHSf0T7pS/l2LZN07dvg1691DQtjh3LsmzbgvuiyPK88H//px4vGjqUrKwkeb7ZDGIkfQRCZ1hZkKeVnpWNsCwLLOaWiqT/iPZLX59kOxiQ2bJFvbKPYfzWrW0I8sD17N6tfvN44QVKqSQAaKnbCJI+AqEzoijSNEXooHvYj5em2xbYMTZI+o9ov/SBfpV9QWBVKmH6dHXvP/kkFx6ua5AHAC45WXzuOfXAzrJlDYGdFoYORtK3YLR2rdI6g34TEXrA8zxFki1LnyQI2BXL0ro6I+k/wiDS17NnDQBsXh545RX1evonn7AqVeveF0UWx8URI9SfFaZOJQmCZJhWOogj6VskYuN4LFpKk17b7ZqIbgP6wbIsoVI1V9+Xwv6scUbKbA9I+o8wiPSB1JG6TcDgjIeHliDPmjWtBHngsps3q98w+valb9xoJbCDpG+pCILQUHswduoOy0L1m/sbdzBgJk/LQyVSOifmmxIk/UcYSvqibNSkNiAILI4LGmn7oGtX3s+vpco+DOz07Km2IOPrS+pifCR9y0MQRZZlTdUdl2YZBnlfD3iebyGRhyJJyxzOCEn/EYaSPmhPkKesTHzjDfU6+8CBbFWVdu+LIltdLQ4Zov58sGgRKYokRSHpdzga6viNOjZZQd5vK6IosvD9a41VeymZh7TIwA4ESf8RBpQ+aE+Qx9dXS5BnxQoWAFbtAQLOv3q1+k3izTep3FxSFAldjI+kb2HwPN9c/ykkfUtDEEWKptVeoYGrVJaWsSMHSf8RhpU+0DuThySFWbO0dNM9fFi9sg8AFxsLunVrMmePHnRsrK6BHSR9y0NT+hzH8UZA1u8XSV9/YCaPWiuuZQZ2IJYifY7jlEqlq6urQsb58+d1HK2iqKho7dq18mWVSmVb99ng0hdFkYPeZ9rypkMA2KIisX9/9fr7gAFscfEj7wPAlpSIH36oNhvr7Nw24yPpWxhq0jeePkRRZGXe51gWSV8/WJaRS5+z1MAOxPzSpyhq2bJl/fv379Kli+aAl59++umFCxdaXfzVV19VW7Bbt24zZ868fv267vtscOmDxha5tkkfVuHPntUS5LGzaxiLDQ7Wtny5+gyjR5N1dSTHIel3XDSlbyQXC9L7OpD024cgCjRFwfCOJQd2IOaXfl5eHtT0008/3a9fPzc3Nz8/v+3bt8OxzzAM69Kli5+fn9Zl6+vrrays4Gy9evWaPXu2n5/f1q1b33zzTTjxtddeu3v3ro77bAzpA/2CPDzPsqzw229avL9rFxwcn7t8GTz5ZJNP//MfKiNDpxxNJH0Lg+O4goICkiRBo/S11hZZttVXrbUB9SASkn474DmOwHELD+xAzC/92traFStWLF++PCMjQ/72Epqmt23bBt3dt2/f3NxczWX//PNPOMOoUaOys7Ol6fn5+WPGjIEfjR07VseXohhJ+vpn8lRWigMHajbSsqWlbEWFOGhQk4+eeILdvr3NgR2DSr+goGDLli2bN2/esmXLli1b1q9ff+TIER0DdB2Rixcv+vr6GuQiz8nJeeqpp0JCQgAAPM8DUQQAxMfFrXZ337Rx48aNG9euXZt+/XpzbbyGachtRvpHjhyRB0vr6+v37NmzZcuWTZs2RUREaP06QUFBHh4eLfwyPM97eXkFBAS0/LOIonjx4sX169fDMyopKUlznvz8/J07d27ZsmXDhg0JCQktr1Arx48fP3z4sOYe+vr6wvP56NGj0vTExERPT0+tX41lGJbV/vJbi8L80m+ZoUOHQnevWbNG7aOsrKxnn30W3hKysrLUPq2trf3ggw/gsj4+Prpsy0jSB/pV9lmWBYALC9Os7At2dsKyZepPANbWJACk5kvPTSL92trapUuXTpkyZeHChf7+/pGRkWFhYU5OTlZWVrW1tYb6GS0KHMfHjh2LYVhaWlr715adnY1hmBTJrKurs7GxGTRo0OzZsyMjI0OCg93c3CIiI2GOoJGKVpGtX79+yJAh/7+9c4+LKe0D+GMtIXRZIlGkQklWDZVuutlKN9V2GZeim4mIXN9SKXJJbC4pdwoJyWWjeFNusfbt7X21yU5WIaVSamaaM7fn/eNZx3FmpotlG2/n++mPzjnPec7MmZnvec7v+T3PKSsrQ4vPnj1zcHAICQkpKChITU3V1tbetWuX+F6urq4AgOvXr0t7v48fPwYA+Pr6dnxa0tLSDA0NIyIi8vPzL126lJ6eXllZSZzV4MaNG/r6+suXLy8oKNi8efP3339/4MCBTs82kYyMDADA2LFjiSsbGxvd3d3t7Ox+/vnn7Oxsa2trf39/NpsNIWQymebm5uHh4RJrE4lka8YFici69LOzs5G416xZQ9rk6emJNoWGhkrcNzk5GfUTGBoaduVYX0768JODPBAKGAxx75Ob/xN02mtqOELhpxj/L0u/trbWy8tr7dq1r1+//oxnTMY5duwYnU6fMGFCWFjYX6+NyWQCAC5fvowWU/bsAQCcOXOaWEYoFKL2OJ/30TBd0sBdYoGPZlwg7UUsI+VxrJmZmYMGDSI2n+fNm/fjjz/ii4cOHZKTkxP/jQcEBAAA/P39WSyWeLUYhu3du/fbb791dXXt+LQ8ffr0zZs3+CKPx2MymRiG4SdNS0uL2KQrLCxUVlYuKirquFqcO3fu+Pj4GBoa6urq4iuFQqGPj4+npyd+38PhcPT19fEPurKyUlFRMTk5uYtHkTVkXfqFhYXI7GvXriWu5/P5qqqqAICRI0dKjPyg14BuBSZOnNjU1NTpsb6o9D89yPPunfikOh/99evHO3jwEwM7f1n6zc3NZmZm69ev7/ouXZm6XdxBnc5a1Wm1HReQOD2ZtINyOBxLS8u8vLz4+PgRI0a8evWqg4NKrATDsLNnz6akpKSkpFy6dOm3334jSt/Pzw8AgO5f/9T0e0ej2vgfL4qEQtzgEEKhQMB7b0aRSMRtb+e2t6NFtCOxw0AoEOAaJcLj8czMzFavXk08IVpaWhs2bMDXXLlyZdy4ceK/cV9f3zFjxjg7O0u8yX7w4EF0dPTYsWOdnJyknbeuEBsbK37Z8PDwiIyM7MruTU1N9vb2hYWFISEh48aNw9eXlpbq6ek9ffqUWPjEiRNGRkb4I6GSkpKmTJnydT0hCkfWpZ+amoqkT/yqQQjv37+voKCAumql7dva2jpmzBgAQL9+/c6cOdPpsb6o9OGnDdfi8XgQ8gsLYb9+0qTP37CBA2FXB99+bulnZmbq6+s3Nzd3WrKpqSkkJMTd3T0sLCwgIOCHH37AgwaI5cuXBwQE7N69m06nh4WFubq6FhYWQgivXr26cOHCsLCw+fPnb926Fd1lQwh5PJ6dnd2+ffsyMzOdnJzCwsICAwOXLFlCqraioiIiIsLFxSUsLCwoKCgkJKSqqgptevjwoZmZ2enTp8PDw4OCgpYtW/bs2TMIYWlp6axZs4KCgsLCwpydnYkhXcTp06e/++67hoaG33//vU+fPgkJCcStCQkJHh4eeXl5Pj4+DAYjODjYy8uL2Of09OnTOXPmODs75+TknDlzxt/fH4Uif/75Z1QgJiYGAJCWloYW0RhdlMaTlJS0atUq9L9IJKqqqnJzc7tz5w5a5HK5DAYjPT1dJBI9f/48Pj5+9uzZoaGhoaGhvr6+9+7dgxCKRKLa2tqZM2dmZ2fv3Llz7ty5DAbD398/MjKS2H4qKCiYMGFCdXU18a3Fx8fb2Nig/1++fLlixQqJyXWenp40Gu348ePGxsb454W/l4iIiKtXr1paWtrZ2Ynv2wE8Hq+urg7vJfLw8EhMTCSVSUhIcHV17bRVwefzAwICNm3aBCFcsGABUfpHjx61tbUl1VBWVjZlypTy8nK02NzcPHXq1FOnTnXr9csIMi39lpYWHR0dAIC8vDwpchoVFYUuBt7e3h20AVeuXImKRUdHd3q4Ly19+FeCPCtXSjS+0MyM29DQ0QNSvrD0Fy9eHBwc3GmxyspKR0dHBoNRUlLCYrFevHgRGxtrYWFBzMuysbEBAPzwww/l5eUsFuv8+fN2dnY+Pj46Ojq5ubksFquqqsrT03PFihWoPIZh8vLy8vLyQUFBN27cYLFY9fX18fHxQ4YMwe2JYVh0dHR4eHhxcTGbzW5oaEhKSrKwsKipqYEQXrt2DX27UlNT37x5U1dXJxQKL168OGzYsGXLlr1584bFYp09e1ZZWZl0o+nl5bVo0SIIoVAoNDY2NjExQYk3CH9/fwCAkZHRpUuX2traGhsbN2/ePH369MrKSghhbW2trq4uqY9qyZIlROlXV1ebmJgAALZu3UpKQzhx4oScnNy///1vtHjy5EkAAH7VKSsr++677/Ly8iCEqampwcHB6DW0traeOXOGRqMh71dXVwMAlJWVV65c+fDhQxaLVV1dzWAwRo8ejV8yY2Njvb29SZ8jm82m0Wju7u4nT56Mj4+/ceMGWi8QCIipip6enpMnT+ZyuZqamqSgf35+voODQ1tbm4mJSXel39bWVl5eju5L3r59O3r06EOHDpHK7N+/X0lJ6e3btx1XtXHjRgsLC/Sp0el0ovQXLFgwa9YsUvnXr18PGjQoIyMDX7NkyZKlS5d26/XLCLIr/T/++MPW1hYpG/3AiISEhKBNxI9BnP3790vrBxbnb5C+CA2t+oS0/cePJUqft3nznzmaHUyX/yWlr6Ki0ulXn8/ne3p6ihfLzc39/vvv8W+ItbW1lpYWMQocGxsLALh9+za+pqSkZMyYMSjugWGYkpKSpaUlKToRERGBt/XQQ8ZJx6XRaKgRUFBQAADYtm0bvonJZA4aNGjdunXE8mlpaaNHj0bXCQjh48ePFRUV8RbusWPHAADIswh/f//BgwczmUxiJbNnzw4MDIQQpqenm5qakl5VRUUFMbwDIWxtbQ0NDR05cuTIkSOJl8bq6mplZeV9+/ahE+vt7a2iojJjxgx0ErZu3Tp16lTUuBZPWps/f767uzuE8MWLFwCA+fPnkwp4eXktX74c/W9vb89gMEgFLl++rK+vr6ioqKGhQRwEExcXN3bsWFy1np6eEyZMgBDu3LkTf20QQqFQGBAQkJqaCiGk0Wjdkv67d+9u375dV1eHPtmamhoAQGZmJqnYoUOHAAAddy9dvHjRzMwMD+CQpD99+vSZM2eSdnn79i0A4KeffiK+ZRqNJv7tkn1kRfp1dXVVVVVVVVWVlZXHjx93d3fX0NAAAKipqUVERIjHHMPCwpDNUQRAGjk5OTIlfYga+90K7qOW/tq1klv6hoac2lqpTzz/8tIfNWpUpz2ZFRUVGhoaDx48IK1nsViampp48MTc3NzMzIxYICUlBQDQ2tqKr0EdnufPn4cQYhg2cODAqKgoUrU3b95UUFCoqKgg7nXlypW4uLgff/wxNDR02LBhc+bMgRDm5+cDAEpKSvCSu3fvVlBQOHHixIMHD+7fv3///v2SkpKDBw8CAPbu3YvKREZGWlpaEt+FlpYWnU7H19DpdFI2CITQ19dXXV0dQmhqaipu299//50kfcTTp08jIyMVFBSio6PxdnRAQMDs2bPR+5o2bdqRI0emTZuGFGxlZUW8Kamrq8vPz09KSvLz8wsODtbV1UV2e/nypcQGU2pq6rBhw9ra2iCEAwcOXLVqFXHr9u3b5eTk9uzZw2QylyxZoqmpiedQ0ul0JSUl/Hfq6empo6MDIXz79q2RkRGu5mvXrllZWTU0NEAIjYyMui79xsbGrKwsYuBOmvTT0tL69++PDiERJpPp7Oz8n//8B18TEBAwfvx4fJFGo4lLv6GhoW/fvgcPHsTX7Nq1CwDwNSanyYr0UY6XOIsXL5ZYHpd+x5m5ly5dkjXpQ+Lz07vS5IeQf+aMiDTBDjGmv2jRpydr/mXpR0ZG+vj4dFzmwoULAABSyxcxdOhQPFxjbm5ubm5O3Ip+V8TussrKSgBAbm4ufC/9mJgYUp23b98GAKBrDJvNXrdunZ+f3z/+8Y/IyMjjx48/efJET08PdSFev34dAPDf//4X39fR0XHUqFFxcXEbP2bdunXFxcUQwtbWVg0NDW1t7S1btiQkJCQkJGzZskVXV3fgwIHSWo4Ib29v5MFRo0bNmzePtFWa9BF5eXkqKiq4ow8fPjx06NDm5mYUNWptbTU2Nk5ISKiurlZSUsJDLsnJyXPnzo2Kilq9evW+ffvKy8u9vb3RhQdJX7yjC13eUNbD0KFDidKvq6vT09M7fPgwviY6OlpRUfHatWu1tbUaGho7d+7EN+HShxBGRUVNnjwZBeIdHBzwQGvXpc9isQ4cOFBQUEBc2dLSMn78eLzbA2f79u22trbShgiIRCIXF5cpU6Zs37494T0GBgZKSkoJCQno/ik0NFQ8vPPkyZOJEyc+evQIX5OcnEz6cn4tyIr04+LiLN8zdepUXPp9+/Z1dHR8/PgxqTwu/bt373ZQbW5urgxKvxuZPBDyampEOjodp2xyz57tqeydoqKiSZMmkVIdSJSWlqqoqBB/MIjW1lZtbW28N0y8pS/emOqK9LOzsw0MDFCoYdPsW9yBAAANBElEQVSmTZMmTSJFeKdOnerg4ADfS5/Y6FuzZg3pNZA4evTogAEDsrKyit5TXFycn58/cOBAvIHSsfQDAgLEY+XofUmTPoTQ1dV14sSJ6P+6ujpdXd3k5GRHR8f4+Hj0Nj08PHbt2mVmZobi1BcuXBg+fDjph7N48WI1NTX4XvqnT58mHSUxMdHa2hoZ08XFhRjeQVfu2tpaYvmDBw8aGRmNHj1aRUWFOPSdKP3q6mpVVdXMzMzr16+rqanhUbIuSv/Zs2dhYWFXrlwR37R48eKVK1eKr8QjVBJ5/PhxaWlpcXEx/gna2dmpqqoWFRWhG5fLly+bmpqi2x2cy5cvT58+nZiwEBsba2ZmJvvjb8WRFekTaW9vRwMxcPvr6OiQhl/h0kcdU9KQzZY+7GImj0jEwzCRpSXZ8qTZFwAQjRzJ/de/PmUChr8sfQjh8uXLNTU1xcfH4fD5fDc3N7xFj3Px4kUjIyM8/PoJ0ldQUBBP2nNycsKbqFOmTHF2diZuraioUFBQQKFtcek/ePBAV1cXT9IggWGYra2ttbW1+CY/Pz89PT10dZEmfW1tbQhhTk6OoaEhKYcYZamhEbkSCQoKIt712tjYDBgwQF1dHb3UW7dujRgxQkVFJS4uDhUIDAxEfsdpaWkxMDDQ0tKCEL569QoAQJIjhmE0Gg2PYiUmJrq5ueFby8vLVVVVxS9Ld+7cAQCg84lDlD6EMCYmRltbe9q0acRkSpL0GxsbSZ6FEFZUVIwfP37Hjh0Sz0laWtqwYcOI4fvKysrx48ffvHkTLfJ4vPr6+k7HhC9cuFBTUxNffPHihaKiImmQ15w5c0inKyAggBT++lqQRenjNDQ0ODo6ImvT6XQeoc8El34HvxMI4ZEjR2RT+pA4r5ZE0Fz5KSlk4ysr8y9eFMyZQx6RO2cOh8Xi8Hh/v/SFQuHSpUtNTEy2bNny66+/tre3YxjGYrGKior279/f2NgIISwrK7OyslqxYkVZWRmGYa9fv46Pj7ewsLh48SJej6Gh4bRp04g1b9u2DQBAbF6hDk88pq+mpjZo0KDw8HBU7f379wMDA+l0en19PSp/7ty5MWPG5ObmYhjW0tKSkpJibW0NAEBXgqtXrwIA8EwYxI4dO2xsbLKzs9lsNoZhBQUFkZGRSHYo2+fChQviJ+HevXsAgJSUFAihp6fn8OHDSQVcXFxUVVXR575mzRoXF5eioiIMw169erVnz56hQ4cSW/pnz549cuRIfX09hmE1NTVRUVEuLi4onRRx/vx5AICDgwNqabLZbNRCwjtXy8rK1NXVU1JSWltbMQw7efKkm5tbv3790NXo1atXffv2VVBQiImJqaqqwjAsLy/Pw8MjPDwcT0O6ffu2uro6MfaVnJysrKx84sSJ5uZmDMOYTOb27dvpdPrSpUsNDAzmz5+PX8mcnJyIudQNDQ3Dhw/X0dFBXwbEpEmT8NA5k8mk0WikQVVPnjwxNzePiYkRCAQYAeKYqcDAQAsLixs3bmAYdu3aNWNjY+LAgvT0dFtbW/FrCYm5c+eSPq+MjAxdXd1du3Zxudznz5+HhISYm5sTR2O8fPly/PjxnU4jIZvItPQhhKWlpSgfX05O7pdffsHXoxQ3YveaRNavX4+KdWX00N8s/U6CPBDy//UvkaIiWe5r1rRDyHn6VKSmRs7k2bSJA+GnpPF8jrl3ysvLY2Nj3d3dlyxZwmAwQkND7e3tvby88J/c69evAwIC3N3dGQzGwoULbW1tiU1sCGFQUFBQUBBxzalTp2g0GvFHW11djdsBw7AhQ4YsX748NTUVVevk5LRy5Upi9qRIJLpw4QLKlw8KCjI2Ni4sLKTT6RERERDCkpISGo0mPiVfTk6Ovb19aGgog8GwsbFZvXr18+fPIYR79uzx9vaWOCgBw7Dg4GDUqyxx0NCGDRvmzp2L/hcKhQcPHkQ5rAsWLFi0aFFGRgaNRrtz5w4qsG/fvqlTp/r7+zMYjHnz5oWGhpLy5V+8eEGj0Yg9sVu3bp05cyYxKb64uNjf3z84OJjBYEyfPj0rK2vjxo3oavfy5cs+ffokJycnJCT4+voyGAwrK6vExERicrpQKLS3tyfNlJCTk+Pm5hYYGMhgMHx8fMLDw1GHeVVVFY1GS0pKQsXWrVvn4eFB3PH06dOk+W0WLFiAJ3Tt2bNHX1+f2GMPITxw4ICxsXFERMTSpUsZBIghJqFQGBcXZ2Njw2AwZs2atXPnTjyBWyQS2dvbL1u2jPxRiREdHS3+ed28edPY2JjBYPj5+Xl7e+PNCMSKFSuMjIyI37SvCFmXPnyf9QwAIDYEli1bhlbOmjVL2kAMNpuNxrwMGTIEtQ075m+WPnyfUCg5lN/SIjIyIufq2Nhw29o4PB4bQu7hw+Qgj7Jye2Fhz86yKRKJ8BaZxAJCoRDDsM8yCxuGYQMGDEDja1C1HQzJwTCM183sug7exeei41PB4/H++rmS+C5Q6su5c+cghAIpI3IhhIWFhUOHDhWf4xa9MPFw9qcFuLlcrpmZGeqcEAcdS2JLn4j4W3j06NG4ceNIt3HdReLbvHXrlsTT8rXwFUh/xYoVyO/EfO3S0lJlZWUAwKhRo6QNznrz5s2gQYMAAPr6+l35Ov790od4kIcIytHcuJHs9BEj+L/+2g4hm83mcLkcgUDg7Ey+DzA15TQ2dnus1tc5tTLqyO3KsDsKEtLyHcXJyMjQ0tIi/vQ+O01NTZGRkR30CX0aRUVFUVFRn72jtaysTE9PT+I0c18Lsi59LpeLh/VJD8OaNGkSAEBeXh4fx0hi165dffv2BQA4Ojp25Vg9In2RSEQO8UDIP3YM9u1LFnpiIpcYvYGw/dkz8QdsCXx9uz0rw9cpfS6XCwAQz9+g6BT0EAti/mUH3Lp1S1rPdi+EyWSSkke/OmRd+qjDCgCgq6uLJ3shUGoH6s4S37GlpUVPTw8VEB8WJJEekT6EUEDM5IGQ9/y5SFubHNhxdeVhGAfDiLJmQ4hlZUE5uY8KDxjAzcrqXpDn65S+QCDYtm1b16dUpMB59+5dQkKCeCY0RW+g56V/69atrKwsiSN3/vnPf+LPzzp27Bhp6x9//DFq1CgAwLfffrt69WpipI/L5eI9AeJTOEijp6QvEon+nJNHKORBKPDxIQd21NR4v/3WLu7x9naOpPLCcePamcxuZO5/ndKnoKD4BHpe+qg9rq6u7uHhsWPHjqqqqpqampycHE9Pz8GDByNxk2YxxLl37x6aRxMAYGVllZ6eXlNTk5ycbGpqilbOmDGj67caPSV9+D6TB4NQsHs37NOHHLFJS2uXlpYjErXX1IjGjiXv4uDAEQhIdwaU9CkoKHpe+nhWpURGjhwpPm6QSElJiYGBgcR9HRwcSAMIO6YHpQ8hFKIcTbFETGFICE8oZEubZYHDYUOInTsnkpf/aMc+fXj79nU1g5OSPgVFr6HnpS8SicrKyvbu3WthYWFqajpjxowZM2aYmJjY29tnZGSg/OiOaWpqOnr0qKWlJdrd1NTUwcGhoKCgi4/GxelZ6UM2G4qF8kVaWrz6OgmBnY+DPGwI+f7+5GFccnLcGze6EtxnU9KnoOg19Lz0ZYcelv769eKT6giysrgQcjidWVso5NTWiiZNIu8+YwanoYHD51PSp6CgQFDS/0BPSr+wEA4eTFb2qlWYUMhub2exWJ231iHkXr0qUlAgVcJfvbrzIA8lfQqKXgMl/Q/0mPTr6uDo0eTAjoEBr42FQVF7ezuHw2n/E47UPy6XA6EgPJxcj5wcdv58O4Qd797pE2gpKCj+P6Ck/4Gekb5QCAMDyaaWl+ffvctDj9nqIhiGJm8Q0mjk2nR1+c+fd1xbp88UpaCg+P+Akv4Hekb6u3eTQ/nffCNMTORB2L0HbPF4fD6fD6GguBgqK5O9b2vLg5AvEvH5fImzvFHSp6DoJVDS/0APSP+XX6CqKln65uZQIOB3q5mPIxDwIBSKzdsD+/cXpKTwBAKelCezU9KnoOglUNL/QA9IXywED1VU4JMnsItPWZHibx6bLf7oFeHkybyGBmlBHkr6FBS9BEr6H+gB6Z86BW1sPvo7eRLfKJDSKu8cCPkPH4qsrYl/grVreW1tPCmTOVPSp6DoJVDS/0AP5+mL0Y1H6UryvoQ/6bVR0qeg6CV8cekTH3Aq+6CZfGRE+hBCoVD46d7n8z/66xBK+hQUvYQvJf3Xr1/379//m2++uXLlysOvhLt376qoqAAAHj169IVOS3dBE3DyvzyU9CkoeglfSvr19fVycnIdzKQmy8hOS5+CgoLi8/KlpC8QCH766Sc6ne77VUGn09euXSvxydcUFBQU/wd8KelTUFBQUMgglPQpKCgoehGU9CkoKCh6EZT0KSgoKHoRlPQpKCgoehGU9CkoKCh6EZT0KSgoKHoRlPQpKCgoehGU9CkoKCh6Ef8Dmh4wSLt0SO4AAAAASUVORK5CYII=" />

                                 图2-3

 

在对数据页进行增量更新时每次操作均会在数据上生成一个新的增量地址作为数据页的访问入口,并采用CAS完成映射表中(mapping table)物理新地址的映射(delta address),并对针对同一数据页可能出现的同时更新进行仲裁,此时胜出者将进行更新,而失败者可以进行重试,遗憾的是目前SQL Server只会对失败操作抛出错误信息,需要我们自己捕捉错误信息并重试,具体可参考联机文档.具体如图2-4所示

 SQL Server 内存数据库原理解析udfr06W51U1VVVSdOnCCXt2zZwmazvV8xmcwffviBIAgYhjMyMjQajfernJyc9PT0bge/dOkSDMPELRLyeDwCgaDbXVKn061evdr70ePxVFZWmkympKSkSZMmkSs3b95Mp9PJ5YSEhB07dqSkpCQkJCQkJCQnJy9cuLCwsDA+Pj4mJqbrkePi4n5XQgqFYvDgwRs2bCC7O3Z7dmlqanI4HDqdbs2aNYcOHSIIIjk5WSqVdt1m165dOTk55MLZs2eTkpLIxJKSksaPH3/rm87Z2dmffvrphg0bDh48WFhYeIen1T8KkFAwACQE8AFtbW1d//ntifeEyCcbi8XyvzZYsWJFt28rKyu91WJbtmxhsVjer+h0+vfff08uk5WNWVlZCIIQBHHu3LkrV650O/jGjRvJoWC7SYggCC6X260NpquESktL09PTmUymUCi8cuXKzJkzyfVdJbR79+5NmzZFdCE6OrqysvLixYtRUVFdj3w3EupWHefF4/EUFBTk5ORwuVyxWLxy5UrS0N9884239s+bDymh6dOnX7hwwZtVZGRkUlLSrR3iExISyD57PgdIKBgAEgL4nh56WVWj0SQnJ/+vvnApKSlarbbrGrPZnJCQQC5v2bKFyWR6v6LT6d3u1G63OyIiQiQSabXabrNgdHR0xMXFkf0FukmotbXV4XDExsZ2rUzj8/lkdVxhYWFMTExdXR35bXV19ZIlS8ht1q9fz2AwyOWioiKVSnVrifh8vrfbAsnZs2fvRkLdpEhy4cIFqVTq7VwQGxtLNuQcOXLEWzFIsnfvXrIaMCkp6W5eM+rWMcGHAAkFA0BCAN/TQxLq6OggX3zBcdy7sqqqiqyjs9lsZ86c8dbIWa3Wy5cveyujNmzY4H3yIAiiuLh4/fr15O4ul4sgCI/Hc+HCheLiYoIgoqOjyQWCIBobG9PS0mg0Gim/9PT07du3EwTR0tIyd+5c8tSZmZn5+fnk9hUVFTt27JgzZw5BEFQq9dKlS+T66urqmJiYKVOmkB8PHjxItru0t7fX1NRcvHiRrO4jCMJsNpOv/jQ3N0dGRqrVanK9zWabNm3a70qIxWKtW7fu1vVHjx4ViUTeQy1fvpyUULeGn46Ojrlz51KpVIIgNBrN5cuXvS1JSqXyto09cXFx+/fvv3NW9waQUDAAJATwPT06bI9CoaBSqZGRkZs3b758+XJBQQHZgZsgCL1en5aWduLEiaNHj6ampnZ9vNi/fz+fz/d+5HK5+/btIwgCw7CIiAjyUGKxmHxkcblcWVlZ0dHRO3fuTE

               

                              图2-5

 

由于数据页是弹性的,所以可能造成数据页过大或是过程,Hekaton中会在其认为合适的情形下进行页分裂或是合并.限于篇幅这里就不在详细叙述了,在实现Latch-free中所有内存中的操作都是通过一个或多个原子操作完成.感兴趣的朋友可以参考微软的相关文献.

有的朋友可能会说闩锁本身是保护内存结构的轻量级锁,况且不同类型的闩锁可能兼容,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

 SQL Server 内存数据库原理解析

                         图2-6

 

  我们通过一个实例简要说明下:事务过程采用Timestamps(时间戳(全局时钟))标记事务和行版本,每个事务开始时赋予开始时间戳Begin_TS,用于读取正确的行版本(数据行同样均具有时间戳),行版本数据结束时间戳End_TS一般为正无穷(+∞),当进行数据更新时创建新的版本行,并将旧的版本行End_TS修改为事务ID Xb(此处非时间戳),新的版本行的Begin_TS同样标记为事务ID (Xb).然后获取事务的End_TS (唯一),确认可提交后,提交事务,并将新旧版本的事务ID(Xb)替换成获取的End_TS.至此完成一次操作.未涉及任何锁,闩锁,阻塞.如图2-7

 SQL Server 内存数据库原理解析

 

                           图2-7

有的同学看到上图可能回想,这样Xa读取的版本行是正确的吗?他为什么不能读到Xb的新行数据.我们来简单分析下

Xa开始时分配的时间戳为25,Xb为35,这就意味着Xb的结束时间戳一定大于35此时Xa读取数据,时间戳范围应为Begin_TS-20, End_TS-+∞,而Xa的Begin_TS小于Xb的Begin_TS,所以读取正确如图2-8.

 SQL Server 内存数据库原理解析

                              2-8

实际上Hekaton中规定 查询的可见值区间必须覆盖此查询的开始时间戳比如一个查询事务的开始时间戳为30,他可见的行版本可以包括10至+∞,20至150,但不能看到40至+∞

如图2-9

 SQL Server 内存数据库原理解析

                              图2-10

 

曾经微博上有朋友问为什么Mysql重构优化器时为什么要将parsing, optimizing, execution三个模块分开而不是混在一起了,我想这里可能就找到答案了,一个优秀RDBMS它自身的健壮是多么重要.

在Native下,所有的执行都是”Goto”,直接读取数据,再也不用一个一个的function的调用,极大提升CPU的工作效率.有人可能会问这样每次都编译将是非常大的工作成本,实际上Hekaton将指定查询(存储过程)编译成DLL文件,只是在第一次将其载入内存就可以了.对于即席查询是不可以的.

Hekaton在机器代码下执行效率大幅提升,以下是微软给出的测试数据

a. Interpreted与Native的对比,其中分为是否为内存优化表,查询单条数据所消耗的CPU指令 如图2-11

 

 SQL Server 内存数据库原理解析

                            图2-12

c. 普通表与Hekaton内存优化表内存中随机更新数据对比,此时不写日志如图2-13

 SQL Server 内存数据库原理解析

                                   图3-1

而将易车的惠买车的访问量在Hekaton模拟运行时,各项性能指标都表现的很淡定.

如图3-2

 SQL Server 内存数据库原理解析

-->

原标题:SQL Server 内存数据库原理解析

关键词:sql

sql
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。