【IT168 技术】业界举世瞩目的“2012数据库技术大会”已于2012年4月13日在京盛大召开,本次大会已经是IT168、ITPUB、IXPUB、ChinaUnix联合主办的第三届数据库技术会议。大会将针对大数据架构设计、数据库安全、分布式数据库、商业智能、NoSQL、Hadoop等多个重点话题进行深入探讨。此次大会得到了全国数据库技术高手们的高度关注与支持,是当前象征最高技术水平的数据库工程师盛会。
在4月14下午SQL Server应用专场中京东资深DBA王成辉为与会人员带了《SQL Server高并发性的设计和优化》主题演讲。
▲ 京东资深DBA王成辉
王成辉介绍道,有很多朋友都认为SQL Server是中小型的数据库,其实那是我们对它的误解。不是产品不行,而是SQL Servers可供优化的潜力未发挥出来。加上最近几年SQL Server推出了几个新版本后, SQL Server早也不是当初的那个样子。王成辉就数据库的设计、隔离级别 和锁、高并发下数据库的设计原则给大家做了较为详细的介绍,并且给出了一些具体实现方法以及优化措施,从而实现SQL Server高并发运行访问。
数据库设计
在进行数据库设计的时候,要充分考虑到逻辑设计、物理设计、性能设计以及并发设计,并力争找到一个平衡点。计逻辑结构应该选择最适于描述与表达相应概念结构的数据模型,这里要使用到E-R图。为一个给定的逻辑数据模型选取一个最适合应用环境的物理结构(存储结构与存取方法)的过程,就是数据库的物理设计。影响SQL Server数据库性能优化的因素很多,或由客观或由程序员人为因素决定的。对SQL Server数据库的结构和存储方式如逻辑设计、物理设计和事务日志文件设计等方面都可能会对性能有相应的影响。在考虑整个系统的流程的时候,我们必须要考虑,在高并发大数据量的访问情况下,我们的系统会不会出现极端的情况。
隔离级别
事务和锁属于SQL 数据库中比较高级的内容,一般的应用中用不到事务和锁,只是在一些比较复杂的系统中,如定票系统,证券交易系统等,这些系统比较复杂,对事务和锁的要求比较高。锁是非常重要的技术,可以用来确保数据在并发系统中的一致,在并发系统中起作用,如果只一个用户访问,锁是没有意义的。
▲ 锁粒度
SQL Server有多种锁,允许事务锁定不同的资源。锁就是保护指定的资源,不被其他事务操作。为了最小化锁的成本,SQL Server自动地以与任务相应等级的锁来锁定资源对象。锁定比较小的对象,例如锁定行,虽然可以提高并发性,但是却有较高的开支,因为如果锁定许多行,那么需要占有更多的锁。锁定比较大的对象,例如锁定表,会大大降低并发性,因为锁定整个表就限制了其他事务访问该表的其他部分,但是成本开支比较低,因为只需维护比较少的锁。
锁和并发性是相逆的,并发性越高,锁的级别要越低才好,这是相矛盾的。锁资源和锁类型是相结合的,在什么资源上应用什么类型的锁。因为锁是要浪费内存空间的,所以在选择锁的资源时也要注意,如选择行锁,可能会锁的粒度会小点,但如果有几十万或上百万条记录时,也会占用一定内存空间。锁不仅占用内存,也会占用CPU的资源。所以并不是锁的级别越细越好,级别越小可能会能提高并发性,但会消耗内存和CPU等资源。所以应该结合考虑,达到什么样的并发性,达到什么样的数据一致性,以及系统的资源信息,如果不确定,也可以交给SQL Server自己处理,它会自己选择一个合适的锁类型,是行级锁,还是页级锁,还是升级为表级锁,SQL Server都可以自己做到。
并发
如果2个事务在执行时间上有重叠,则称这2个事务是并发的。
▲ 事务并发实例
并发控制有一个简单的正确性目标:使得每一个事务的执行看上去都是隔离的,与其他任何事务都不相关。也就是说,事务集播放执行与这些事务依次独立执行必须是等同的。并发的正确性一般通过互斥来实现。