解决考试系统高并发数据载入不对问题

背景:

如今这版考试系统分为学生考试端和后台管理端。同一登陆页,学生输入学号、password进入考试界面,管理员输入username、password进入后台管理界面。平时没有学生考试时。后台管理界面学院下拉框能够正确的从数据库读取并载入数据,但有学生考试时。后台管理界面学院下拉框获取的数据有时为空,有时为脏数据。

我们所做的尝试:

1、再现数据载入不对场景

用LoadRunner压力測试程序模拟255人在线考试的过程,发现当考试人数达到50人时,后台管理界面開始出现上述数据载入不对问题。

2、验证数据库是否产生了死锁

我们在207serverIIS上公布两套同样的考试系统A、B,A、B考试系统訪问同一数据库,用LoadRunner模拟255人訪问A系统,当A系统出现数据载入不对问题时。用B系统登录后台管理,每次刷新数据都能正确载入。

因此得出结论,不是数据库的问题,不然B系统也会出现数据载入不对问题。

3、验证IIS分配给应用程序的虚拟内存和专用内存是否太小

我们用LoadRunner模拟255人訪问考试系统。当系统出现数据载入不对问题时。在IIS的应用程序池对考试系统进行回收操作,系统数据正确载入。一直刷新。过段时间数据又不能正常载入。我们在IIS的应用程序池把考试系统的虚拟内存和专用内存设置为最大值,刷新页面仍然出现数据载入不对问题。

4、优化SQLHelper类

在SQLHelper中用到了非常多Connection、SqlCommand、SqlDataAdapter、SqlDataReader,原来是放在Using中运行,为了确保上述操作在运行完后释放内存。又加入了try、catch、finally,在finally关闭SqlDataReader、SqlDataAdapter、SqlCommand、Connection,但结果数据仍是载入不对。

5、在数据库连接串加入MultipleActiveResultSets=true属性

因为在报的黄页中有一个错误提示是“There is already an open DataReader associated with this Command which must be closed first”,所以尝试在数据库连接串加入MultipleActiveResultSets=true属性。同意在单个连接上运行多重的数据库查询或存储过程。但结果数据仍是载入不对。

6、把数据库的连接池最大值由1200改为500

做了上述5步操作,问题还是没有解决。于是尝试着换个思路,数据库连接池是不是设置的太大了,把最大值由1200改为了500。问题解决。

我们能够在百度百科查一下数据库连接池的定义:数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。不管这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时。这些请求将被增加到等待队列中。

最小连接数:是连接池一直保持的数据库连接,所以假设应用程序对数据库连接的使用量不大。将会有大量的数据库连接资源被浪费;

最大连接数:是连接池能申请的最大连接数,假设数据库连接请求超过此数,后面的数据库连接请求将被增加到等待队列中。这会影响之后的数据库操作。

最小连接数与最大连接数相差太大:那么最先的连接请求将会获利,之后超过最小连接数量的连接请求等价于建立一个新的数据库连接。

只是,这些大于最小连接数的数据库连接在使用完不会立即被释放,它将被放到连接池中等待反复使用或是空暇超时后被释放。

原来数据库连接池最大为1200。最小为300。系统初始化时创建300个数据库连接,之后假设连接数超过300,则创建新的连接。可实际系统执行过程中并未用过这么多的数据库连接,造成数据库连接(是一种关键的有限的昂贵的资源)的浪费。

问题尽管解决。但仍然有一个疑问:“为什么数据库连接池最大值设置太大会造成数据载入不对”?

时间: 2024-10-07 00:44:49

解决考试系统高并发数据载入不对问题的相关文章

解决考试系统高并发数据加载不正确问题

背景: 现在这版考试系统分为学生考试端和后台管理端.同一登陆页,学生输入学号.密码进入考试界面,管理员输入用户名.密码进入后台管理界面.平时没有学生考试时,后台管理界面学院下拉框可以正确的从数据库读取并加载数据,但有学生考试时,后台管理界面学院下拉框获取的数据有时为空,有时为脏数据. 我们所做的尝试: 1.再现数据加载不正确场景 用LoadRunner压力测试程序模拟255人在线考试的过程,发现当考试人数达到50人时,后台管理界面开始出现上述数据加载不正确问题. 2.验证数据库是否产生了死锁 我

构建高并发&高可用&安全的IT系统-高并发部分

什么是高并发? 狭义来讲就是你的网站/软件同一时间能承受的用户数量有多少 相关指标有 并发数:对网站/软件同时发起的请求数,一般也可代表实际的用户 每秒响应时间:常指一次请求到系统正确响的时间(以秒为单位) TPS(每秒事务数):每秒钟可以处理的事务(请求响应),大概的计算公式为:并发数/每秒响应时间=TPS QPS(每秒查询数):TPS事务有读有写,而QPS指的是读取,一般情况QPS应是高于TPS的 IP(独立IP):一个IP可以发生多次UV和PV PV(访问量):即Page View,页面浏

java系统高并发解决方案(转载)

转载博客地址:http://blog.csdn.net/zxl333/article/details/8685157 一个小型的网站,比如个人网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对系统架构.性能的要求都很简单,随着互联网业务的不断丰富,网站相关的技术经过这些年的发展,已经细分到很细的方方面面,尤其对于大型网站来说,所采用的技术更是涉及面非常广,从硬件到软件.编程语言.数据库.WebServer.防火墙等各个领域都有了很

java系统高并发解决方案(转载收藏)

一个小型的网站,比如个人网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对系统架构.性能的要求都很简单,随着互联网业务的不断丰富,网站相关的技术经过这些年的发展,已经细分到很细的方方面面,尤其对于大型网站来说,所采用的技术更是涉及面非常广,从硬件到软件.编程语言.数据库.WebServer.防火墙等各个领域都有了很高的要求,已经不是原来简单的html静态网站所能比拟的. 大型网站,比如门户网站.在面对大量用户访问.高并发请求方面,

Apache Spark技术实战之7 -- CassandraRDD高并发数据读取实现剖析

未经本人同意,严禁转载,徽沪一郎. 概要 本文就 spark-cassandra-connector 的一些实现细节进行探讨,主要集中于如何快速将大量的数据从cassandra 中读取到本地内存或磁盘. 数据分区 存储在 Cassandra 中数据的一般都会比较多,记录数在千万级别或上亿级别是常见的事.如何将这些表中的内容快速加载到本地内存就是一个非常现实的问题.解决这一挑战的思路从大的方面来说是比较简单的,那就是将整张表中的内容分成不同的区域,然后分区加载,不同的分区可以在不同的线程或进程中加

解决web应用 高并发

并发用户大,实际是吞吐量大,另外一个延迟响应也要短, 吞吐量和延迟是性能的两个衡量指标,另外还有一个动态指标:Scalable可扩展伸缩性. 根据业务特点: 1.以读为主,可以考虑缓存 CDN 2.读写都为主,类似Twitter那种每个用户都要发微博(写),看微博(读),数据分区,NoSQL等等技术,参考:Twitter架构 3.读写为主,且数据为结构,非松散,需要事务机制,参考Ebay架构,缺省为弱一致性,缩小一致性事务性的范围,其他则都通过异步实现弱一致性. 4.读写为主,且主要数据都是结构

PHP秒杀系统 高并发高性能的极致挑战

第1章 课程介绍秒杀系统在各种网站和应用中经常会用到.本课程从基本的系统设计和基础功能开始教导大家用PHP来设计和实现秒杀系统,并且为海量并发提供更高级的技术方案和实现手段.1-1 课程导学1-2 课程目标1-3 秒杀系统特点1-4 课程技术分析 第2章 系统技术选型分析本章节需要大家掌握基础的LNMP平台的开发,提供基础的数据封装类,让后续的开发得心应手.我们会讲解到系统环境的技术选型,我们采用的数据库是Mysql,还用到Redis来作为高性能缓存, 为了让大家不拘泥于框架的选择,巩固基础知识

PHP秒杀系统 高并发高性能的极致挑战 视频教程

第1章 课程介绍 1-1 课程导学 1-2 课程目标 1-3 秒杀系统特点 1-4 课程技术分析第2章 系统环境搭建 2-1 技术选型分析之基础服务 2-2 技术选型分析之CDN 2-3 技术选型分析之负载均衡 2-4 开发环境准备 2-5 MySQL封装类 2-6 Redis封装类 2-7 调试封装类(上)有点小声 2-8 调试封装类(下)第3章 系统设计 3-1 系统设计之项目基本功能 3-2 系统设计之项目流程 3-3 数据库设计之活动信息表 3-4 数据库设计之商品信息表 3-5 数据库

Java系统高并发解决方案

一.对于被频繁调用,更新频率较低的页面,可以采用HTML静态化技术 二.图片服务器分离 三.数据库集群和库表散列 mysql主从.m-m-s-s-s...(2个主,多个从.多个从使用负载均衡.主写入数据,从读取数据) 四.缓存.众多的缓存框架 五.负载均衡.nginx,lvs 六.搜索用单独的服务器,搜索框架