|
并发啊并发,这个比较伤脑筋,而且还是单机的sqlserver。
主要有以下几点问题会影响并发。
1、和oracle相比,SQLSERVER和DB2的锁机制就是有点先天不足,譬如DB2会有locklist和
lockmax这两个参数来控制锁在内存中的大小,以及什么时候由行锁升级成表所,sqlserver的锁和DB2
有些类似,都是放在内存中的,但是oracle放在block的标志位的上的设计,在2000~3000高并发的情况
下的优势会非常大,死锁,锁超市就大大减少。这点对并发影响很大(这里其实还有很多的东西,我只是粗略地说
一下)。
2、sqlserver每条并发的sql语句都会打开一个数据库连接,而oracle的每条并发语句死通过一个
oracle conncet建立多个oracle session,这个在企业级应用的时候也会让oracle在并发上占
据优势。
以后两点可以通过改进应用,优化程序来改进,从某种角度来说,读写分离也可以有效的降低上面两点的不利影响
。sqlserver的集群没用过,不过听朋友说不如oracle,这个有待考证,sqlserver的事务分发,读写分
离,存在一定的安全性隐患,不过确实可以有效的提高性能。
3,高并发情况下的sql的执行,执行计划就比较的关键。sqlserver的优化器逐渐在进化,可以用
Profiler来跟踪查询,得到查询所需的时间,找出SQL的问题所在;用索引优化器优化索引。此外,统计数据
刷新也比较关键。如果并发高,但是数据量不大就使用同步刷新的好了。
4,如果不能提高服务器的性能,那么读写分离,和使用不同的隔离级别那就是有效的手段。
包括使用快照隔离级别,使用replication同步技术,或者建立snapshot database读写分离。
使用采用row-versiong based的snapshot 事务隔离层级,在数据查询,尽量使用 READ
UNCOMMITTED 事务隔离级别, 都可以减少锁的开销。
SSD硬盘.......两连天有个朋友的SSD硬盘坏掉了......数据库都挂了。。SSD硬盘的读取速度是毫无
疑问的,但是它的写操作寿命还有待考证,总是让我感觉不放心,但是用来做读写分离的时候还是很有用的。
|
|