`
bd_cool
  • 浏览: 59957 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SQLServer中update操作如何优化

 
阅读更多



   前几日做了一个测试,目的要得出一个结论,单纯的insert、update、select在百万数据量时的表现。但是测试过程中发现修改操作的表现十分异常,特向各位请教。下面简单描述一下我的环境与方法。

  程序引入c3p0连接池,然后直接用jsp取连接操作,没有使用spring、hibernate等框架,数据库sqlserver2008,web服务器tomcat 6.0.26,数据库与web服务器各一台机器。

  数据库连接池最大200个连接,tomcat最大线程数1000。

  表结构,id为主键

 

并有唯一索引

CREATE UNIQUE NONCLUSTERED INDEX [IX-MEMBER] ON [dbo].[members]
(
 [name] ASC,
 [id_card] ASC
)

  测试脚本,为避免各虚拟用户修改同一条数据,事先缓存1万条数据,然后2000用户顺序来取数据,去做更新。

  测试方法,每虚拟用户每5秒执行一次请求,最高2000用户。每秒上两个用户。此时160万左右的数据量,结论让人。。。,上图吧


 

图一:虚拟用户数 


 

图二:每秒响应点击数

 



 
 图三:事务的执行时间

 

   每秒响应20次左右,事务响应时间也是一路飙升。没有分析出缘由。

  后来同样的表结构,和数据量,导入orcale数据库,同样的测试方法,结果如下,继续上图


 

图四:orcale测试时,虚拟用户数
 

 

图五:orcale测试时,每秒响应的点击数(天啊600+,但后面出现了连接数过多错误,暂且不管它)
 

 

图六:orcale测试时,事务响应时间,一直在0秒徘徊。

 

  得到这个结果,小弟无语了,怎么可能?还望各路大侠给个分析思路!如有类似测试分享,不胜感激!!!

 

 

 

 

 

  • 大小: 31.5 KB
  • 大小: 37.3 KB
  • 大小: 46.6 KB
  • 大小: 50.6 KB
  • 大小: 40.3 KB
  • 大小: 45.7 KB
  • 大小: 45.7 KB
分享到:
评论
1 楼 bd_cool 2011-09-28  
附上修改部分代码

/**
	 * 更新对象
	 * @Title: update 
	 * @param m
	 * @return boolean
	 * @throws
	 */
	public boolean update(Member m){
		Log.debug("update(Member)...");
		boolean ret = false ;
		Connection con = DbBaseSource.getConnection(baseType);
		PreparedStatement pstm = null;
		if(con != null){
			long st = Calendar.getInstance().getTimeInMillis();
			Log.debug("update:" + m.toString());
			try {
				//con.setAutoCommit(false);
				//con.setTransactionIsolation(con.TRANSACTION_READ_UNCOMMITTED);
				String sql = "update members set sex=?,birthday=?," +
						"home_address=?,phone=?,mobile=?,email=?,post_address=?," +
						"post_code=?,nation=?,degree=? " +
						"where id=? ";//and name=? and id_card=?
				pstm = con.prepareStatement(sql);
				pstm.setInt(1, m.getSex());
				pstm.setTime(2, new Time(m.getBirthday().getTime()));
				pstm.setString(3, m.getHomeAddress());
				pstm.setString(4, m.getPhone());
				pstm.setString(5, m.getMobile());
				pstm.setString(6, m.getEmail());
				pstm.setString(7, m.getPostAddress());
				pstm.setString(8, m.getPostCode());
				pstm.setInt(9, m.getNation());
				pstm.setInt(10, m.getDegree());
				pstm.setString(11, m.getId());
				//pstm.setString(12, m.getName());
				//pstm.setString(13, m.getIdCard());
				int n=0;
				//synchronized(updateLock){
					n = pstm.executeUpdate();
				//}
				//con.commit();
				if(n == 1){
					ret = true;
					Log.debug("updateSUCC!!");
				}
			} catch (Exception e) {
				try {
					if(con != null){
						con.rollback();
					}
				} catch (SQLException e1) {
					e1.printStackTrace();
				}
				e.printStackTrace();
			} finally {
				long et = Calendar.getInstance().getTimeInMillis();
				long t = et - st;
				if(t > OP_TIMEOUT * 1000){
					Log.debug("执行超过" + OP_TIMEOUT + " S, op=S_UP, m.id=" + m.getId(),t);
				}
				try {
					if(pstm != null){
						pstm.close();
					}
				} catch (Exception e) {
					e.printStackTrace();
				}
				try {
					if(con != null){
						con.close();
					}
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}else{
			Log.debug("updateFailed!!");
		}
		Log.debug("updateEnd");
		return ret;
	}

相关推荐

    SQLServer添加UPDATE回滚日志.doc

    在数据没有备份的情况下,它可以对数据进行恢复,无论是update/insert/delete都可以进行回滚操作,有demo做介绍,

    SQLserver2008查询性能优化

    在SQL Server 2008中,查询性能优化是一项至关重要的任务,因为它直接影响到数据库系统的响应时间和整体效率。本文将探讨几个关键的优化策略,尤其是关于索引的创建和管理。 首先,创建有用的索引是提升查询性能的...

    SQL Server 2008查询性能优化 源代码

    在SQL Server 2008中,查询性能优化是一项至关重要的任务,因为它直接影响到数据库系统的响应速度和整体效率。"SQL Server 2008查询性能优化源代码"这一资源提供了一种深入学习和实践的方法,帮助我们理解并提升SQL...

    sqlserver基本操作

    在这个"sqlserver基本操作"的主题中,我们将探讨SQL Server的一些核心概念和常用操作。 首先,我们来看一下SQL Server的添加操作。在SQL Server中,添加操作主要涉及以下几个方面: 1. **创建数据库**:使用`...

    qt 操作 sql server 数据库

    这个项目"qt 操作 sql server 数据库"将展示如何使用Qt与SQL Server进行交互,实现数据的CRUD(创建、读取、更新和删除)操作。 首先,我们需要了解Qt中的SQL模块,它提供了与多种数据库系统的接口,包括SQL Server...

    VS2010连接SQL Server 2008操作与编程

    SQL Server 2008自身也提供了许多功能,如索引优化、分区视图、触发器、视图、存储过程等,这些都可能在VS2010中进行设计和管理。同时,它支持T-SQL扩展,用于复杂的业务逻辑和数据处理。 总之,VS2010连接SQL ...

    sql server性能优化总结

    以上就是对SQL Server性能优化的一些核心要点,实践中应结合具体业务场景灵活运用,持续监控和调整,以达到最佳性能。文件"sql server性能优化.doc"和"SQL SERVER中一些常见性能问题的总结.htm"可能包含了更详细的...

    SQL Server中的XML数据进行insert、update、delete

    SQL Server中新增加了XML.Modify()方法,分别为xml.modify(insert),xml.modify(delete),xml.modify(replace)对应XML的插入,删除和修改操作。 本文以下面XML为例,对三种DML进行说明: declare @XMLVar xml = ‘ ...

    C++完整数据库SQLServer操作类(ODBC)

    总的来说,`DBOP`类提供了一种简洁的方式,让C++程序员可以利用ODBC接口与SQL Server进行交互,简化了数据库操作的代码编写,提高了代码的可读性和可维护性。在实际项目中,这种封装是非常常见的,能够帮助开发者更...

    sqlserver日志查看工具

    - **事务日志**:记录所有数据库更改操作,包括DML(数据操纵语言)如INSERT、UPDATE、DELETE,以及DDL(数据定义语言)如CREATE、ALTER和DROP。它是数据库恢复的关键组成部分。 - **错误日志**:记录SQL Server...

    SQLSERVER中对Image(大对象)对象操作

    本篇文章将深入探讨如何在SQL Server中对`Image`对象进行操作,包括插入、查询、更新和删除等基本操作,以及优化策略和注意事项。 1. **插入Image数据** 要向数据库表中插入`Image`类型的值,你需要使用`INSERT`...

    通过SQL Server操作MySQL的步骤和方法

    在 SQL Server 中操作 MySQL 之前,需要安装 MySQL 的驱动程序。MySQL 的驱动安装包可以在 MySQL 官方网站上下载到。在安装完成后,可以在 ODBC 数据源管理器中看到安装成功的 MySQL ODBC 驱动程序。 1.1 安装 ...

    SQLserver数据库操作例程.rar

    SQL Server是一款由微软开发的关系型数据库管理系统,广泛...以上这些知识点都是易语言SQLserver数据库操作例程中可能会涉及的。通过学习和实践这些示例,你可以掌握如何在易语言中有效地管理和操作SQL Server数据库。

    sql server 2000 数据库操作视频(全)

    通过这套完整的视频教程,学习者可以深入理解SQL Server 2000的各个核心组件,掌握数据库设计、管理、查询优化等关键技能,为实际工作中的数据管理和分析打下坚实的基础。无论是初学者还是有一定经验的开发者,都能...

    sql server中文帮助文档chm

    3. **SQL语言**:SQL(Structured Query Language)是SQL Server的核心,文档中详细解析了SELECT、INSERT、UPDATE、DELETE等基本语句,以及JOIN、GROUP BY、HAVING等复杂查询操作。此外,还有关于T-SQL(Transact-...

    SQL Server宝典SQL Server语句大全

    《SQL Server宝典SQL Server语句大全》涵盖了SQL Server数据库管理系统中的各种核心概念、操作语法以及高级技巧。作为一款广泛使用的数据库系统,SQL Server提供了强大的数据管理能力,支持复杂的查询、事务处理、...

    MFC 源码 VC++ sqlserver数据库访问 insert update

    在给定的压缩包文件中,我们可以看到这是一份关于MFC应用,用于SQL Server数据库的插入(insert)和更新(update)操作的源代码。 首先,让我们深入了解一下MFC框架。MFC是基于面向对象编程(OOP)设计的,它封装了...

    kettle 连接sqlserver 驱动

    标题 "kettle 连接sqlserver 驱动" 涉及到的是在数据集成工具 Pentaho Data Integration(简称 Kettle 或 PDI)中,如何配置和使用 SQL Server 数据库的连接。Kettle 是一个强大的ETL(Extract, Transform, Load)...

    C#操作sqlserver

    接下来,我们将深入探讨如何在C#中操作SQL Server。 首先,要连接到SQL Server,我们需要使用`SqlConnection`类。创建一个新的`SqlConnection`实例时,需要提供一个连接字符串,该字符串包含了服务器名、数据库名、...

    SQL Server中读取XML文件的简单做法

    在SQL Server中,读取XML文件并对其进行处理是数据库...在SQL Server的后续版本中,如SQL Server 2005及更高版本,处理XML的功能得到了显著增强,例如引入了XML数据类型和更强大的XML方法,使得XML操作更加简便高效。

Global site tag (gtag.js) - Google Analytics