SQL连接并发测试(mongodb连接测试引发的)

标签: sql 并发 测试 | 发表时间:2011-10-18 23:26 | 作者:小城岁月 Bloger
出处:http://www.cnblogs.com/

       最近一直在搞mongodb 文件服务器大量文件并发上传测试,在官方文档发现mongo是线程安全的,支持单一连接下的并发操作。印象ADO.NET 似乎不支持单一连接并发。于是,测试一下来证实这个疑虑。(前两篇小记一直纠结mongodb吃内存导致并发文件上传变慢问题,经过这两天测试,发现文件并发上传越来越慢的瓶颈是磁盘的IO读写的瓶颈)

以10W条/20W条 记录写入测试,下面是测试结果

操作 10W w/s 20W w/s 操作方式 备注
1 79.958 163.396 主线程 有池 单连接 单打开 单打开指的一次open close 内执行所有写入操作
2 79.958 164.412 主线程 有池 单连接 多打开 多打开指的写入一次就open close一次
        总结:可以看出有池的情况open close基本没有性能消耗。
MSDN官方解释,池的效果在minpoolsize不为零的情况,
总保持相应数量的活动连接,当Open的时候实现直接用了活动连接,
而Close操作并没close,只是又将活动连接放回池里。
3 79.13 163.396 主线程 无池 单连接 单打开  
4 290.334 620.694 主线程 无池 单连接 多打开  
        总结:无池的情况下,open close非常消耗性能,由于没池每次Open
Close 都要打开关闭连接 ,所以效率没有池高。
5 49.13 142.33 单线程 无池 单连接 单打开 异步执行反而快了?测了几次都这个结果
6 326.495 865.44 单线程 无池 单连接 多打开  
         
7 137.985   有池 单连接 单打开 10线程并发写入  写入锁 Ado.net 不支持单连接并发写入 通过线程锁控制实现
8 141.464   有池 单连接 多打开 10线程并发写入  写入锁 Ado.net 不支持单连接并发写入 通过线程锁控制实现
        总结:单连接通过写入锁控制多线程写入速度明显慢了很多,
单连接并不适合并发写入操作。
9 18.943 37.815 有池 10连接并行 单打开  相当于操作1 ----  10个单连接 单打开 的并行操作
10 19.658 41.793 有池 10连接并行 多打开  相当于操作1 ----  10个单连接 多打开 的并行操作
        总结: 多线程并行多连接的操作效果还是很理想的,发挥了多线程任务的优势。Connection是非线安全的,也就是说最好为每个线程单独创建一个数据库连接实例是最理想的。

可以确定的是ado.net connection 是非线程安全的 一个连接下一次open close 过程不允许并发,并且多次open close并发会相互冲突 (想并发只能通过锁来控制了,但这个不用想肯定效率不高)。

而mongodb 则在这方面具有优势, mongo是线程安全的。一个连接下是允许并发写入操作的,同样mongodb 可以多连接并发,然后每个连接下又可以多并发写入操作,这样每秒并写入记录数可以更高。看到很多网上的测试mongo 基本是单连接并发写入,这个没有反应mongodb的写入极限。mongodb的池,是预先创建指定数量的闲置连接,用到其中的连接的时候,该转为活动状态。

由此可见,不同的数据库池的设计理想有所不同。

而ado.net 写入并发实现只有下面两种合适的
一 有池-单连接 单打开  并发写入(引及写入锁) (锁的引入,反而导致速度下降,这个方案排除了)

二 无池-并发多连接   单打开                   这种不推荐 
二 有池-并发多连接   单打开/多打开          目前,测试只有这种情最理想

另外建议连接池的minpoolsize 要设置(不设置或设置为零,会在一定时间内关闭池内所有连接)但不要设置太高,否则会占用太多资源。详细可查看MSDN介绍。

作者: 小城岁月 发表于 2011-10-18 23:26 原文链接

评论: 5 查看评论 发表评论


最新新闻:
· 互联网女皇Mary Meeker眼中的互联网趋势(PPT)(2011-10-19 10:03)
· RIM发布BBX移动平台:整合黑莓和QNX系统(2011-10-19 08:29)
· 盛大在线调整收官:新管理层成型 裁员未超5%(2011-10-19 08:28)
· 雅虎第三季度净利润2.93亿美元同比下滑26%(2011-10-19 08:27)
· 苹果员工今天悼念乔布斯 零售店将停业数小时(2011-10-19 08:26)

编辑推荐:最老程序员创业札记:全文检索、数据挖掘、推荐引擎应用48

网站导航:博客园首页  我的园子  新闻  闪存  小组  博问  知识库

相关 [sql 并发 测试] 推荐:

SQL连接并发测试(mongodb连接测试引发的)

- Bloger - 博客园-首页原创精华区
       最近一直在搞mongodb 文件服务器大量文件并发上传测试,在官方文档发现mongo是线程安全的,支持单一连接下的并发操作. 印象ADO.NET 似乎不支持单一连接并发. (前两篇小记一直纠结mongodb吃内存导致并发文件上传变慢问题,经过这两天测试,发现文件并发上传越来越慢的瓶颈是磁盘的IO读写的瓶颈).

jdbc测试mysql数据库sql预解析(绑定变量)

- - CSDN博客推荐文章
jdbc测试mysql数据库sql预解析(绑定变量).         用习惯了oracle,学习mysql,想测试一下mysql绑定变量的效果. 以前看网上介绍大部份都说mysql没有sql共享池的概念,所以也不存在sql预解析或绑定变量的说法.         今天测试了一下(通过网络抓包和看服务器端sql日志的方法),发现mysql还是有sql预解析的实现.

详解SQL盲注测试高级技巧

- - FreeBuf.COM
这篇文章主要写了一些加快盲注速度的技巧和盲注中比较精巧的语句,虽然注入并不是什么新技术了. 但是数据库注入漏洞依然困扰着每一个安全厂商,也鞭策着每一个安全从业者不断前进. 首先来简单介绍一下盲注,盲注是不能通过直接显示的途径来获取数据库数据的方法. 在盲注中,攻击者根据其返回页面的不同来判断信息(可能是页面内容的不同,也可以是响应时间不同).

SQL性能小测试得出的惊人结果:60%失败

- - 博客 - 伯乐在线
2011年,我开展了“3分钟测试你对SQL性能知道多少?”的测试活动. 其中包含五个问题,它们是这样的:每个问题有一个query/index查询,问你这样是否正确使用了索引. 至今, 这个测试已经成了  Use The Index, Luke网站上的一个热点. 这个测试已经被回答了28,000次.

Web应用手工渗透测试——用SQLMap进行SQL盲注测试

- - FreeBuf.COM
本文主要关注SQL注入,假设读者已经了解一般的 SQL注入技术,在我之前的文章中有过介绍,即通过输入不同的参数,等待服务器的反应,之后通过不同的前缀和后缀(suffix and prefix )注入到数据库. 本文将更进一步,讨论SQL盲注,如果读者没有任何相关知识储备,建议先去wikipedia学习一下.

Sql Server 高频,高并发访问中的键查找死锁解析 - shanks_gao

- - 博客园_首页
死锁对于DBA或是数据库开发人员而言并不陌生,它的引发多种多样,一般而言,数据库应用的开发者在设计时都会有一定的考量进而尽量避免死锁的产生.但有时因为一些特殊应用场景如高频查询,高并发查询下由于数据库设计的潜在问题,一些不易捕捉的死锁可能出现从而影响业务.这里为大家介绍由于设计问题引起的键查找死锁及相关的解决办法..

[转]一些常用的postgis数据库的查询sql(经测试全部可用)

- - 小鸥的博客
select name,st_distance(ST_MAKEPOINT(116.561, 40.276),geom) as distance from shengjie_region where name='天津市' or name ='辽宁省' or name='北京市'. SELECT ST_AsText(geom) as wkt FROM shengjie_region where name = '新疆维吾尔自治区'.

PL/SQL动态SQL(原创)

- - ITeye博客
使用动态SQL是在编写PL/SQL过程时经常使用的方法之一. 很多情况下,比如根据业务的需要,如果输入不同查询条件,则生成不同的执行SQL查询语句,对于这种情况需要使用动态SQL来完成. 再比如,对于分页的情况,对于不同的表,必定存在不同的字段,因此使用静态SQL则只能针对某几个特定的表来形成分页.

Derby SQL 分页

- - ITeye博客
    之前在网上看到有人问 Derby SQL 分页实现的问题,网上有人给出这样的解决方案,SQL 如下:. 其实,这样的分页查询,性能不理想,我试过在 300W 数据量中采用这种分页方式,需要 20~30秒之久;其实 Derby 10.6 以上版本有更好的分页支持,直接给出 SQL 实现如下:.

SQL Server--索引

- - CSDN博客推荐文章
         1,概念:  数据库索引是对数据表中一个或多个列的值进行排序的结构,就像一本书的目录一样,索引提供了在行中快速查询特定行的能力..             2.1优点:  1,大大加快搜索数据的速度,这是引入索引的主要原因..                             2,创建唯一性索引,保证数据库表中每一行数据的唯一性..