SQL Server中的timeout设置

什么叫做数据库的并发,我看到定义上是说:多个用户同时在使用一个数据库,我们就可以说这个数据库支持并发。

那么我可以这么理解吗?新浪某个应用同时在线人数为2亿,那么表示新浪的数据库并发量为2亿?

并发量为2亿,如果sort_buffer_size设置为1M的话,read_buffer_size,join_buffer_size设置也都设置为1M的话,那岂不是2亿*3,至少得有6亿/1024/=58593.7500(G),那数据库不是总共需要6W左右的内存啊,天了,就算用集群的话,一个节点64个G,68593.75/64=915.52734375,总共需要916个节点,需要安置近千台pc服务器。

这得需要多大的机房,存放这么多数据库服务器呢?

这样的应用再多几个,光PC服务器机器的购买以及维护得花费多少money,难怪it界流行一句话,啥高性能都是money堆出来的啊!

我自己都感觉出自己理解的比较浅薄了,欢迎大家指点!

我们做数据库并发的数量,要区别于在线人数。

比如一个用户平均100秒进行一次数据库操作,那你所谓在线2亿人的话,数据库并发就在每秒200W。这显然是需要一个分布式系统才能达到的。

其实你问了一个很好的问题,就是数据库每秒能处理多少个并发操作,估计真正做过测试的人也不多吧。

我去年是测到400多个写操作,当然这取决于你的服务器性能,业内据说能做到500-1000吧。

SQL Server中的timeout设置

上篇文章中, 我们总结了SharePoint里的timeout相关的设置, 文章中我们说到SQL端的选项是不会有什么影响的. 为什么这么说呢?

笔者这一块原来也是晕乎乎. 于是去咨询SQL的资深高级技术支持工程师Peter, 得到了如下的答案.

1. 与SQL相关的timeout, 都是由Client端发起的.

比如说, 我们自己写了个C#小程序, 其中使用了SqlCommand.CommandTimeout属性, 指定它的值为20秒. 那么, 当这个query在SQL端执行了二十秒后, 我们的C#小程序会给SQL Server发送一个TDS Tension数据包, 告诉SQL Server我这边超时了, 你那边的query不用做了. 于是SQL相应client的请求, 断掉connection. Client端报出一条exception, 说SQL Server端的运行时间太长, 超过了我们原定的时限.

2. 那么SQL Server Management Studio中有如下两个有关Timeout的选项, 他们是干什么的呢?

  • a. Tools->Options->Query Exection->Execution time-out.

              image

  • b. Right click SQL Server Node->Properties->Connections->Remote Query Timeout.

              image

如果我们把Management Studio看作是我们自己写的C#程序, 在这个程序中我们只写下来要执行的语句, timeout设置呢? 这里的a选项指定的值就是SqlCommand.CommandTimeout. 好懂吧. ^_^

假设我们的C#小程序连接到SQL Server 1上运行存储过程取数据, 在这个存储过程中, SQL Server 1需要到SQL Server 2上去取原始数据. 那么, 如果SQL Server 2上的查询执行了600秒之后(默认值), 那么SQL Server 1会发给SQL Server 2, 告诉它这个查询我嫌它太久, 你不要做了. 于是SQL Server 1 发给SQL Server 2一个数据包, 告诉它停吧. 然后Server 2断掉他们之间的Connection.

由此可见, 在一般情况下, b选项与我们关系不是很大.

我在研究这两个选项的时候, 发现StackOverFlow.com上的网友问起相关的问题, 回答问题的人经常给出这两个选项. 其实这是错误的. 调整了之后也不会对SQL端运行超时的问题有改善的.

猜你喜欢

转载自weitao1026.iteye.com/blog/2347779