本文译自 《A Comparative Study on the Performance of the Top DBMS Systems 》Youssef Bassil LACSC – Lebanese Association for Computational Sciences Registered under No. 957, 2011, Beirut, Lebanon

摘要
数据库管理系统是当今将数据组织成可以搜索和更新的集合地最可靠的手段。然而,市场上有许多DBMS系统,每个系统在可靠性、可用性、安全性和性能方面都有其优点和缺点。本文将对顶级DBMS系统的性能进行比较研究。它们主要是MS SQL Server 2008、Oracle 11g、IBM DB2、MySQL 5.5和MS Access 2010。测试的目的是在测试的5个不同的DBMS系统上执行不同复杂程度的SQL查询。这将为建立一个头对头的比较评估铺平道路,在测试完成后显示每个DBMS的平均执行时间、内存使用率和CPU利用率。

关键词
DBMS,性能研究,SQL Server,MySQL,Oracle,DB2,Access

  1. 引言
    DBMS是数据库管理系统的简称,在大多数需要存储、检索、查询数字数据的现实项目中发挥着重要作用。例如,动态网站、会计信息系统、工资系统、库存管理系统都依靠内部数据库作为容器来存储和管理其数据[1]。如今,许多软件开发公司都在开发和生产DBMS系统,如果是免费和开源的DBMS,成本为零元,如果是专有的DBMS,成本则在数千元美元。特别是,每个DBMS都有一系列不同的功能和非功能特性和规格,每个特性和规格都有其优势和劣势。其中之一是性能,它决定了一个DBMS处理和执行查询的速度。本文从性能角度出发,对目前市场上五种不同的DBMS进行比较研究。它们分别是MS SQL Server 2008[2]、Oracle 11g[3]、IBM DB2[4]、MySQL 5.5[5]和MS Access 2010[6]。为此,我们制作了多个不同复杂程度的SQL查询,并针对这些著名的DBMS进行了测试。此外,我们还使用了一个性能基准来测量每个执行的SQL查询的执行时间,此外还有CPU利用率、内存使用率、虚拟内存使用率和线程数。在适当的时候,绘制了一个头对头的比较,展示了被测试的不同DBMS之间的性能差异。

  2. 背景
    本节讨论了被测试的不同DBMS的历史、版本和功能。它们分别是MS SQL Server 2008、Oracle 11g、IBM DB2、MySQL 5.5和MS Access 2010。
    2.1. MS SQL Server 2008
    Microsoft SQL Server是微软公司生产的关系型数据库管理系统(RDBMS),它的主要查询语言是Transact-SQL,是微软和Sybase都使用的ANSI/ISO标准结构化查询语言(SQL)的实现。Microsoft SQL Server支持原子、一致、隔离和持久的事务。它包括对数据库镜像和集群的支持。一个SQL服务器集群是一个相同配置的服务器的集合,它有助于在多个服务器之间分配工作负载。SQL server还支持分布式数据库的数据分区,此外,数据库镜像允许根据某些预定义的触发器,在SQL Server的另一个实例上创建数据库内容的镜像,以及事务日志[7]。
    2.2. Oracle 11g
    Oracle数据库(通常称为Oracle RDBMS或简称为Oracle),是Oracle公司发布的关系型数据库管理系统(RDBMS),它包括至少一个应用程序的实例,以及数据存储。一个实例包括一组操作系统进程和与存储交互的内存结构。除了存储之外,数据库还包括在线重做日志,它保存着事务性的历史。进程又可以将在线重做日志归档为归档日志,为数据恢复和某些形式的数据复制提供基础。Oracle RDBMS在逻辑上以表空间的形式存储数据,在物理上以数据文件的形式存储数据。在物理层面上,数据文件由一个或多个数据块组成,不同数据文件之间的数据块大小可以不同。Oracle的特点是数据字典、索引和集群。10g以后的版本,引入了网格计算功能,实例应用可以使用网格中另一个节点的CPU资源[8]。
    2.3. IBM DB2
    DB2是IBM的关系型数据库管理系统之一,可运行在Unix、Windows或Linux服务器机器上。DB2可以通过命令行或GUI界面进行管理。命令行界面需要更多的产品知识,但可以更容易地进行脚本化和自动化。GUI是一个多平台的Java客户端,包含各种适合新手用户的向导。DB2同时支持SQL和XQuery。DB2具有XML数据存储的原生实现,XML数据被存储为XML,以便使用XQuery更快地访问。DB2还支持集成到Eclipse和Visual Studio .NET集成开发环境中。DB2 DBMS的一个重要特点是错误处理,在DB2程序内使用SQL通信区结构,在每次调用SQL语句的API后,向应用程序返回错误信息[9]。
    2.4. MySQL 5.5
    MySQL是一个免费的、开源的、多线程的、多用户的SQL数据库管理系统,其安装量超过1000万。基本程序以服务器的形式运行,提供多用户对多个数据库的访问。MySQL包括ANSI SQL 99的广泛子集,以及扩展、跨平台支持、存储过程、触发器、游标、可更新视图和X/Open XA分布式事务处理支持。此外,它还支持两阶段提交引擎、独立的存储引擎、SSL支持、查询缓存、每个从站一个主站、每个主站多个从站的复制、嵌入式数据库库以及使用InnoDB集群引擎的ACID兼容[10]。
    2.5. MS Access 2010
    Microsoft Office Access的前身是Microsoft Access,是微软公司推出的关系型数据库管理系统,它将关系型的Microsoft Jet数据库引擎与图形化的用户界面和软件开发工具相结合。它是2010年微软Office系统中的一员。从程序员的角度来看,Access的一个好处是它与SQL查询的相对兼容性。与完整的RDBMS不同,Jet Engine缺乏数据库触发器和存储过程。尽管如此,它提供了一种特殊的语法,允许创建带有参数的查询,其方式看起来就像创建存储过程一样,但这些过程仅限于每个过程中的一条语句。微软Access确实允许表格中包含在对底层表进行更改时触发的代码,而且在Access中使用直通查询和其他技术来运行支持这些的RDBMS中的存储过程是很常见的。MS Access被小型企业、大公司的部门以及业余程序员用来创建临时定制的桌面系统,以处理数据的创建和操作。一些专业的应用开发人员使用Access进行快速的应用开发,特别是用于创建原型和独立的应用程序,作为路上销售员的工具[11]。

  3. 测试评估
    3.1. 受测的数据库管理系统
    通常有5个被测试的DBMS,其中4个是客户/服务器DBMS,适合建立中大型数据库,1个是独立的DBMS,适合建立小规模的临时数据库。它们分别是MS SQL Server 2008、Oracle 11g、IBM DB2、MySQL 5.5和MS Access 2010。MS Access是唯一的非客户/服务器数据库管理系统。
    3.2. 测试平台
    测试采用双处理器,Intel Xeon E5649,6x2核心,处理器,时钟频率为2.53GHz,随机访问内存(RAM)为32GB,二级存储容量为2TB。操作系统为MS Windows Server 2008,64位。
    3.3. 测试仪
    测试仪是在.NET框架4.0下使用C#.NET开发的计算机应用程序。它执行两个任务。第一个任务是在测试执行之前,自动在数据库表中填充1,000,000行。第二个是执行实际的SQL查询。图1显示了测试器的主GUI界面。
    3.4. 衡量基准
    测试仪实现了一个内置的计时器,以毫秒为单位测量从开始执行一个特定的SQL查询到结束的执行时间。关于内存的消耗和利用,使用了MS Windows任务管理器(WTM)工具,该工具已经随同MS Windows操作系统的所有版本[12]。图2显示了WTM工具的界面。
    3.5. 数据库设计
    基本上,在所有不同的数据库管理系统上测试的数据库包括15个不同的关系或通过关系联系在一起的表。它是一个在不同的五个被测试的DBMS下实现的关系模型数据库。该数据库适合一个商业零售系统。它包括一个用于创建发票、收据和采购订单的前端系统和一个用于管理物品库存的后端系统。图3描述了被测试数据库的逻辑设计。

  4. 测试过程
    在测试的五个不同的DBMS上执行了不同的SQL查询。事实上,这些查询的复杂程度不同,从简单类型到非常复杂的类型都有。值得注意的是,在开始测试过程之前,所有五个数据库都被填充了1,000,000条虚拟数据。
    查询#1
    这是一个非常简单的查询,其任务是在没有任何条件或连接的情况下检索行。
    SELECT * FROM Item;

    查询#2
    这个查询使用了复杂的条件与逻辑运算符的组合。
    SELECT * FROM Invoice
    WHERE Invoice.in_id > 50 AND Invoice.in_date > 1/1/2006 AND Invoice.in_date<1/1/2007 AND Invoice.in_description LIKE ‘%ohp%’ AND Invoice.in_totalinletter LIKE ‘%USD’ AND Invoice.in_total = Invoice.in_totalafterdiscount AND Invoice.in_total <> 100 OR NOT Invoice.in_cu_id >= 5 AND Invoice.in_id BETWEEN 1 AND 10000 OR Invoice.in_id > 49+1 AND Invoice.in_total+33 <> 5 AND Invoice.in_total = - Invoice.in_totalafterdiscount * 2 ;

    查询#3
    此查询用于测试不同表之间的连接操作。
    SELECT Customer.cu_id , Invoice.in_id , InvoiceDetail.ind_qty , Item.it_serialnumber , Movement.mo_description , Movement_Details.mo_it_id , Users.us_id , Users.us_code , PurchaseOrder.po_description , Supplier.su_name FROM Customer , Invoice , InvoiceDetail , Item , Movement , Movement_Details , Users , PurchaseOrder , Supplier WHERE Supplier.su_name = “Mike” AND Customer.cu_id = Invoice.in_cu_id AND InvoiceDetail.ind_in_id = Invoice.in_id AND InvoiceDetail.ind_it_id = Item.it_id AND Movement_Details.mod_mo_id = Movement.mo_id AND Movement.mo_us_id = Users.us_id AND PurchaseOrder.po_us_id =Users.us_id AND PurchaseOrder.po_us_id = Users.us_id AND PurchaseOrder.po_su_id AND Supplier.su_id ;

    查询#4
    此查询用于测试每个DBMS的排序操作。
    SELECT Customer.cu_id , Customer.cu_name , Customer.cu_telephone , Customer.cu_fax , Customer.cu_email FROM Customer ORDER BY Customer.cu_id , Customer.cu_name DESC , Customer.cu_telephone DESC, Customer.cu_fax , Customer.cu_email DESC ;

    查询#5
    这个查询的目的是通过执行不同的算术函数来测试DBMS的计算能力。
    SELECT SUM(Invoice.in_total) , AVG(Invoice.in_totalafterdiscount) , MAX(Invoice.in_total) , COUNT(Customer.cu_id) , SUM(InvoiceDetail.ind_qty) FROM Customer , Invoice , InvoiceDetail WHERE Customer.cu_id = Invoice.in_cu_id AND Invoice.in_id = InvoiceDetail.ind_in_id GROUP BY Invoice.in_id ;

    查询#6
    此查询在前面的查询条件中增加了HAVING子句。
    SELECT SUM(Invoice.in_total) , AVG(Invoice.in_totalafterdiscount) , MAX(Invoice.in_total) , COUNT(Customer.cu_id) , SUM(InvoiceDetail.ind_qty) FROM Customer , Invoice , InvoiceDetail WHERE Customer.cu_id = Invoice.in_cu_id AND Invoice.in_id = InvoiceDetail.ind_in_id GROUP BY Invoice.in_id HAVING COUNT(Invoice.in_id)>0 AND SUM(Invoice.in_total) = AVG(Invoice,in_totalafterdiscount) ;

    查询#7
    这个查询可以测试每个DBMS在使用内部嵌套SELECTs时的能力。
    SELECT Customer.cu_name FROM Customer WHERE Customer.cu_name = (SELECT Users.us_name FROM Users WHERE Users.us_class = “administrator”) AND Customer.cu_fax = (SELECT Supplier.su_fax FROM Supplier WHERE Supplier.su_phone = “123456”) AND Customer.cu_email = (SELECT Supplier.su_email FROM Suppliers WHERE Supplier.su_address LIKE “%h%”) ;

    查询#8
    现在是终极测试,它将把之前的所有查询合并成一个单一的原子SQL查询。
    SELECT Customer.cu_id , Invoice.in_id , InvoiceDetail.ind_qty , Item.it_serialnumber , Movement.mo_description , Movement_Details.mo_it_id , Users.us_id , Users.us_code , PurchaseOrder.po_description , Supplier.su_name , SUM(Invoice.in_total) , AVG(Invoice.in_totalafterdiscount) , MAX(Invoice.in_total), COUNT(Customer.cu_id) , SUM(InvoiceDetail.ind_qty) FROM Customer , Invoice , InvoiceDetail , Item , Movement , Movement_Details , Users , PurchaseOrder , Supplier WHERE Invoice.in_id > 50 AND Invoice.in_date > 1/1/2006 AND Invoice.in_date < 1/1/2007 AND Invoice.in_description LIKE ‘%ohp%’ AND Invoice.in_totalinletter LIKE ‘%USD’ AND Invoice.in_total = Invoice.in_totalafterdiscount AND Invoice.in_total <> 100 OR NOT Invoice.in_cu_id >=5 AND Invoice.in_id BETWEEN 1 AND 10000 OR Invoice.in_id > 49+1 AND Customer.cu_name = (SELECT Users.us_name FROM Users WHERE Users.us_class = “administrator”) AND Customer.cu_fax = (SELECT Supplier.su_fax FROM Supplier WHERE Supplier.su_phone = “123456”) AND Customer.cu_id = Invoice.in_cu_id AND InvoiceDetail.ind_in_id = Invoice.in_id AND InvoiceDetail.ind_it_id = Item.it_id AND Movement_Details.mod_mo_id = Movement.mo_id AND Movement.mo_us_id = Users.us_id AND PurchaseOrder.po_us_id =Users.us_id AND PurchaseOrder.po_us_id = Users.us_id AND PurchaseOrder.po_su_id AND Supplier.su_id ; ORDER BY Customer.cu_id , Customer.cu_name DESC , Invoice.in_id DESC, Users.us_name , Invoice.in_description DESC ; GROUP BY Customer.cu_id , Invoice.in_id , InvoiceDetail.ind_qty , Item.it_serialnumber , Movement.mo_description , Movement_Details.mo_it_id , Users.us_id , Users.us_code , PurchaseOrder.po_description , Supplier.su_name HAVING COUNT(Invoice.in_id)>0 AND SUM(Invoice.in_total) = AVG(Invoice,in_totalafterdiscount) ;

    查询#9
    此查询测试被测DBMS执行复杂条件的UPDATE语句的能力。
    UPDATE Item SET Item.it_price = Item.it_price * 0.1 AND Item.it_qtity = 10 AND Item.it_description = “TV” WHERE Item.it_id > 10 AND Item.it_expirydate > 1/1/2007 AND Item.it_expirydate < 1/1/2008 AND Item.it_manufacturer = “Philips” OR Item.it_manufacturer = “Sharp” OR Item.it_manufacturer = “Toshiba” ;

    查询#10
    最后一个查询在选定的DBMS上执行DELETE查询。
    DELETE FROM Invoice WHERE Invoice.in_date > 1/1/2006 AND Invoice.in_date < 1/1/2007 AND Invoice.in_description LIKE ‘%vtt%’ AND Invoice.in_totalinletter LIKE ‘%USD’ AND Invoice.in_total = Invoice.in_totalafterdiscount AND Invoice.in_ totalafterdiscount <> 33.1 OR NOT Invoice.in_cu_id >= 5 AND Invoice.in_id BETWEEN 1 AND 10000 OR Invoice.in_id < 71/2 AND Invoice.in_total+33 <> 5 AND Invoice.in_total = Invoice.in_totalafterdiscount – 112 ;

  5. 结果&结论
    测试的结果用图表和统计直方图来表示。显然,没有最终的赢家。图表清楚地表明,IBM DB2是速度最快的DBMS,然而MS Access的CPU利用率低于其他DBMS,IBM DB2是消耗主内存最多的DBMS。图4代表平均执行时间,图5代表平均CPU利用率,图6代表平均内存占用率。


顶级数据库管理系统的性能比较研究(论文翻译)相关推荐

  1. 「数据管理」顶级数据库管理系统供应商

    确定哪种类型的数据库或数据库服务最适合您的企业的最佳方法是什么?这完全取决于您需要什么类型的用例.在本文中了解更多信息. 基本上,我们每天使用的所有数字信息都在世界某处的数据库管理系统或存储阵列中.这 ...

  2. 「数据管理系统」顶级数据库管理系统供应商

    确定哪种类型的数据库或数据库服务最适合您的企业的最佳方法是什么?这完全取决于您需要什么类型的用例.在本文中了解更多信息. 基本上,我们每天使用的所有数字信息都在世界某处的数据库管理系统或存储阵列中.这 ...

  3. 基于Java企业财务管理系统的设计与实现(论文+源码)_kaic

    摘 要                                                                                              随着计 ...

  4. mysql dbms是什么_数据库管理系统(DBMS)是用来做什么的?

    展开全部 数据库管理系统(database management system)是一种操纵和32313133353236313431303231363533e58685e5aeb93133326235 ...

  5. mysql是应用软件还是系统软件_数据库管理系统属于系统软件还是应用软件

    展开全部 数据库管理系62616964757a686964616fe59b9ee7ad9431333332623965统(database management system)是一种操纵和管理数据库的 ...

  6. 与计算机图形学相关的研究论文,计算机图形学相关论文范文数据库,与计算机图形学的相关技术与相关专科毕业论文范文...

    计算机图形学相关论文范文数据库,与计算机图形学的相关技术与相关专科毕业论文范文 关于计算机图形学及计算机及计算机动画方面的免费优秀学术论文范文,计算机图形学相关本科毕业论文,关于计算机图形学的相关技术 ...

  7. 2022年华数杯C题插层熔喷非织造材料的性能控制研究数学建模论文及程序

    2022年华数杯C题插层熔喷非织造材料的性能控制研究   仅献给读者的你 原题再现:   熔喷非织造材料是口罩生产的重要原材料,具有很好的过滤性能,其生产工艺简单.成本低.质量轻等特点,受到国内外企业 ...

  8. 计算机组成 quia,钢筋砼不等肢异形柱的延性性能分析研究-结构工程专业论文.docx...

    钢筋砼不等肢异形柱的延性性能分析研究-结构工程专业论文 摘要钢筋砼异形柱结构体系在居住建筑中的应用越来越广泛,但目前对等肢异形 摘要 钢筋砼异形柱结构体系在居住建筑中的应用越来越广泛,但目前对等肢异形 ...

  9. 最新最全-中文生物医学命名实体识别最新研究论文、资源、数据集、性能整理分享

    本资源旨在跟踪中文生物医学自然语言处理的进展,收集整理相关的论文列表和展示现存方法性能. 内容整理自网络,源地址:https://github.com/lingluodlut/Chinese-BioN ...

最新文章

  1. textarea选中行删除_Vim、gvim操作花样删除
  2. 经典C语言程序100例之四四
  3. arcgis for android 学习 - (5) 在地图指定位置添加“标记“,并尝试选中它
  4. dicom worklist、pacs环境搭建
  5. Python实现google翻译
  6. ollydebug 调试上手基础
  7. python 拼接 遥感影像_Python干货 | 遥感影像拼接
  8. 时间复杂度和空间复杂度OvO
  9. Spring boot Mybatis type-aliases-package错误解决
  10. java比较器原理理解
  11. 什么是物联网边缘计算网关?物联网边缘计算网关的实际应用。
  12. ThinkPHP上传图片并压缩为缩略图
  13. CentOS 6.8 安装TigerVNC 实现 Linux 远程桌面并安装火狐浏览器
  14. 吴裕雄--天生自然 诗经:游子吟
  15. 表示数值的字符串——《剑指offer》
  16. Matlab GUI 变量传递方法
  17. php中怎样表示组合框,5.8.1 组合框的介绍和使用 - 按键精灵资源站 按键精灵教程,学习脚本制作,脚本大全,视频教程...
  18. php jq天室,jQuery实现简单聊天室
  19. python表白神器_python实现抖音表白神器
  20. 专业的CMMI认证咨询机构-CMMI实施流程

热门文章

  1. WPF实用指南二:移除窗体的图标
  2. lvs后端realserver的vip管理脚本lvs-realsvr.sh
  3. 《深入浅出iPhone/iPad开发(第2版)》——在Xcode中建立你的界面
  4. [LeetCode系列]最大连续子列递归求解分析
  5. 如何优化数据中心虚拟机布局
  6. 源代码查看工具 Source Navigator 使用心得
  7. 生命的脆弱——悼念朋友
  8. 基于jwt的用户登录认证
  9. 编程自动化,未来机器人将超越人类?
  10. 精通Python网络爬虫:核心技术、框架与项目实战.1.1 初识网络爬虫