日期:2014-05-18  浏览次数:20656 次

------分享:SQL Server高并发性的设计和优化--------
RT,这是我前几天在网上看到的一篇文章,虽然讲得有点抽象,觉得还是不错,分享给大家!
SQL Server高并发性的设计和优化

数据库设计

  在进行数据库设计的时候,要充分考虑到逻辑设计、物理设计、性能设计以及并发设计,并力争找到一个平衡点。计逻辑结构应该选择最适于描述与表达相应概念结构的数据模型,这里要使用到E-R图。为一个给定的逻辑数据模型选取一个最适合应用环境的物理结构(存储结构与存取方法)的过程,就是数据库的物理设计。影响SQL Server数据库性能优化的因素很多,或由客观或由程序员人为因素决定的。对SQL Server数据库的结构和存储方式如逻辑设计、物理设计和事务日志文件设计等方面都可能会对性能有相应的影响。在考虑整个系统的流程的时候,我们必须要考虑,在高并发大数据量的访问情况下,我们的系统会不会出现极端的情况。


隔离级别
  事务和锁属于SQL 数据库中比较高级的内容,一般的应用中用不到事务和锁,只是在一些比较复杂的系统中,如定票系统,证券交易系统等,这些系统比较复杂,对事务和锁的要求比较高。锁是非常重要的技术,可以用来确保数据在并发系统中的一致,在并发系统中起作用,如果只一个用户访问,锁是没有意义的。

▲ 锁粒度

SQL Server有多种锁,允许事务锁定不同的资源。锁就是保护指定的资源,不被其他事务操作。为了最小化锁的成本,SQL Server自动地以与任务相应等级的锁来锁定资源对象。锁定比较小的对象,例如锁定行,虽然可以提高并发性,但是却有较高的开支,因为如果锁定许多行,那么需要占有更多的锁。锁定比较大的对象,例如锁定表,会大大降低并发性,因为锁定整个表就限制了其他事务访问该表的其他部分,但是成本开支比较低,因为只需维护比较少的锁。

  锁和并发性是相逆的,并发性越高,锁的级别要越低才好,这是相矛盾的。锁资源和锁类型是相结合的,在什么资源上应用什么类型的锁。因为锁是要浪费内存空间的,所以在选择锁的资源时也要注意,如选择行锁,可能会锁的粒度会小点,但如果有几十万或上百万条记录时,也会占用一定内存空间。锁不仅占用内存,也会占用CPU的资源。所以并不是锁的级别越细越好,级别越小可能会能提高并发性,但会消耗内存和CPU等资源。所以应该结合考虑,达到什么样的并发性,达到什么样的数据一致性,以及系统的资源信息,如果不确定,也可以交给SQL Server自己处理,它会自己选择一个合适的锁类型,是行级锁,还是页级锁,还是升级为表级锁,SQL Server都可以自己做到。


并发

  如果2个事务在执行时间上有重叠,则称这2个事务是并发的。

▲ 事务并发实例

  并发控制有一个简单的正确性目标:使得每一个事务的执行看上去都是隔离的,与其他任何事务都不相关。也就是说,事务集播放执行与这些事务依次独立执行必须是等同的。并发的正确性一般通过互斥来实现。

------解决方案--------------------
不错,顶一个
------解决方案--------------------
支持一下了。
------解决方案--------------------
谢谢分享!
------解决方案--------------------
恩 还可以。
------解决方案--------------------
【锁级别越小可能会能提高并发性,但会消耗内存和CPU等资源】
如果机器硬件配置高,如何统一指定 自动事务时,锁级别 按小 的选择?