转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 数据库 >> Sql Server >> 正文
同时开21个进程对SQL进行速度测试         

同时开21个进程对SQL进行速度测试

作者:闵涛 文章来源:闵涛的学习笔记 点击数:2866 更新时间:2007/11/14 13:06:22

主要为了看一下,多个进程多表对SQL进行操作和单进程对单个表进行写数据的效率问题。

3次测试出来的数据如下

主console程序(由此进程创建21个进程)

table1——table20为20个进程对20个表分别写1万条记录

table总为单进程对1个表写20万条记录

所有表中只有1个为name的char字段

数据如下

第一次:

主console程序开始时间:21分25秒
table6开始时间:21分25秒
table5开始时间:21分25秒
主console程序结束时间:21分25秒
table1开始时间:21分25秒
table2开始时间:21分25秒
table总开始时间:21分25秒
table8开始时间:21分25秒
table3开始时间:21分25秒
table4开始时间:21分26秒
table7开始时间:21分26秒
table9开始时间:21分26秒
table10开始时间:21分26秒
table12开始时间:21分26秒
table13开始时间:21分26秒
table11开始时间:21分26秒
table15开始时间:21分26秒
table18开始时间:21分26秒
table17开始时间:21分26秒
table19开始时间:21分27秒
table14开始时间:21分27秒
table20开始时间:21分27秒
table16开始时间:21分27秒
table18结束时间:22分41秒
table19结束时间:22分41秒
table14结束时间:22分41秒
table1结束时间:22分41秒
table3结束时间:22分42秒
table17结束时间:22分42秒
table2结束时间:22分42秒
table9结束时间:22分42秒
table20结束时间:22分42秒
table6结束时间:22分42秒
table13结束时间:22分59秒
table5结束时间:23分0秒
table16结束时间:23分0秒
table8结束时间:23分0秒
table7结束时间:23分0秒
table11结束时间:23分0秒
table10结束时间:23分1秒
table12结束时间:23分1秒
table15结束时间:23分1秒
table4结束时间:23分1秒
table总结束时间:24分41秒

第二次:

主console程序开始时间:27分48秒
table9开始时间:27分48秒
table2开始时间:27分48秒
table3开始时间:27分48秒
主console程序结束时间:27分48秒
table总开始时间:27分48秒
table5开始时间:27分49秒
table1开始时间:27分49秒
table6开始时间:27分49秒
table7开始时间:27分49秒
table8开始时间:27分49秒
table4开始时间:27分49秒
table12开始时间:27分49秒
table10开始时间:27分50秒
table13开始时间:27分50秒
table15开始时间:27分50秒
table16开始时间:27分50秒
table18开始时间:27分50秒
table14开始时间:27分50秒
table19开始时间:27分50秒
table11开始时间:27分50秒
table17开始时间:27分50秒
table20开始时间:27分50秒
table3结束时间:28分52秒
table9结束时间:28分53秒
table5结束时间:29分0秒
table12结束时间:29分2秒
table16结束时间:29分2秒
table19结束时间:29分2秒
table14结束时间:29分3秒
table17结束时间:29分3秒
table13结束时间:29分3秒
table4结束时间:29分3秒
table7结束时间:29分3秒
table2结束时间:29分11秒
table6结束时间:29分15秒
table11结束时间:29分15秒
table18结束时间:29分16秒
table8结束时间:29分16秒
table20结束时间:29分16秒
table10结束时间:29分17秒
table1结束时间:29分17秒
table15结束时间:29分17秒
table总结束时间:31分2秒

第三次:

主console程序开始时间:32分17秒
table12开始时间:32分17秒
主console程序结束时间:32分17秒
table17开始时间:32分17秒
table2开始时间:32分18秒
table3开始时间:32分18秒
table1开始时间:32分18秒
table总开始时间:32分18秒
table7开始时间:32分18秒
table6开始时间:32分18秒
table5开始时间:32分18秒
table4开始时间:32分18秒
table10开始时间:32分18秒
table8开始时间:32分18秒
table9开始时间:32分18秒
table11开始时间:32分18秒
table13开始时间:32分18秒
table16开始时间:32分19秒
table20开始时间:32分19秒
table15开始时间:32分19秒
table14开始时间:32分19秒
table18开始时间:32分19秒
table19开始时间:32分19秒
table17结束时间:33分19秒
table2结束时间:33分24秒
table1结束时间:33分28秒
table10结束时间:33分29秒
table20结束时间:33分30秒
table9结束时间:33分30秒
table6结束时间:33分31秒
table14结束时间:33分31秒
table11结束时间:33分31秒
table18结束时间:33分31秒
table13结束时间:33分31秒
table12结束时间:33分36秒
table3结束时间:33分41秒
table5结束时间:33分43秒
table16结束时间:33分43秒
table7结束时间:33分43秒
table4结束时间:33分43秒
table19结束时间:33分44秒
table15结束时间:33分44秒
table8结束时间:33分44秒
table总结束时间:35分40秒

从数据可以看出来,21个进程同时写40万条记录大约需要3分钟多点的时间。

20个进程同时写的时间只比1个进程写快2分钟左右,当然这样测试是很不准确的,因为21个进程同时开,那单独写20万数据的进程所分配到的CPU时间片是很少的。

机器为512M,2.4G

也可以测试其它方面的,只要把程序稍微改动一下就可以。


程序B主控,程序A是用来开20个进程的,程序C是用来开1个进程的。

代码我都贴在下面

// DataAccess.h: interface for the CDataAccess class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_DATAACCESS_H__BE165B0F_3E92_44BC_9C3B_6F4CC36AD153__INCLUDED_)
#define AFX_DATAACCESS_H__BE165B0F_3E92_44BC_9C3B_6F4CC36AD153__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000


#include <assert.h>
#include <iostream>
#include <string>
using namespace std;


#define READ_ONLY 1
#define WRITE_ONLY 2
#define READ_WRITE 3

template<typename Container, typename ValueType, int nPropType>
class CProperty
{
public:
 CProperty()
 {
  m_cObject = NULL;
  Set = NULL;
  Get = NULL;
 }
 
 //设置属性所在的对象指针
 void setContainer(Container* cObject)
 {
  m_cObject = cObject;
 }
 
 //设置set指针,用来修改属性用
 void setter(void (Container::*pSet)(ValueType value))
 {
  if((nPropType == WRITE_ONLY) || (nPropType == READ_WRITE))
   Set = pSet;
  else
   Set = NULL;
 }
 
 //设置get指针,用来读取属性用
 void getter(ValueType (Container::*pGet)())
 {
  if((nPropType == READ_ONLY) || (nPropType == READ_WRITE))
   Get = pGet;
  else
   Get = NULL;
 }
 
 //重载=操作符,用于实现这样的操作 CAdoConnection.Connected = TRUE;
 //注意CAdoConnection.Connected其实是一个CProperty的对象
 //属性的实现关键在于重载=操作符和隐式转换操作符
 //重载后调用CProperty的拥有者的get、set函数来达到目的
 ValueType operator =(const ValueType& value)
 {
  assert(m_cObject != NULL);
  assert(Set != NULL);
  (m_cObject->*Set)(value);   
  return value;
 }
 
 //重载隐式转换操作符
 operator ValueType()
 {
  assert(m_cObject != NULL);
  assert(Get != NULL);
  return (m_cObject->*Get)();
 }
 
private:
 Container* m_cObject;      //属性的拥有者
 void (Container::*Set)(ValueType value); //set函数指针
 ValueType (Container::*Get)();    //get函数指针
};

class CAdoConnection
{
public:
 CAdoConnection();
 ~CAdoConnection();
 //隐式的转换操作,不推荐使用,只是暂时类没有封装好,给客户一个方便
 //使用时请确保指针在类的生命期内使用
 operator _ConnectionPtr();

public:
 CProperty<CAdoConnection, BOOL, READ_WRITE> Connected;
 string ConnectingString;
 string UserName, PassWord;

private:
 void SetConnected(BOOL ConnectFlag);
 BOOL GetConnected();

private:
 _ConnectionPtr m_ptrConn;

friend class CAdoCommand;
friend class CAdoQuery;


};


class CAdoCommand
{
public:
 CAdoCommand();
 ~CAdoCommand();
 void Execute();
 operator _CommandPtr();

public:
 CommandTypeEnum CommandType;
 string CommandText;
 CAdoConnection * m_AdoConnection;

private:
 _CommandPtr m_ptrComm;

};

class CAdoQuery
{
public:
 CAdoQuery();
 ~CAdoQuery();
 void Open();
 operator _RecordsetPtr();

public:
 string Sql;
 CAdoConnection * m_AdoConnection;

private:
 _RecordsetPtr m_ptrRec;

};


#endif // !defined(AFX_DATAACCESS_H__BE165B0F_3E92_44BC_9C3B_6F4CC36AD153__INCLUDED_)

// DataAccess.cpp: implementation of the CDataAccess class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "DataAccess.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

//CAdoConnection
CAdoConnection::CAdoConnection()
{
 Connected.setContainer(this); 
&nbs

[1] [2] [3]  下一页


[办公软件]在sybase中插入图片、PDF、文本文件  [办公软件]安装Sybase ASE
[办公软件]linux指令大全(完整篇)  [办公软件]Linux新手入门常用命令大全
[办公软件]在RedHat Linux 9里安装gaim0.80  [办公软件]浅谈Linux 下Java 1.5 汉字方块问题解决方法
[办公软件]Linux程序员必读:中文化与GB18030标准  [办公软件]linux指令大全
[办公软件]制作Linux启动盘的四种方法  [办公软件]Linux文件系统的反删除方法
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Sql Server  · MySql
    · Access  · ORACLE
    · SyBase  · 其他
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台